112853Sgabeblack@google.com/*****************************************************************************
212853Sgabeblack@google.com
312853Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412853Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512853Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612853Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712853Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812853Sgabeblack@google.com  License.  You may obtain a copy of the License at
912853Sgabeblack@google.com
1012853Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112853Sgabeblack@google.com
1212853Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312853Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412853Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512853Sgabeblack@google.com  implied.  See the License for the specific language governing
1612853Sgabeblack@google.com  permissions and limitations under the License.
1712853Sgabeblack@google.com
1812853Sgabeblack@google.com *****************************************************************************/
1912853Sgabeblack@google.com
2012853Sgabeblack@google.com/*****************************************************************************
2112853Sgabeblack@google.com
2212853Sgabeblack@google.com  scfx_mant.h -
2312853Sgabeblack@google.com
2412853Sgabeblack@google.com  Original Author: Robert Graulich, Synopsys, Inc.
2512853Sgabeblack@google.com                   Martin Janssen,  Synopsys, Inc.
2612853Sgabeblack@google.com
2712853Sgabeblack@google.com *****************************************************************************/
2812853Sgabeblack@google.com
2912853Sgabeblack@google.com/*****************************************************************************
3012853Sgabeblack@google.com
3112853Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3212853Sgabeblack@google.com  changes you are making here.
3312853Sgabeblack@google.com
3412853Sgabeblack@google.com      Name, Affiliation, Date:
3512853Sgabeblack@google.com  Description of Modification:
3612853Sgabeblack@google.com
3712853Sgabeblack@google.com *****************************************************************************/
3812853Sgabeblack@google.com
3912853Sgabeblack@google.com// $Log: scfx_mant.h,v $
4012853Sgabeblack@google.com// Revision 1.2  2011/08/24 22:05:43  acg
4112853Sgabeblack@google.com//  Torsten Maehne: initialization changes to remove warnings.
4212853Sgabeblack@google.com//
4312853Sgabeblack@google.com// Revision 1.1.1.1  2006/12/15 20:20:04  acg
4412853Sgabeblack@google.com// SystemC 2.3
4512853Sgabeblack@google.com//
4612853Sgabeblack@google.com// Revision 1.3  2006/01/13 18:53:58  acg
4712853Sgabeblack@google.com// Andy Goodrich: added $Log command so that CVS comments are reproduced in
4812853Sgabeblack@google.com// the source.
4912853Sgabeblack@google.com//
5012853Sgabeblack@google.com
5112853Sgabeblack@google.com#ifndef __SYSTEMC_EXT_DT_FX_SCFX_MANT_HH__
5212853Sgabeblack@google.com#define __SYSTEMC_EXT_DT_FX_SCFX_MANT_HH__
5312853Sgabeblack@google.com
5412853Sgabeblack@google.com#include "../../utils/endian.hh"
5512853Sgabeblack@google.com#include "../../utils/functions.hh"
5612853Sgabeblack@google.com#include "scfx_ieee.hh"
5712853Sgabeblack@google.com#include "scfx_utils.hh"
5812853Sgabeblack@google.com
5912853Sgabeblack@google.comnamespace sc_dt
6012853Sgabeblack@google.com{
6112853Sgabeblack@google.com
6212853Sgabeblack@google.com// classes defined in this module
6312853Sgabeblack@google.comclass scfx_mant;
6412853Sgabeblack@google.comclass scfx_mant_ref;
6512853Sgabeblack@google.com
6612853Sgabeblack@google.comtypedef unsigned int word;       // Using int because of 64-bit machines.
6712853Sgabeblack@google.comtypedef unsigned short half_word;
6812853Sgabeblack@google.com
6912853Sgabeblack@google.com// ----------------------------------------------------------------------------
7012853Sgabeblack@google.com//  CLASS : scfx_mant
7112853Sgabeblack@google.com//
7212853Sgabeblack@google.com//  Mantissa class.
7312853Sgabeblack@google.com// ----------------------------------------------------------------------------
7412853Sgabeblack@google.com
7512853Sgabeblack@google.comclass scfx_mant
7612853Sgabeblack@google.com{
7712853Sgabeblack@google.com    word *m_array;
7812853Sgabeblack@google.com    int m_size;
7912853Sgabeblack@google.com
8012853Sgabeblack@google.com  public:
8112853Sgabeblack@google.com    explicit scfx_mant(std::size_t);
8212853Sgabeblack@google.com    scfx_mant(const scfx_mant &);
8312853Sgabeblack@google.com
8412853Sgabeblack@google.com    scfx_mant &operator = (const scfx_mant &);
8512853Sgabeblack@google.com
8612853Sgabeblack@google.com    ~scfx_mant();
8712853Sgabeblack@google.com
8812853Sgabeblack@google.com    void clear();
8912853Sgabeblack@google.com
9012853Sgabeblack@google.com    void resize_to(int, int=0);
9112853Sgabeblack@google.com
9212853Sgabeblack@google.com    int size() const;
9312853Sgabeblack@google.com
9412853Sgabeblack@google.com    word operator [] (int) const;
9512853Sgabeblack@google.com    word &operator [] (int);
9612853Sgabeblack@google.com
9712853Sgabeblack@google.com    half_word half_at(int) const;
9812853Sgabeblack@google.com    half_word &half_at(int);
9912853Sgabeblack@google.com
10012853Sgabeblack@google.com    half_word *half_addr(int=0) const;
10112853Sgabeblack@google.com
10212853Sgabeblack@google.com  private:
10312853Sgabeblack@google.com    static word *alloc(std::size_t);
10412853Sgabeblack@google.com    static void free(word *, std::size_t);
10512853Sgabeblack@google.com
10612853Sgabeblack@google.com    static word *alloc_word(std::size_t size);
10712853Sgabeblack@google.com    static void free_word(word *array, std::size_t size);
10812853Sgabeblack@google.com};
10912853Sgabeblack@google.com
11012853Sgabeblack@google.com
11112853Sgabeblack@google.com// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
11212853Sgabeblack@google.com
11312853Sgabeblack@google.cominline int scfx_mant::size() const { return m_size; }
11412853Sgabeblack@google.com
11512853Sgabeblack@google.cominline word *
11612853Sgabeblack@google.comscfx_mant::alloc(std::size_t size)
11712853Sgabeblack@google.com{
11812853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN )
11912853Sgabeblack@google.com    return alloc_word(size) + (size - 1);
12012853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
12112853Sgabeblack@google.com    return alloc_word(size);
12212853Sgabeblack@google.com#endif
12312853Sgabeblack@google.com}
12412853Sgabeblack@google.com
12512853Sgabeblack@google.cominline void
12612853Sgabeblack@google.comscfx_mant::free(word *mant, std::size_t size)
12712853Sgabeblack@google.com{
12812853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
12912853Sgabeblack@google.com    free_word(mant - (size - 1), size);
13012853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
13112853Sgabeblack@google.com    free_word(mant, size);
13212853Sgabeblack@google.com#endif
13312853Sgabeblack@google.com}
13412853Sgabeblack@google.com
13512853Sgabeblack@google.cominline word
13612853Sgabeblack@google.comscfx_mant::operator [] (int i) const
13712853Sgabeblack@google.com{
13812853Sgabeblack@google.com    SC_ASSERT_(i >= 0 && i < m_size, "mantissa index out of range");
13912853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
14012853Sgabeblack@google.com    return m_array[-i];
14112853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
14212853Sgabeblack@google.com    return m_array[i];
14312853Sgabeblack@google.com#endif
14412853Sgabeblack@google.com}
14512853Sgabeblack@google.com
14612853Sgabeblack@google.cominline word &
14712853Sgabeblack@google.comscfx_mant::operator [] (int i)
14812853Sgabeblack@google.com{
14912853Sgabeblack@google.com    SC_ASSERT_(i >= 0 && i < m_size, "mantissa index out of range");
15012853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
15112853Sgabeblack@google.com    return m_array[-i];
15212853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
15312853Sgabeblack@google.com    return m_array[i];
15412853Sgabeblack@google.com#endif
15512853Sgabeblack@google.com}
15612853Sgabeblack@google.com
15712853Sgabeblack@google.cominline scfx_mant::scfx_mant(std::size_t size_) : m_array(0), m_size(size_)
15812853Sgabeblack@google.com{
15912853Sgabeblack@google.com    m_array = alloc(size_);
16012853Sgabeblack@google.com}
16112853Sgabeblack@google.com
16212853Sgabeblack@google.cominline scfx_mant::scfx_mant(const scfx_mant &rhs) :
16312853Sgabeblack@google.com        m_array(0), m_size(rhs.m_size)
16412853Sgabeblack@google.com{
16512853Sgabeblack@google.com    m_array = alloc(m_size);
16612853Sgabeblack@google.com    for (int i = 0; i < m_size; i++) {
16712853Sgabeblack@google.com        (*this)[i] = rhs[i];
16812853Sgabeblack@google.com    }
16912853Sgabeblack@google.com}
17012853Sgabeblack@google.com
17112853Sgabeblack@google.cominline scfx_mant &
17212853Sgabeblack@google.comscfx_mant::operator = (const scfx_mant &rhs)
17312853Sgabeblack@google.com{
17412853Sgabeblack@google.com    if (&rhs != this) {
17512853Sgabeblack@google.com        if (m_size != rhs.m_size) {
17612853Sgabeblack@google.com            free(m_array, m_size);
17712853Sgabeblack@google.com            m_array = alloc(m_size = rhs.m_size);
17812853Sgabeblack@google.com        }
17912853Sgabeblack@google.com
18012853Sgabeblack@google.com        for (int i = 0; i < m_size; i++) {
18112853Sgabeblack@google.com            (*this)[i] = rhs[i];
18212853Sgabeblack@google.com        }
18312853Sgabeblack@google.com    }
18412853Sgabeblack@google.com    return *this;
18512853Sgabeblack@google.com}
18612853Sgabeblack@google.com
18712853Sgabeblack@google.cominline scfx_mant::~scfx_mant()
18812853Sgabeblack@google.com{
18912853Sgabeblack@google.com    if (m_array != 0) {
19012853Sgabeblack@google.com        free(m_array, m_size);
19112853Sgabeblack@google.com    }
19212853Sgabeblack@google.com}
19312853Sgabeblack@google.com
19412853Sgabeblack@google.cominline void
19512853Sgabeblack@google.comscfx_mant::clear()
19612853Sgabeblack@google.com{
19712853Sgabeblack@google.com    for (int i = 0; i < m_size; i++) {
19812853Sgabeblack@google.com        (*this)[i] = 0;
19912853Sgabeblack@google.com    }
20012853Sgabeblack@google.com}
20112853Sgabeblack@google.com
20212853Sgabeblack@google.cominline void
20312853Sgabeblack@google.comscfx_mant::resize_to(int size, int restore)
20412853Sgabeblack@google.com{
20512853Sgabeblack@google.com    if (size == m_size) {
20612853Sgabeblack@google.com        return;
20712853Sgabeblack@google.com    }
20812853Sgabeblack@google.com
20912853Sgabeblack@google.com    if (!m_array) {
21012853Sgabeblack@google.com        m_array = alloc(m_size = size);
21112853Sgabeblack@google.com    } else {
21212853Sgabeblack@google.com        word* p = alloc(size);
21312853Sgabeblack@google.com
21412853Sgabeblack@google.com        if (restore) {
21512853Sgabeblack@google.com            int end = sc_min(size, m_size);
21612853Sgabeblack@google.com            if (restore == 1) { // msb resized -> align at 0
21712853Sgabeblack@google.com                for (int i = 0; i < size; i++) {
21812853Sgabeblack@google.com                    if (i < end) {
21912853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
22012853Sgabeblack@google.com                        p[-i] = m_array[-i];
22112853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
22212853Sgabeblack@google.com                        p[i] = m_array[i];
22312853Sgabeblack@google.com#endif
22412853Sgabeblack@google.com                    } else {
22512853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
22612853Sgabeblack@google.com                        p[-i] = 0;
22712853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
22812853Sgabeblack@google.com                        p[i] = 0;
22912853Sgabeblack@google.com#endif
23012853Sgabeblack@google.com                    }
23112853Sgabeblack@google.com                }
23212853Sgabeblack@google.com            } else { // lsb resized -> align at size - 1
23312853Sgabeblack@google.com                for (int i = 0; i < size; i++) {
23412853Sgabeblack@google.com                    if (i < end) {
23512853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
23612853Sgabeblack@google.com                        p[-size + 1 + i] = m_array[-m_size + 1 + i];
23712853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
23812853Sgabeblack@google.com                        p[size - 1 - i] = m_array[m_size - 1 - i];
23912853Sgabeblack@google.com#endif
24012853Sgabeblack@google.com                    } else {
24112853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
24212853Sgabeblack@google.com                        p[-size + 1 + i] = 0;
24312853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
24412853Sgabeblack@google.com                        p[size - 1 - i] = 0;
24512853Sgabeblack@google.com#endif
24612853Sgabeblack@google.com                    }
24712853Sgabeblack@google.com                }
24812853Sgabeblack@google.com            }
24912853Sgabeblack@google.com        }
25012853Sgabeblack@google.com
25112853Sgabeblack@google.com        free(m_array, m_size);
25212853Sgabeblack@google.com        m_array = p;
25312853Sgabeblack@google.com        m_size = size;
25412853Sgabeblack@google.com    }
25512853Sgabeblack@google.com}
25612853Sgabeblack@google.com
25712853Sgabeblack@google.cominline half_word
25812853Sgabeblack@google.comscfx_mant::half_at(int i) const
25912853Sgabeblack@google.com{
26012853Sgabeblack@google.com    SC_ASSERT_((i >> 1) >= 0 && (i >> 1) < m_size,
26112853Sgabeblack@google.com               "mantissa index out of range");
26212853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
26312853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array)[-i];
26412853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN )
26512853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array)[i];
26612853Sgabeblack@google.com#endif
26712853Sgabeblack@google.com}
26812853Sgabeblack@google.com
26912853Sgabeblack@google.cominline half_word &
27012853Sgabeblack@google.comscfx_mant::half_at(int i)
27112853Sgabeblack@google.com{
27212853Sgabeblack@google.com    SC_ASSERT_((i >> 1) >= 0 && (i >> 1) < m_size,
27312853Sgabeblack@google.com               "mantissa index out of range" );
27412853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
27512853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array)[-i];
27612853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
27712853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array)[i];
27812853Sgabeblack@google.com#endif
27912853Sgabeblack@google.com}
28012853Sgabeblack@google.com
28112853Sgabeblack@google.cominline half_word *
28212853Sgabeblack@google.comscfx_mant::half_addr(int i) const
28312853Sgabeblack@google.com{
28412853Sgabeblack@google.com    SC_ASSERT_(i >= 0 && i < m_size, "mantissa index out of range");
28512853Sgabeblack@google.com#if defined(SC_BOOST_BIG_ENDIAN)
28612853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array - i) + 1;
28712853Sgabeblack@google.com#elif defined(SC_BOOST_LITTLE_ENDIAN)
28812853Sgabeblack@google.com    return reinterpret_cast<half_word *>(m_array + i);
28912853Sgabeblack@google.com#endif
29012853Sgabeblack@google.com}
29112853Sgabeblack@google.com
29212853Sgabeblack@google.com// ----------------------------------------------------------------------------
29312853Sgabeblack@google.com//  one's complement of a mantissa
29412853Sgabeblack@google.com// ----------------------------------------------------------------------------
29512853Sgabeblack@google.com
29612853Sgabeblack@google.cominline void
29712853Sgabeblack@google.comcomplement(scfx_mant &target, const scfx_mant &source, int size)
29812853Sgabeblack@google.com{
29912853Sgabeblack@google.com    for (int i = 0; i < size; i++) {
30012853Sgabeblack@google.com        target[i] = ~source[i];
30112853Sgabeblack@google.com    }
30212853Sgabeblack@google.com}
30312853Sgabeblack@google.com
30412853Sgabeblack@google.com// ----------------------------------------------------------------------------
30512853Sgabeblack@google.com//  increment mantissa
30612853Sgabeblack@google.com// ----------------------------------------------------------------------------
30712853Sgabeblack@google.com
30812853Sgabeblack@google.cominline void
30912853Sgabeblack@google.cominc(scfx_mant &mant)
31012853Sgabeblack@google.com{
31112853Sgabeblack@google.com    for (int i = 0; i < mant.size(); i++) {
31212853Sgabeblack@google.com        if (++mant[i]) {
31312853Sgabeblack@google.com            break;
31412853Sgabeblack@google.com        }
31512853Sgabeblack@google.com    }
31612853Sgabeblack@google.com}
31712853Sgabeblack@google.com
31812853Sgabeblack@google.com// ----------------------------------------------------------------------------
31912853Sgabeblack@google.com//  CLASS : scfx_mant_ref
32012853Sgabeblack@google.com//
32112853Sgabeblack@google.com//  Mantissa reference class.
32212853Sgabeblack@google.com// ----------------------------------------------------------------------------
32312853Sgabeblack@google.com
32412853Sgabeblack@google.comclass scfx_mant_ref
32512853Sgabeblack@google.com{
32612853Sgabeblack@google.com    scfx_mant *m_mant;
32712853Sgabeblack@google.com    bool m_not_const;
32812853Sgabeblack@google.com
32912853Sgabeblack@google.com  public:
33012853Sgabeblack@google.com    scfx_mant_ref();
33112853Sgabeblack@google.com    scfx_mant_ref(const scfx_mant &);
33212853Sgabeblack@google.com    scfx_mant_ref(scfx_mant *);
33312853Sgabeblack@google.com
33412853Sgabeblack@google.com    scfx_mant_ref &operator = (const scfx_mant &);
33512853Sgabeblack@google.com    scfx_mant_ref &operator = (scfx_mant *);
33612853Sgabeblack@google.com
33712853Sgabeblack@google.com    ~scfx_mant_ref();
33812853Sgabeblack@google.com
33912853Sgabeblack@google.com    operator scfx_mant & ();
34012853Sgabeblack@google.com
34112853Sgabeblack@google.com    word operator [] (int);
34212853Sgabeblack@google.com
34312853Sgabeblack@google.com  private:
34412853Sgabeblack@google.com    void remove_it();
34512853Sgabeblack@google.com
34612853Sgabeblack@google.com    scfx_mant_ref(const scfx_mant_ref &);
34712853Sgabeblack@google.com    scfx_mant_ref &operator = (const scfx_mant_ref &);
34812853Sgabeblack@google.com
34912853Sgabeblack@google.com    void *operator new(std::size_t sz) { return ::operator new (sz); }
35012853Sgabeblack@google.com
35112853Sgabeblack@google.com};
35212853Sgabeblack@google.com
35312853Sgabeblack@google.com// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
35412853Sgabeblack@google.com
35512853Sgabeblack@google.cominline void
35612853Sgabeblack@google.comscfx_mant_ref::remove_it()
35712853Sgabeblack@google.com{
35812853Sgabeblack@google.com    if (m_not_const) {
35912853Sgabeblack@google.com        delete m_mant;
36012853Sgabeblack@google.com    }
36112853Sgabeblack@google.com}
36212853Sgabeblack@google.com
36312853Sgabeblack@google.cominline scfx_mant_ref::scfx_mant_ref() : m_mant(0), m_not_const(false) {}
36412853Sgabeblack@google.com
36512853Sgabeblack@google.cominline scfx_mant_ref::scfx_mant_ref(const scfx_mant &mant) :
36612853Sgabeblack@google.com        m_mant(const_cast<scfx_mant *>(& mant)), m_not_const(false)
36712853Sgabeblack@google.com{}
36812853Sgabeblack@google.com
36912853Sgabeblack@google.cominline scfx_mant_ref::scfx_mant_ref(scfx_mant *mant) :
37012853Sgabeblack@google.com        m_mant(mant), m_not_const(true)
37112853Sgabeblack@google.com{}
37212853Sgabeblack@google.com
37312853Sgabeblack@google.cominline scfx_mant_ref &
37412853Sgabeblack@google.comscfx_mant_ref::operator = (const scfx_mant &mant)
37512853Sgabeblack@google.com{
37612853Sgabeblack@google.com    remove_it();
37712853Sgabeblack@google.com
37812853Sgabeblack@google.com    m_mant = const_cast<scfx_mant *>(&mant);
37912853Sgabeblack@google.com    m_not_const = false;
38012853Sgabeblack@google.com
38112853Sgabeblack@google.com    return *this;
38212853Sgabeblack@google.com}
38312853Sgabeblack@google.com
38412853Sgabeblack@google.cominline scfx_mant_ref &
38512853Sgabeblack@google.comscfx_mant_ref::operator = (scfx_mant *mant)
38612853Sgabeblack@google.com{
38712853Sgabeblack@google.com    remove_it();
38812853Sgabeblack@google.com
38912853Sgabeblack@google.com    m_mant = mant;
39012853Sgabeblack@google.com    m_not_const = true;
39112853Sgabeblack@google.com
39212853Sgabeblack@google.com    return *this;
39312853Sgabeblack@google.com}
39412853Sgabeblack@google.com
39512853Sgabeblack@google.cominline scfx_mant_ref::~scfx_mant_ref()
39612853Sgabeblack@google.com{
39712853Sgabeblack@google.com    remove_it();
39812853Sgabeblack@google.com}
39912853Sgabeblack@google.com
40012853Sgabeblack@google.cominline scfx_mant_ref::operator scfx_mant & ()
40112853Sgabeblack@google.com{
40212853Sgabeblack@google.com    // SC_ASSERT_(m_not_const, "not allowed to modify mant");
40312853Sgabeblack@google.com    return *m_mant;
40412853Sgabeblack@google.com}
40512853Sgabeblack@google.com
40612853Sgabeblack@google.cominline word
40712853Sgabeblack@google.comscfx_mant_ref::operator [] (int i)
40812853Sgabeblack@google.com{
40912853Sgabeblack@google.com    return (*m_mant)[i];
41012853Sgabeblack@google.com}
41112853Sgabeblack@google.com
41212853Sgabeblack@google.com} // namespace sc_dt
41312853Sgabeblack@google.com
41412853Sgabeblack@google.com
41512853Sgabeblack@google.com#endif // __SYSTEMC_EXT_DT_FX_SCFX_MANT_HH__
416