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_signed_subref.h -- Proxy class that is declared in sc_signed.h. 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Ali Dasdan, Synopsys, Inc. 2512027Sjungma@eit.uni-kl.de 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 MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112027Sjungma@eit.uni-kl.de changes you are making here. 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3412027Sjungma@eit.uni-kl.de Description of Modification: 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de *****************************************************************************/ 3712027Sjungma@eit.uni-kl.de 3812027Sjungma@eit.uni-kl.de 3912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4012027Sjungma@eit.uni-kl.de// CLASS : sc_signed_subref_r 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Proxy class for sc_signed part selection (r-value only). 4312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4412027Sjungma@eit.uni-kl.de 4512027Sjungma@eit.uni-kl.de// concatenation support 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.deuint64 sc_signed_subref_r::concat_get_uint64() const 4812027Sjungma@eit.uni-kl.de{ 4912027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 5012027Sjungma@eit.uni-kl.de return a.to_uint64(); 5112027Sjungma@eit.uni-kl.de} 5212027Sjungma@eit.uni-kl.de 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.debool sc_signed_subref_r::concat_get_ctrl(sc_digit* dst_p, int low_i ) const 5512027Sjungma@eit.uni-kl.de{ 5612027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 5712027Sjungma@eit.uni-kl.de return a.concat_get_ctrl( dst_p, low_i ); 5812027Sjungma@eit.uni-kl.de} 5912027Sjungma@eit.uni-kl.de 6012027Sjungma@eit.uni-kl.de 6112027Sjungma@eit.uni-kl.debool sc_signed_subref_r::concat_get_data(sc_digit* dst_p, int low_i ) const 6212027Sjungma@eit.uni-kl.de{ 6312027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 6412027Sjungma@eit.uni-kl.de return a.concat_get_data( dst_p, low_i ); 6512027Sjungma@eit.uni-kl.de} 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de 6812027Sjungma@eit.uni-kl.de// implicit conversion to sc_signed 6912027Sjungma@eit.uni-kl.de 7012027Sjungma@eit.uni-kl.desc_signed_subref_r::operator sc_unsigned () const 7112027Sjungma@eit.uni-kl.de{ 7212027Sjungma@eit.uni-kl.de return sc_unsigned( m_obj_p, m_left, m_right ); 7312027Sjungma@eit.uni-kl.de} 7412027Sjungma@eit.uni-kl.de 7512027Sjungma@eit.uni-kl.de 7612027Sjungma@eit.uni-kl.de// explicit conversions 7712027Sjungma@eit.uni-kl.de 7812027Sjungma@eit.uni-kl.deint 7912027Sjungma@eit.uni-kl.desc_signed_subref_r::to_int() const 8012027Sjungma@eit.uni-kl.de{ 8112027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 8212027Sjungma@eit.uni-kl.de return a.to_int(); 8312027Sjungma@eit.uni-kl.de} 8412027Sjungma@eit.uni-kl.de 8512027Sjungma@eit.uni-kl.deunsigned int 8612027Sjungma@eit.uni-kl.desc_signed_subref_r::to_uint() const 8712027Sjungma@eit.uni-kl.de{ 8812027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 8912027Sjungma@eit.uni-kl.de return a.to_uint(); 9012027Sjungma@eit.uni-kl.de} 9112027Sjungma@eit.uni-kl.de 9212027Sjungma@eit.uni-kl.delong 9312027Sjungma@eit.uni-kl.desc_signed_subref_r::to_long() const 9412027Sjungma@eit.uni-kl.de{ 9512027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 9612027Sjungma@eit.uni-kl.de return a.to_long(); 9712027Sjungma@eit.uni-kl.de} 9812027Sjungma@eit.uni-kl.de 9912027Sjungma@eit.uni-kl.deunsigned long 10012027Sjungma@eit.uni-kl.desc_signed_subref_r::to_ulong() const 10112027Sjungma@eit.uni-kl.de{ 10212027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 10312027Sjungma@eit.uni-kl.de return a.to_ulong(); 10412027Sjungma@eit.uni-kl.de} 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.deint64 10712027Sjungma@eit.uni-kl.desc_signed_subref_r::to_int64() const 10812027Sjungma@eit.uni-kl.de{ 10912027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 11012027Sjungma@eit.uni-kl.de return a.to_int64(); 11112027Sjungma@eit.uni-kl.de} 11212027Sjungma@eit.uni-kl.de 11312027Sjungma@eit.uni-kl.deuint64 11412027Sjungma@eit.uni-kl.desc_signed_subref_r::to_uint64() const 11512027Sjungma@eit.uni-kl.de{ 11612027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 11712027Sjungma@eit.uni-kl.de return a.to_uint64(); 11812027Sjungma@eit.uni-kl.de} 11912027Sjungma@eit.uni-kl.de 12012027Sjungma@eit.uni-kl.dedouble 12112027Sjungma@eit.uni-kl.desc_signed_subref_r::to_double() const 12212027Sjungma@eit.uni-kl.de{ 12312027Sjungma@eit.uni-kl.de sc_unsigned a( m_obj_p, m_left, m_right ); 12412027Sjungma@eit.uni-kl.de return a.to_double(); 12512027Sjungma@eit.uni-kl.de} 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de 12812027Sjungma@eit.uni-kl.de// explicit conversion to character string 12912027Sjungma@eit.uni-kl.de 13012027Sjungma@eit.uni-kl.deconst std::string 13112027Sjungma@eit.uni-kl.desc_signed_subref_r::to_string( sc_numrep numrep ) const 13212027Sjungma@eit.uni-kl.de{ 13312027Sjungma@eit.uni-kl.de sc_unsigned a( length() ); 13412027Sjungma@eit.uni-kl.de a = *this; 13512027Sjungma@eit.uni-kl.de return a.to_string( numrep ); 13612027Sjungma@eit.uni-kl.de} 13712027Sjungma@eit.uni-kl.de 13812027Sjungma@eit.uni-kl.deconst std::string 13912027Sjungma@eit.uni-kl.desc_signed_subref_r::to_string( sc_numrep numrep, bool w_prefix ) const 14012027Sjungma@eit.uni-kl.de{ 14112027Sjungma@eit.uni-kl.de sc_unsigned a( length() ); 14212027Sjungma@eit.uni-kl.de a = *this; 14312027Sjungma@eit.uni-kl.de return a.to_string( numrep, w_prefix ); 14412027Sjungma@eit.uni-kl.de} 14512027Sjungma@eit.uni-kl.de 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 14812027Sjungma@eit.uni-kl.de// CLASS : sc_signed_subref 14912027Sjungma@eit.uni-kl.de// 15012027Sjungma@eit.uni-kl.de// Proxy class for sc_signed part selection (r-value and l-value). 15112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.de// assignment operators 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.deconst sc_signed_subref& 15612027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed_subref_r& a ) 15712027Sjungma@eit.uni-kl.de{ 15812027Sjungma@eit.uni-kl.de return operator = ( (sc_unsigned)( a ) ); 15912027Sjungma@eit.uni-kl.de} 16012027Sjungma@eit.uni-kl.de 16112027Sjungma@eit.uni-kl.deconst sc_signed_subref& 16212027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed_subref& v ) 16312027Sjungma@eit.uni-kl.de{ 16412027Sjungma@eit.uni-kl.de if( this == &v ) { 16512027Sjungma@eit.uni-kl.de return *this; 16612027Sjungma@eit.uni-kl.de } 16712027Sjungma@eit.uni-kl.de return operator = ( (sc_unsigned)( v ) ); 16812027Sjungma@eit.uni-kl.de} 16912027Sjungma@eit.uni-kl.de 17012027Sjungma@eit.uni-kl.deconst sc_signed_subref& 17112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_signed& v ) 17212027Sjungma@eit.uni-kl.de{ 17312027Sjungma@eit.uni-kl.de int i; 17412027Sjungma@eit.uni-kl.de int l = sc_min( m_left, v.nbits - 1 + m_right ); 17512027Sjungma@eit.uni-kl.de 17612027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); 17712027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set( i, v.test( l ) ); 17812027Sjungma@eit.uni-kl.de 17912027Sjungma@eit.uni-kl.de return *this; 18012027Sjungma@eit.uni-kl.de} 18112027Sjungma@eit.uni-kl.de 18212027Sjungma@eit.uni-kl.deconst sc_signed_subref& 18312027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_unsigned_subref_r& v ) 18412027Sjungma@eit.uni-kl.de{ 18512027Sjungma@eit.uni-kl.de return operator = ( (sc_unsigned)( v ) ); 18612027Sjungma@eit.uni-kl.de} 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.deconst sc_signed_subref& 18912027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_unsigned& v ) 19012027Sjungma@eit.uni-kl.de{ 19112027Sjungma@eit.uni-kl.de int i; 19212027Sjungma@eit.uni-kl.de int l = sc_min( m_left, v.nbits - 1 + m_right ); 19312027Sjungma@eit.uni-kl.de 19412027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i ) m_obj_p->set( i, v.test( i - m_right ) ); 19512027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set( i, 0 ); 19612027Sjungma@eit.uni-kl.de return *this; 19712027Sjungma@eit.uni-kl.de} 19812027Sjungma@eit.uni-kl.de 19912027Sjungma@eit.uni-kl.deconst sc_signed_subref& 20012027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( unsigned long v ) 20112027Sjungma@eit.uni-kl.de{ 20212027Sjungma@eit.uni-kl.de for( int i = m_right; i <= m_left; ++ i ) { 20312027Sjungma@eit.uni-kl.de m_obj_p->set( i, static_cast<bool>( v & 1 ) ); 20412027Sjungma@eit.uni-kl.de v >>= 1; 20512027Sjungma@eit.uni-kl.de } 20612027Sjungma@eit.uni-kl.de return *this; 20712027Sjungma@eit.uni-kl.de} 20812027Sjungma@eit.uni-kl.de 20912027Sjungma@eit.uni-kl.deconst sc_signed_subref& 21012027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( long v ) 21112027Sjungma@eit.uni-kl.de{ 21212027Sjungma@eit.uni-kl.de unsigned long v2 = (unsigned long) v; 21312027Sjungma@eit.uni-kl.de for( int i = m_right; i <= m_left; ++ i ) { 21412027Sjungma@eit.uni-kl.de m_obj_p->set( i, static_cast<bool>( v2 & 1 ) ); 21512027Sjungma@eit.uni-kl.de v2 >>= 1; 21612027Sjungma@eit.uni-kl.de } 21712027Sjungma@eit.uni-kl.de return *this; 21812027Sjungma@eit.uni-kl.de} 21912027Sjungma@eit.uni-kl.de 22012027Sjungma@eit.uni-kl.deconst sc_signed_subref& 22112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( uint64 v ) 22212027Sjungma@eit.uni-kl.de{ 22312027Sjungma@eit.uni-kl.de for( int i = m_right; i <= m_left; ++ i ) { 22412027Sjungma@eit.uni-kl.de m_obj_p->set( i, static_cast<bool>( v & 1 ) ); 22512027Sjungma@eit.uni-kl.de v >>= 1; 22612027Sjungma@eit.uni-kl.de } 22712027Sjungma@eit.uni-kl.de return *this; 22812027Sjungma@eit.uni-kl.de} 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.deconst sc_signed_subref& 23112027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( int64 v ) 23212027Sjungma@eit.uni-kl.de{ 23312027Sjungma@eit.uni-kl.de uint64 v2 = (uint64) v; 23412027Sjungma@eit.uni-kl.de for( int i = m_right; i <= m_left; ++ i ) { 23512027Sjungma@eit.uni-kl.de m_obj_p->set( i, static_cast<bool>( v2 & 1 ) ); 23612027Sjungma@eit.uni-kl.de v2 >>= 1; 23712027Sjungma@eit.uni-kl.de } 23812027Sjungma@eit.uni-kl.de return *this; 23912027Sjungma@eit.uni-kl.de} 24012027Sjungma@eit.uni-kl.de 24112027Sjungma@eit.uni-kl.deconst sc_signed_subref& 24212027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( double v ) 24312027Sjungma@eit.uni-kl.de{ 24412027Sjungma@eit.uni-kl.de is_bad_double(v); 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.de int nb = m_left - m_right + 1; 24712027Sjungma@eit.uni-kl.de int nd = DIV_CEIL(nb); 24812027Sjungma@eit.uni-kl.de 24912027Sjungma@eit.uni-kl.de#ifdef SC_MAX_NBITS 25012027Sjungma@eit.uni-kl.de sc_digit d[MAX_NDIGITS]; 25112027Sjungma@eit.uni-kl.de#else 25212027Sjungma@eit.uni-kl.de sc_digit *d = new sc_digit[nd]; 25312027Sjungma@eit.uni-kl.de#endif 25412027Sjungma@eit.uni-kl.de 25512027Sjungma@eit.uni-kl.de if (v < 0) 25612027Sjungma@eit.uni-kl.de v = -v; 25712027Sjungma@eit.uni-kl.de 25812027Sjungma@eit.uni-kl.de int i = 0; 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de while (floor(v) && (i < nd)) { 26112027Sjungma@eit.uni-kl.de#ifndef _WIN32 26212027Sjungma@eit.uni-kl.de d[i++] = (sc_digit) floor(remainder(v, DIGIT_RADIX)); 26312027Sjungma@eit.uni-kl.de#else 26412027Sjungma@eit.uni-kl.de d[i++] = (sc_digit) floor(fmod(v, DIGIT_RADIX)); 26512027Sjungma@eit.uni-kl.de#endif 26612027Sjungma@eit.uni-kl.de v /= DIGIT_RADIX; 26712027Sjungma@eit.uni-kl.de } 26812027Sjungma@eit.uni-kl.de 26912027Sjungma@eit.uni-kl.de vec_zero(i, nd, d); 27012027Sjungma@eit.uni-kl.de 27112027Sjungma@eit.uni-kl.de sc_digit val = 1; // Bit value. 27212027Sjungma@eit.uni-kl.de int j = 0; // Current digit in d. 27312027Sjungma@eit.uni-kl.de 27412027Sjungma@eit.uni-kl.de i = 0; // Current bit in d. 27512027Sjungma@eit.uni-kl.de 27612027Sjungma@eit.uni-kl.de while (i < nb) { 27712027Sjungma@eit.uni-kl.de 27812027Sjungma@eit.uni-kl.de m_obj_p->set(i + m_right, (bool) (d[j] & val)); 27912027Sjungma@eit.uni-kl.de 28012027Sjungma@eit.uni-kl.de ++i; 28112027Sjungma@eit.uni-kl.de 28212027Sjungma@eit.uni-kl.de if (i % BITS_PER_DIGIT == 0) { 28312027Sjungma@eit.uni-kl.de val = 1; 28412027Sjungma@eit.uni-kl.de ++j; 28512027Sjungma@eit.uni-kl.de } 28612027Sjungma@eit.uni-kl.de else 28712027Sjungma@eit.uni-kl.de val <<= 1; 28812027Sjungma@eit.uni-kl.de } 28912027Sjungma@eit.uni-kl.de 29012027Sjungma@eit.uni-kl.de#ifndef SC_MAX_NBITS 29112027Sjungma@eit.uni-kl.de delete [] d; 29212027Sjungma@eit.uni-kl.de#endif 29312027Sjungma@eit.uni-kl.de 29412027Sjungma@eit.uni-kl.de return *this; 29512027Sjungma@eit.uni-kl.de} 29612027Sjungma@eit.uni-kl.de 29712027Sjungma@eit.uni-kl.deconst sc_signed_subref& 29812027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_int_base& a ) 29912027Sjungma@eit.uni-kl.de{ 30012027Sjungma@eit.uni-kl.de return operator = ( (int64) a ); 30112027Sjungma@eit.uni-kl.de} 30212027Sjungma@eit.uni-kl.de 30312027Sjungma@eit.uni-kl.deconst sc_signed_subref& 30412027Sjungma@eit.uni-kl.desc_signed_subref::operator = ( const sc_uint_base& a ) 30512027Sjungma@eit.uni-kl.de{ 30612027Sjungma@eit.uni-kl.de return operator = ( (uint64) a ); 30712027Sjungma@eit.uni-kl.de} 30812027Sjungma@eit.uni-kl.de 30912027Sjungma@eit.uni-kl.de// concatenation methods 31012027Sjungma@eit.uni-kl.de 31112027Sjungma@eit.uni-kl.de 31212027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( int64 src, int low_i ) 31312027Sjungma@eit.uni-kl.de{ 31412027Sjungma@eit.uni-kl.de int i; 31512027Sjungma@eit.uni-kl.de int l; 31612027Sjungma@eit.uni-kl.de bool sign = src < 0; 31712027Sjungma@eit.uni-kl.de 31812027Sjungma@eit.uni-kl.de if ( low_i < 64 ) 31912027Sjungma@eit.uni-kl.de { 32012027Sjungma@eit.uni-kl.de src = src >> low_i; 32112027Sjungma@eit.uni-kl.de l = sc_min( m_left, (63-low_i) + m_right ); 32212027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i ) { 32312027Sjungma@eit.uni-kl.de m_obj_p->set( i, src & 1 ); 32412027Sjungma@eit.uni-kl.de src = src >> 1; 32512027Sjungma@eit.uni-kl.de } 32612027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign); 32712027Sjungma@eit.uni-kl.de } 32812027Sjungma@eit.uni-kl.de else 32912027Sjungma@eit.uni-kl.de { 33012027Sjungma@eit.uni-kl.de for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign); 33112027Sjungma@eit.uni-kl.de } 33212027Sjungma@eit.uni-kl.de} 33312027Sjungma@eit.uni-kl.de 33412027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( const sc_signed& src, int low_i ) 33512027Sjungma@eit.uni-kl.de{ 33612027Sjungma@eit.uni-kl.de int i; 33712027Sjungma@eit.uni-kl.de int l; 33812027Sjungma@eit.uni-kl.de int src_i; 33912027Sjungma@eit.uni-kl.de bool sign = src.test(src.nbits-1); 34012027Sjungma@eit.uni-kl.de l = src.nbits - (low_i+1); 34112027Sjungma@eit.uni-kl.de if ( l >= 0 ) 34212027Sjungma@eit.uni-kl.de { 34312027Sjungma@eit.uni-kl.de l = sc_min( m_left, l + m_right ); 34412027Sjungma@eit.uni-kl.de src_i = low_i; 34512027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i, src_i++ ) { 34612027Sjungma@eit.uni-kl.de m_obj_p->set( i, src.test( src_i ) ); 34712027Sjungma@eit.uni-kl.de } 34812027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set(i, sign); 34912027Sjungma@eit.uni-kl.de } 35012027Sjungma@eit.uni-kl.de else 35112027Sjungma@eit.uni-kl.de { 35212027Sjungma@eit.uni-kl.de for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(i, sign); 35312027Sjungma@eit.uni-kl.de } 35412027Sjungma@eit.uni-kl.de} 35512027Sjungma@eit.uni-kl.de 35612027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( const sc_unsigned& src, int low_i ) 35712027Sjungma@eit.uni-kl.de{ 35812027Sjungma@eit.uni-kl.de int i; 35912027Sjungma@eit.uni-kl.de int l; 36012027Sjungma@eit.uni-kl.de int src_i; 36112027Sjungma@eit.uni-kl.de l = src.nbits - (low_i+2); 36212027Sjungma@eit.uni-kl.de if ( l >= 0 ) 36312027Sjungma@eit.uni-kl.de { 36412027Sjungma@eit.uni-kl.de l = sc_min( m_left, l + m_right ); 36512027Sjungma@eit.uni-kl.de src_i = low_i; 36612027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i, src_i++ ) { 36712027Sjungma@eit.uni-kl.de m_obj_p->set( i, src.test( src_i ) ); 36812027Sjungma@eit.uni-kl.de } 36912027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set(false); 37012027Sjungma@eit.uni-kl.de } 37112027Sjungma@eit.uni-kl.de else 37212027Sjungma@eit.uni-kl.de { 37312027Sjungma@eit.uni-kl.de for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false); 37412027Sjungma@eit.uni-kl.de } 37512027Sjungma@eit.uni-kl.de} 37612027Sjungma@eit.uni-kl.de 37712027Sjungma@eit.uni-kl.devoid sc_signed_subref::concat_set( uint64 src, int low_i ) 37812027Sjungma@eit.uni-kl.de{ 37912027Sjungma@eit.uni-kl.de int i; 38012027Sjungma@eit.uni-kl.de int l; 38112027Sjungma@eit.uni-kl.de 38212027Sjungma@eit.uni-kl.de if ( low_i < 64 ) 38312027Sjungma@eit.uni-kl.de { 38412027Sjungma@eit.uni-kl.de src = src >> low_i; 38512027Sjungma@eit.uni-kl.de l = sc_min( m_left, (63-low_i) + m_right ); 38612027Sjungma@eit.uni-kl.de for( i = m_right; i <= l; ++ i ) { 38712027Sjungma@eit.uni-kl.de m_obj_p->set( i, src & 1 ); 38812027Sjungma@eit.uni-kl.de src = src >> 1; 38912027Sjungma@eit.uni-kl.de } 39012027Sjungma@eit.uni-kl.de for ( ; i <= m_left; i++ ) m_obj_p->set(false); 39112027Sjungma@eit.uni-kl.de } 39212027Sjungma@eit.uni-kl.de else 39312027Sjungma@eit.uni-kl.de { 39412027Sjungma@eit.uni-kl.de for( i = m_right; i <= m_left; ++ i ) m_obj_p->set(false); 39512027Sjungma@eit.uni-kl.de } 39612027Sjungma@eit.uni-kl.de} 39712027Sjungma@eit.uni-kl.de// other methods 39812027Sjungma@eit.uni-kl.de 39912027Sjungma@eit.uni-kl.devoid 40012027Sjungma@eit.uni-kl.desc_signed_subref::scan( ::std::istream& is ) 40112027Sjungma@eit.uni-kl.de{ 40212027Sjungma@eit.uni-kl.de std::string s; 40312027Sjungma@eit.uni-kl.de is >> s; 40412027Sjungma@eit.uni-kl.de *this = s.c_str(); 40512027Sjungma@eit.uni-kl.de} 40612027Sjungma@eit.uni-kl.de 40712027Sjungma@eit.uni-kl.de 40812027Sjungma@eit.uni-kl.de// End of file 409