sc_bigint.h revision 12027
112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_bigint.h -- Template version of sc_signed. This class enables 2312027Sjungma@eit.uni-kl.de compile-time bit widths for sc_signed numbers. 2412027Sjungma@eit.uni-kl.de 2512027Sjungma@eit.uni-kl.de Original Author: Ali Dasdan, Synopsys, Inc. 2612027Sjungma@eit.uni-kl.de 2712027Sjungma@eit.uni-kl.de *****************************************************************************/ 2812027Sjungma@eit.uni-kl.de 2912027Sjungma@eit.uni-kl.de/***************************************************************************** 3012027Sjungma@eit.uni-kl.de 3112027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3212027Sjungma@eit.uni-kl.de changes you are making here. 3312027Sjungma@eit.uni-kl.de 3412027Sjungma@eit.uni-kl.de Name, Affiliation, Date: Gene Bushayev, Synopsys, Inc. 3512027Sjungma@eit.uni-kl.de Description of Modification: - Interface between sc_bigint and sc_bv/sc_lv. 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3812027Sjungma@eit.uni-kl.de Description of Modification: 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.de *****************************************************************************/ 4112027Sjungma@eit.uni-kl.de 4212027Sjungma@eit.uni-kl.de// $Log: sc_bigint.h,v $ 4312027Sjungma@eit.uni-kl.de// Revision 1.2 2011/02/18 20:19:14 acg 4412027Sjungma@eit.uni-kl.de// Andy Goodrich: updating Copyright notice. 4512027Sjungma@eit.uni-kl.de// 4612027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:05 acg 4712027Sjungma@eit.uni-kl.de// SystemC 2.3 4812027Sjungma@eit.uni-kl.de// 4912027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:49:31 acg 5012027Sjungma@eit.uni-kl.de// Added $Log command so that CVS check in comments are reproduced in the 5112027Sjungma@eit.uni-kl.de// source. 5212027Sjungma@eit.uni-kl.de// 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.de#ifndef SC_BIGINT_H 5512027Sjungma@eit.uni-kl.de#define SC_BIGINT_H 5612027Sjungma@eit.uni-kl.de 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h" 5912027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h" 6012027Sjungma@eit.uni-kl.de 6112027Sjungma@eit.uni-kl.denamespace sc_dt 6212027Sjungma@eit.uni-kl.de{ 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.de// classes defined in this module 6512027Sjungma@eit.uni-kl.detemplate <int W> class sc_bigint; 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de// forward class declarations 6812027Sjungma@eit.uni-kl.declass sc_bv_base; 6912027Sjungma@eit.uni-kl.declass sc_lv_base; 7012027Sjungma@eit.uni-kl.declass sc_fxval; 7112027Sjungma@eit.uni-kl.declass sc_fxval_fast; 7212027Sjungma@eit.uni-kl.declass sc_fxnum; 7312027Sjungma@eit.uni-kl.declass sc_fxnum_fast; 7412027Sjungma@eit.uni-kl.de 7512027Sjungma@eit.uni-kl.de 7612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7712027Sjungma@eit.uni-kl.de// CLASS TEMPLATE : sc_bigint<W> 7812027Sjungma@eit.uni-kl.de// 7912027Sjungma@eit.uni-kl.de// Arbitrary size signed integer type. 8012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 8112027Sjungma@eit.uni-kl.de 8212027Sjungma@eit.uni-kl.de#ifdef SC_MAX_NBITS 8312027Sjungma@eit.uni-kl.detemplate< int W = SC_MAX_NBITS > 8412027Sjungma@eit.uni-kl.de#else 8512027Sjungma@eit.uni-kl.detemplate< int W > 8612027Sjungma@eit.uni-kl.de#endif 8712027Sjungma@eit.uni-kl.declass sc_bigint 8812027Sjungma@eit.uni-kl.de : public sc_signed 8912027Sjungma@eit.uni-kl.de{ 9012027Sjungma@eit.uni-kl.depublic: 9112027Sjungma@eit.uni-kl.de 9212027Sjungma@eit.uni-kl.de // constructors 9312027Sjungma@eit.uni-kl.de 9412027Sjungma@eit.uni-kl.de sc_bigint() 9512027Sjungma@eit.uni-kl.de : sc_signed( W ) 9612027Sjungma@eit.uni-kl.de {} 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de sc_bigint( const sc_bigint<W>& v ) 9912027Sjungma@eit.uni-kl.de : sc_signed( W ) 10012027Sjungma@eit.uni-kl.de { *this = v; } 10112027Sjungma@eit.uni-kl.de 10212027Sjungma@eit.uni-kl.de sc_bigint( const sc_signed& v ) 10312027Sjungma@eit.uni-kl.de : sc_signed( W ) 10412027Sjungma@eit.uni-kl.de { *this = v; } 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.de sc_bigint( const sc_signed_subref& v ) 10712027Sjungma@eit.uni-kl.de : sc_signed( W ) 10812027Sjungma@eit.uni-kl.de { *this = v; } 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.de template< class T > 11112027Sjungma@eit.uni-kl.de sc_bigint( const sc_generic_base<T>& a ) 11212027Sjungma@eit.uni-kl.de : sc_signed( W ) 11312027Sjungma@eit.uni-kl.de { a->to_sc_signed(*this); } 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de sc_bigint( const sc_unsigned& v ) 11612027Sjungma@eit.uni-kl.de : sc_signed( W ) 11712027Sjungma@eit.uni-kl.de { *this = v; } 11812027Sjungma@eit.uni-kl.de 11912027Sjungma@eit.uni-kl.de sc_bigint( const sc_unsigned_subref& v ) 12012027Sjungma@eit.uni-kl.de : sc_signed( W ) 12112027Sjungma@eit.uni-kl.de { *this = v; } 12212027Sjungma@eit.uni-kl.de 12312027Sjungma@eit.uni-kl.de sc_bigint( const char* v ) 12412027Sjungma@eit.uni-kl.de : sc_signed( W ) 12512027Sjungma@eit.uni-kl.de { *this = v; } 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de sc_bigint( int64 v ) 12812027Sjungma@eit.uni-kl.de : sc_signed( W ) 12912027Sjungma@eit.uni-kl.de { *this = v; } 13012027Sjungma@eit.uni-kl.de 13112027Sjungma@eit.uni-kl.de sc_bigint( uint64 v ) 13212027Sjungma@eit.uni-kl.de : sc_signed( W ) 13312027Sjungma@eit.uni-kl.de { *this = v; } 13412027Sjungma@eit.uni-kl.de 13512027Sjungma@eit.uni-kl.de sc_bigint( long v ) 13612027Sjungma@eit.uni-kl.de : sc_signed( W ) 13712027Sjungma@eit.uni-kl.de { *this = v; } 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de sc_bigint( unsigned long v ) 14012027Sjungma@eit.uni-kl.de : sc_signed( W ) 14112027Sjungma@eit.uni-kl.de { *this = v; } 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.de sc_bigint( int v ) 14412027Sjungma@eit.uni-kl.de : sc_signed( W ) 14512027Sjungma@eit.uni-kl.de { *this = v; } 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.de sc_bigint( unsigned int v ) 14812027Sjungma@eit.uni-kl.de : sc_signed( W ) 14912027Sjungma@eit.uni-kl.de { *this = v; } 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de sc_bigint( double v ) 15212027Sjungma@eit.uni-kl.de : sc_signed( W ) 15312027Sjungma@eit.uni-kl.de { *this = v; } 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de sc_bigint( const sc_bv_base& v ) 15612027Sjungma@eit.uni-kl.de : sc_signed( W ) 15712027Sjungma@eit.uni-kl.de { *this = v; } 15812027Sjungma@eit.uni-kl.de 15912027Sjungma@eit.uni-kl.de sc_bigint( const sc_lv_base& v ) 16012027Sjungma@eit.uni-kl.de : sc_signed( W ) 16112027Sjungma@eit.uni-kl.de { *this = v; } 16212027Sjungma@eit.uni-kl.de 16312027Sjungma@eit.uni-kl.de#ifdef SC_INCLUDE_FX 16412027Sjungma@eit.uni-kl.de 16512027Sjungma@eit.uni-kl.de explicit sc_bigint( const sc_fxval& v ) 16612027Sjungma@eit.uni-kl.de : sc_signed( W ) 16712027Sjungma@eit.uni-kl.de { *this = v; } 16812027Sjungma@eit.uni-kl.de 16912027Sjungma@eit.uni-kl.de explicit sc_bigint( const sc_fxval_fast& v ) 17012027Sjungma@eit.uni-kl.de : sc_signed( W ) 17112027Sjungma@eit.uni-kl.de { *this = v; } 17212027Sjungma@eit.uni-kl.de 17312027Sjungma@eit.uni-kl.de explicit sc_bigint( const sc_fxnum& v ) 17412027Sjungma@eit.uni-kl.de : sc_signed( W ) 17512027Sjungma@eit.uni-kl.de { *this = v; } 17612027Sjungma@eit.uni-kl.de 17712027Sjungma@eit.uni-kl.de explicit sc_bigint( const sc_fxnum_fast& v ) 17812027Sjungma@eit.uni-kl.de : sc_signed( W ) 17912027Sjungma@eit.uni-kl.de { *this = v; } 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de#endif 18212027Sjungma@eit.uni-kl.de 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.de#ifndef SC_MAX_NBITS 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.de // destructor 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.de ~sc_bigint() 18912027Sjungma@eit.uni-kl.de {} 19012027Sjungma@eit.uni-kl.de 19112027Sjungma@eit.uni-kl.de#endif 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.de // assignment operators 19412027Sjungma@eit.uni-kl.de 19512027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_bigint<W>& v ) 19612027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 19712027Sjungma@eit.uni-kl.de 19812027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_signed& v ) 19912027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 20012027Sjungma@eit.uni-kl.de 20112027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = (const sc_signed_subref& v ) 20212027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 20312027Sjungma@eit.uni-kl.de 20412027Sjungma@eit.uni-kl.de template< class T > 20512027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_generic_base<T>& a ) 20612027Sjungma@eit.uni-kl.de { a->to_sc_signed(*this); return *this;} 20712027Sjungma@eit.uni-kl.de 20812027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_unsigned& v ) 20912027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 21012027Sjungma@eit.uni-kl.de 21112027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_unsigned_subref& v ) 21212027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 21312027Sjungma@eit.uni-kl.de 21412027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const char* v ) 21512027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 21612027Sjungma@eit.uni-kl.de 21712027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( int64 v ) 21812027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 21912027Sjungma@eit.uni-kl.de 22012027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( uint64 v ) 22112027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 22212027Sjungma@eit.uni-kl.de 22312027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( long v ) 22412027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 22512027Sjungma@eit.uni-kl.de 22612027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( unsigned long v ) 22712027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 22812027Sjungma@eit.uni-kl.de 22912027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( int v ) 23012027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( unsigned int v ) 23312027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 23412027Sjungma@eit.uni-kl.de 23512027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( double v ) 23612027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 23712027Sjungma@eit.uni-kl.de 23812027Sjungma@eit.uni-kl.de 23912027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_bv_base& v ) 24012027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 24112027Sjungma@eit.uni-kl.de 24212027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_lv_base& v ) 24312027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 24412027Sjungma@eit.uni-kl.de 24512027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_int_base& v ) 24612027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 24712027Sjungma@eit.uni-kl.de 24812027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_uint_base& v ) 24912027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 25012027Sjungma@eit.uni-kl.de 25112027Sjungma@eit.uni-kl.de#ifdef SC_INCLUDE_FX 25212027Sjungma@eit.uni-kl.de 25312027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_fxval& v ) 25412027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 25512027Sjungma@eit.uni-kl.de 25612027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_fxval_fast& v ) 25712027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_fxnum& v ) 26012027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 26112027Sjungma@eit.uni-kl.de 26212027Sjungma@eit.uni-kl.de sc_bigint<W>& operator = ( const sc_fxnum_fast& v ) 26312027Sjungma@eit.uni-kl.de { sc_signed::operator = ( v ); return *this; } 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de#endif 26612027Sjungma@eit.uni-kl.de}; 26712027Sjungma@eit.uni-kl.de 26812027Sjungma@eit.uni-kl.de} // namespace sc_dt 26912027Sjungma@eit.uni-kl.de 27012027Sjungma@eit.uni-kl.de 27112027Sjungma@eit.uni-kl.de#endif 272