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