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.cpp -- Arbitrary precision signed arithmetic. 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de This file includes the definitions of sc_signed_bitref, 2512027Sjungma@eit.uni-kl.de sc_signed_subref, and sc_signed classes. The first two 2612027Sjungma@eit.uni-kl.de classes are proxy classes to reference one bit and a range 2712027Sjungma@eit.uni-kl.de of bits of a sc_signed number, respectively. This file also 2812027Sjungma@eit.uni-kl.de includes sc_nbcommon.cpp and sc_nbfriends.cpp, which 2912027Sjungma@eit.uni-kl.de contain the definitions shared by sc_unsigned. 3012027Sjungma@eit.uni-kl.de 3112027Sjungma@eit.uni-kl.de Original Author: Ali Dasdan, Synopsys, Inc. 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de *****************************************************************************/ 3412027Sjungma@eit.uni-kl.de 3512027Sjungma@eit.uni-kl.de/***************************************************************************** 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3812027Sjungma@eit.uni-kl.de changes you are making here. 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 4112027Sjungma@eit.uni-kl.de Description of Modification: 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.de *****************************************************************************/ 4412027Sjungma@eit.uni-kl.de 4512027Sjungma@eit.uni-kl.de 4612027Sjungma@eit.uni-kl.de// $Log: sc_signed.cpp,v $ 4712027Sjungma@eit.uni-kl.de// Revision 1.6 2011/02/18 20:19:15 acg 4812027Sjungma@eit.uni-kl.de// Andy Goodrich: updating Copyright notice. 4912027Sjungma@eit.uni-kl.de// 5012027Sjungma@eit.uni-kl.de// Revision 1.5 2008/12/10 20:38:45 acg 5112027Sjungma@eit.uni-kl.de// Andy Goodrich: fixed conversion of double values to the digits vector. 5212027Sjungma@eit.uni-kl.de// The bits above the radix were not being masked off. 5312027Sjungma@eit.uni-kl.de// 5412027Sjungma@eit.uni-kl.de// Revision 1.4 2008/06/19 17:47:56 acg 5512027Sjungma@eit.uni-kl.de// Andy Goodrich: fixes for bugs. See 2.2.1 RELEASENOTES. 5612027Sjungma@eit.uni-kl.de// 5712027Sjungma@eit.uni-kl.de// Revision 1.3 2008/04/29 21:20:41 acg 5812027Sjungma@eit.uni-kl.de// Andy Goodrich: added mask to first word transferred when processing 5912027Sjungma@eit.uni-kl.de// a negative sc_signed value in sc_signed::concat_get_data(). 6012027Sjungma@eit.uni-kl.de// 6112027Sjungma@eit.uni-kl.de// Revision 1.2 2007/11/04 21:27:00 acg 6212027Sjungma@eit.uni-kl.de// Andy Goodrich: changes to make sure the proper value is returned from 6312027Sjungma@eit.uni-kl.de// concat_get_data(). 6412027Sjungma@eit.uni-kl.de// 6512027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:05 acg 6612027Sjungma@eit.uni-kl.de// SystemC 2.3 6712027Sjungma@eit.uni-kl.de// 6812027Sjungma@eit.uni-kl.de// Revision 1.5 2006/10/23 19:32:47 acg 6912027Sjungma@eit.uni-kl.de// Andy Goodrich: further fix for incorrect value being returned from 7012027Sjungma@eit.uni-kl.de// concat_get_data. This one is in the non-aligned value code. 7112027Sjungma@eit.uni-kl.de// 7212027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:49:32 acg 7312027Sjungma@eit.uni-kl.de// Added $Log command so that CVS check in comments are reproduced in the 7412027Sjungma@eit.uni-kl.de// source. 7512027Sjungma@eit.uni-kl.de// 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.de#include <ctype.h> 7812027Sjungma@eit.uni-kl.de#include <math.h> 7912027Sjungma@eit.uni-kl.de 8012027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_cmnhdr.h" 8112027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_macros.h" 8212027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h" 8312027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h" 8412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_int_base.h" 8512027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_uint_base.h" 8612027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_int_ids.h" 8712027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_bv_base.h" 8812027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_lv_base.h" 8912027Sjungma@eit.uni-kl.de#include "sysc/datatypes/misc/sc_concatref.h" 9012027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fix.h" 9112027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/scfx_other_defs.h" 9212027Sjungma@eit.uni-kl.de 9312027Sjungma@eit.uni-kl.de 9412027Sjungma@eit.uni-kl.denamespace sc_dt 9512027Sjungma@eit.uni-kl.de{ 9612027Sjungma@eit.uni-kl.de 9712027Sjungma@eit.uni-kl.de// Pool of temporary instances: 9812027Sjungma@eit.uni-kl.de 9912027Sjungma@eit.uni-kl.desc_core::sc_vpool<sc_signed_bitref> sc_signed_bitref::m_pool(9); 10012027Sjungma@eit.uni-kl.desc_core::sc_vpool<sc_signed_subref> sc_signed_subref::m_pool(9); 10112027Sjungma@eit.uni-kl.de 10212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------- 10312027Sjungma@eit.uni-kl.de// SECTION: Public members - Invalid selections. 10412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------- 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.devoid 10712027Sjungma@eit.uni-kl.desc_signed::invalid_index( int i ) const 10812027Sjungma@eit.uni-kl.de{ 10912027Sjungma@eit.uni-kl.de char msg[BUFSIZ]; 11012027Sjungma@eit.uni-kl.de std::sprintf( msg, 11112027Sjungma@eit.uni-kl.de "sc_bigint bit selection: index = %d violates " 11212027Sjungma@eit.uni-kl.de "0 <= index <= %d", i, nbits - 1 ); 11312027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg ); 11412027Sjungma@eit.uni-kl.de} 11512027Sjungma@eit.uni-kl.de 11612027Sjungma@eit.uni-kl.devoid 11712027Sjungma@eit.uni-kl.desc_signed::invalid_range( int l, int r ) const 11812027Sjungma@eit.uni-kl.de{ 11912027Sjungma@eit.uni-kl.de char msg[BUFSIZ]; 12012027Sjungma@eit.uni-kl.de std::sprintf( msg, 12112027Sjungma@eit.uni-kl.de "sc_bigint part selection: left = %d, right = %d \n" 12212027Sjungma@eit.uni-kl.de " violates either (%d >= left >= 0) or (%d >= right >= 0)", 12312027Sjungma@eit.uni-kl.de l, r, nbits-1, nbits-1 ); 12412027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_OUT_OF_BOUNDS_, msg ); 12512027Sjungma@eit.uni-kl.de} 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de 12812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 12912027Sjungma@eit.uni-kl.de 13012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 13112027Sjungma@eit.uni-kl.de// SECTION: Public members. 13212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 13312027Sjungma@eit.uni-kl.de 13412027Sjungma@eit.uni-kl.de// Most public members are included from sc_nbcommon.inc. However, some 13512027Sjungma@eit.uni-kl.de// concatenation support appears here to optimize between the signed and 13612027Sjungma@eit.uni-kl.de// unsigned cases. 13712027Sjungma@eit.uni-kl.de 13812027Sjungma@eit.uni-kl.de// Insert this object's value at the specified place in a vector of biguint 13912027Sjungma@eit.uni-kl.de// style values. 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.debool sc_signed::concat_get_ctrl( sc_digit* dst_p, int low_i ) const 14212027Sjungma@eit.uni-kl.de{ 14312027Sjungma@eit.uni-kl.de int dst_i; // Index to next word to set in dst_p. 14412027Sjungma@eit.uni-kl.de int end_i; // Index of high order word to set. 14512027Sjungma@eit.uni-kl.de int left_shift; // Amount to shift value left. 14612027Sjungma@eit.uni-kl.de sc_digit mask; // Mask for partial word sets. 14712027Sjungma@eit.uni-kl.de 14812027Sjungma@eit.uni-kl.de 14912027Sjungma@eit.uni-kl.de // CALCULATE METRICS FOR DATA MOVEMENT: 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de dst_i = low_i / BITS_PER_DIGIT; 15212027Sjungma@eit.uni-kl.de end_i = (low_i + nbits - 1) / BITS_PER_DIGIT; 15312027Sjungma@eit.uni-kl.de left_shift = low_i % BITS_PER_DIGIT; 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de 15612027Sjungma@eit.uni-kl.de // ALL DATA TO BE MOVED IS IN A SINGLE WORD: 15712027Sjungma@eit.uni-kl.de 15812027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 15912027Sjungma@eit.uni-kl.de dst_p[dst_i] = ( dst_p[dst_i] & ~mask ); 16012027Sjungma@eit.uni-kl.de dst_i++; 16112027Sjungma@eit.uni-kl.de 16212027Sjungma@eit.uni-kl.de for ( ; dst_i <= end_i; dst_i++ ) dst_p[dst_i] = 0; 16312027Sjungma@eit.uni-kl.de 16412027Sjungma@eit.uni-kl.de return false; 16512027Sjungma@eit.uni-kl.de} 16612027Sjungma@eit.uni-kl.de 16712027Sjungma@eit.uni-kl.debool sc_signed::concat_get_data( sc_digit* dst_p, int low_i ) const 16812027Sjungma@eit.uni-kl.de{ 16912027Sjungma@eit.uni-kl.de sc_digit carry; // Carry bit for complements. 17012027Sjungma@eit.uni-kl.de int dst_i; // Index to next word to set in dst_p. 17112027Sjungma@eit.uni-kl.de int end_i; // Index of high order word to set. 17212027Sjungma@eit.uni-kl.de int high_i; // Index w/in word of high order bit. 17312027Sjungma@eit.uni-kl.de int left_shift; // Amount to shift value left. 17412027Sjungma@eit.uni-kl.de sc_digit left_word; // High word component for set. 17512027Sjungma@eit.uni-kl.de sc_digit mask; // Mask for partial word sets. 17612027Sjungma@eit.uni-kl.de bool result; // True if inserted non-zero data. 17712027Sjungma@eit.uni-kl.de int right_shift; // Amount to shift value right. 17812027Sjungma@eit.uni-kl.de sc_digit right_word; // Low word component for set. 17912027Sjungma@eit.uni-kl.de int src_i; // Index to next word to get from digit. 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de 18212027Sjungma@eit.uni-kl.de 18312027Sjungma@eit.uni-kl.de // CALCULATE METRICS FOR DATA MOVEMENT: 18412027Sjungma@eit.uni-kl.de 18512027Sjungma@eit.uni-kl.de dst_i = low_i / BITS_PER_DIGIT; 18612027Sjungma@eit.uni-kl.de high_i = low_i + nbits - 1; 18712027Sjungma@eit.uni-kl.de end_i = high_i / BITS_PER_DIGIT; 18812027Sjungma@eit.uni-kl.de left_shift = low_i % BITS_PER_DIGIT; 18912027Sjungma@eit.uni-kl.de 19012027Sjungma@eit.uni-kl.de switch ( sgn ) 19112027Sjungma@eit.uni-kl.de { 19212027Sjungma@eit.uni-kl.de // POSITIVE SOURCE VALUE: 19312027Sjungma@eit.uni-kl.de 19412027Sjungma@eit.uni-kl.de case SC_POS: 19512027Sjungma@eit.uni-kl.de 19612027Sjungma@eit.uni-kl.de result = true; 19712027Sjungma@eit.uni-kl.de 19812027Sjungma@eit.uni-kl.de // ALL DATA TO BE MOVED IS IN A SINGLE WORD: 19912027Sjungma@eit.uni-kl.de 20012027Sjungma@eit.uni-kl.de if ( dst_i == end_i ) 20112027Sjungma@eit.uni-kl.de { 20212027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 20312027Sjungma@eit.uni-kl.de dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | 20412027Sjungma@eit.uni-kl.de (digit[0] << left_shift) ) & DIGIT_MASK; 20512027Sjungma@eit.uni-kl.de } 20612027Sjungma@eit.uni-kl.de 20712027Sjungma@eit.uni-kl.de 20812027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: 20912027Sjungma@eit.uni-kl.de 21012027Sjungma@eit.uni-kl.de else if ( left_shift == 0 ) 21112027Sjungma@eit.uni-kl.de { 21212027Sjungma@eit.uni-kl.de for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) 21312027Sjungma@eit.uni-kl.de { 21412027Sjungma@eit.uni-kl.de dst_p[dst_i] = digit[src_i]; 21512027Sjungma@eit.uni-kl.de } 21612027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 21712027Sjungma@eit.uni-kl.de mask = ~(-2 << high_i) & DIGIT_MASK; 21812027Sjungma@eit.uni-kl.de dst_p[dst_i] = digit[src_i] & mask; 21912027Sjungma@eit.uni-kl.de } 22012027Sjungma@eit.uni-kl.de 22112027Sjungma@eit.uni-kl.de 22212027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.de else 22512027Sjungma@eit.uni-kl.de { 22612027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 22712027Sjungma@eit.uni-kl.de right_shift = BITS_PER_DIGIT - left_shift; 22812027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 22912027Sjungma@eit.uni-kl.de right_word = digit[0]; 23012027Sjungma@eit.uni-kl.de dst_p[dst_i] = (dst_p[dst_i] & mask) | 23112027Sjungma@eit.uni-kl.de ((right_word << left_shift) & DIGIT_MASK); 23212027Sjungma@eit.uni-kl.de for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) 23312027Sjungma@eit.uni-kl.de { 23412027Sjungma@eit.uni-kl.de left_word = digit[src_i]; 23512027Sjungma@eit.uni-kl.de dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | 23612027Sjungma@eit.uni-kl.de (right_word >> right_shift); 23712027Sjungma@eit.uni-kl.de right_word = left_word; 23812027Sjungma@eit.uni-kl.de } 23912027Sjungma@eit.uni-kl.de left_word = (src_i < ndigits) ? digit[src_i] : 0; 24012027Sjungma@eit.uni-kl.de mask = ~(-2 << high_i) & DIGIT_MASK; 24112027Sjungma@eit.uni-kl.de dst_p[dst_i] = ((left_word << left_shift) | 24212027Sjungma@eit.uni-kl.de (right_word >> right_shift)) & mask; 24312027Sjungma@eit.uni-kl.de } 24412027Sjungma@eit.uni-kl.de break; 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.de 24712027Sjungma@eit.uni-kl.de // SOURCE VALUE IS NEGATIVE: 24812027Sjungma@eit.uni-kl.de 24912027Sjungma@eit.uni-kl.de case SC_NEG: 25012027Sjungma@eit.uni-kl.de 25112027Sjungma@eit.uni-kl.de // ALL DATA TO BE MOVED IS IN A SINGLE WORD: 25212027Sjungma@eit.uni-kl.de 25312027Sjungma@eit.uni-kl.de result = true; 25412027Sjungma@eit.uni-kl.de if ( dst_i == end_i ) 25512027Sjungma@eit.uni-kl.de { 25612027Sjungma@eit.uni-kl.de mask = ~(-1 << nbits); 25712027Sjungma@eit.uni-kl.de right_word = ((digit[0] ^ DIGIT_MASK) + 1) & mask; 25812027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 25912027Sjungma@eit.uni-kl.de dst_p[dst_i] = ( ( dst_p[dst_i] & mask ) | 26012027Sjungma@eit.uni-kl.de (right_word << left_shift) ) & DIGIT_MASK; 26112027Sjungma@eit.uni-kl.de } 26212027Sjungma@eit.uni-kl.de 26312027Sjungma@eit.uni-kl.de 26412027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: 26512027Sjungma@eit.uni-kl.de 26612027Sjungma@eit.uni-kl.de else if ( left_shift == 0 ) 26712027Sjungma@eit.uni-kl.de { 26812027Sjungma@eit.uni-kl.de carry = 1; 26912027Sjungma@eit.uni-kl.de for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) 27012027Sjungma@eit.uni-kl.de { 27112027Sjungma@eit.uni-kl.de right_word = (digit[src_i] ^ DIGIT_MASK) + carry; 27212027Sjungma@eit.uni-kl.de dst_p[dst_i] = right_word & DIGIT_MASK; 27312027Sjungma@eit.uni-kl.de carry = right_word >> BITS_PER_DIGIT; 27412027Sjungma@eit.uni-kl.de } 27512027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 27612027Sjungma@eit.uni-kl.de mask = (~(-2 << high_i)) & DIGIT_MASK; 27712027Sjungma@eit.uni-kl.de right_word = (src_i < ndigits) ? 27812027Sjungma@eit.uni-kl.de (digit[src_i] ^ DIGIT_MASK) + carry : DIGIT_MASK + carry; 27912027Sjungma@eit.uni-kl.de dst_p[dst_i] = right_word & mask; 28012027Sjungma@eit.uni-kl.de } 28112027Sjungma@eit.uni-kl.de 28212027Sjungma@eit.uni-kl.de 28312027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: 28412027Sjungma@eit.uni-kl.de 28512027Sjungma@eit.uni-kl.de else 28612027Sjungma@eit.uni-kl.de { 28712027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 28812027Sjungma@eit.uni-kl.de right_shift = BITS_PER_DIGIT - left_shift; 28912027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 29012027Sjungma@eit.uni-kl.de carry = 1; 29112027Sjungma@eit.uni-kl.de right_word = (digit[0] ^ DIGIT_MASK) + carry; 29212027Sjungma@eit.uni-kl.de dst_p[dst_i] = (dst_p[dst_i] & mask) | 29312027Sjungma@eit.uni-kl.de ((right_word << left_shift) & DIGIT_MASK); 29412027Sjungma@eit.uni-kl.de carry = right_word >> BITS_PER_DIGIT; 29512027Sjungma@eit.uni-kl.de right_word &= DIGIT_MASK; 29612027Sjungma@eit.uni-kl.de for ( src_i = 1, dst_i++; dst_i < end_i; dst_i++, src_i++ ) 29712027Sjungma@eit.uni-kl.de { 29812027Sjungma@eit.uni-kl.de left_word = (digit[src_i] ^ DIGIT_MASK) + carry; 29912027Sjungma@eit.uni-kl.de dst_p[dst_i] = ((left_word << left_shift)&DIGIT_MASK) | 30012027Sjungma@eit.uni-kl.de (right_word >> right_shift); 30112027Sjungma@eit.uni-kl.de carry = left_word >> BITS_PER_DIGIT; 30212027Sjungma@eit.uni-kl.de right_word = left_word & DIGIT_MASK; 30312027Sjungma@eit.uni-kl.de } 30412027Sjungma@eit.uni-kl.de left_word = (src_i < ndigits) ? 30512027Sjungma@eit.uni-kl.de (digit[src_i] ^ DIGIT_MASK) + carry : carry; 30612027Sjungma@eit.uni-kl.de mask = ~(-2 << high_i) & DIGIT_MASK; 30712027Sjungma@eit.uni-kl.de dst_p[dst_i] = ((left_word << left_shift) | 30812027Sjungma@eit.uni-kl.de (right_word >> right_shift)) & mask; 30912027Sjungma@eit.uni-kl.de } 31012027Sjungma@eit.uni-kl.de break; 31112027Sjungma@eit.uni-kl.de 31212027Sjungma@eit.uni-kl.de 31312027Sjungma@eit.uni-kl.de // VALUE IS ZERO: 31412027Sjungma@eit.uni-kl.de 31512027Sjungma@eit.uni-kl.de default: 31612027Sjungma@eit.uni-kl.de result = false; 31712027Sjungma@eit.uni-kl.de 31812027Sjungma@eit.uni-kl.de 31912027Sjungma@eit.uni-kl.de // ALL DATA TO BE MOVED IS IN A SINGLE WORD: 32012027Sjungma@eit.uni-kl.de 32112027Sjungma@eit.uni-kl.de if ( dst_i == end_i ) 32212027Sjungma@eit.uni-kl.de { 32312027Sjungma@eit.uni-kl.de mask = ~(-1 << nbits) << left_shift; 32412027Sjungma@eit.uni-kl.de dst_p[dst_i] = dst_p[dst_i] & ~mask; 32512027Sjungma@eit.uni-kl.de } 32612027Sjungma@eit.uni-kl.de 32712027Sjungma@eit.uni-kl.de 32812027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, BUT IS WORD ALIGNED: 32912027Sjungma@eit.uni-kl.de 33012027Sjungma@eit.uni-kl.de else if ( left_shift == 0 ) 33112027Sjungma@eit.uni-kl.de { 33212027Sjungma@eit.uni-kl.de carry = 1; 33312027Sjungma@eit.uni-kl.de for ( src_i = 0; dst_i < end_i; dst_i++, src_i++ ) 33412027Sjungma@eit.uni-kl.de { 33512027Sjungma@eit.uni-kl.de dst_p[dst_i] = 0; 33612027Sjungma@eit.uni-kl.de } 33712027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 33812027Sjungma@eit.uni-kl.de mask = ~(-2 << high_i) & DIGIT_MASK; 33912027Sjungma@eit.uni-kl.de dst_p[dst_i] = 0; // #### digit[src_i] & mask; 34012027Sjungma@eit.uni-kl.de } 34112027Sjungma@eit.uni-kl.de 34212027Sjungma@eit.uni-kl.de 34312027Sjungma@eit.uni-kl.de // DATA IS IN MORE THAN ONE WORD, AND NOT WORD ALIGNED: 34412027Sjungma@eit.uni-kl.de 34512027Sjungma@eit.uni-kl.de else 34612027Sjungma@eit.uni-kl.de { 34712027Sjungma@eit.uni-kl.de high_i = high_i % BITS_PER_DIGIT; 34812027Sjungma@eit.uni-kl.de right_shift = BITS_PER_DIGIT - left_shift; 34912027Sjungma@eit.uni-kl.de mask = ~(-1 << left_shift); 35012027Sjungma@eit.uni-kl.de dst_p[dst_i] = (dst_p[dst_i] & mask); 35112027Sjungma@eit.uni-kl.de for ( dst_i++; dst_i <= end_i; dst_i++ ) 35212027Sjungma@eit.uni-kl.de { 35312027Sjungma@eit.uni-kl.de dst_p[dst_i] = 0; 35412027Sjungma@eit.uni-kl.de } 35512027Sjungma@eit.uni-kl.de } 35612027Sjungma@eit.uni-kl.de break; 35712027Sjungma@eit.uni-kl.de } 35812027Sjungma@eit.uni-kl.de return result; 35912027Sjungma@eit.uni-kl.de} 36012027Sjungma@eit.uni-kl.de 36112027Sjungma@eit.uni-kl.de// Return this object instance's bits as a uint64 without sign extension. 36212027Sjungma@eit.uni-kl.de 36312027Sjungma@eit.uni-kl.deuint64 sc_signed::concat_get_uint64() const 36412027Sjungma@eit.uni-kl.de{ 36512027Sjungma@eit.uni-kl.de uint64 result; 36612027Sjungma@eit.uni-kl.de 36712027Sjungma@eit.uni-kl.de switch ( sgn ) 36812027Sjungma@eit.uni-kl.de { 36912027Sjungma@eit.uni-kl.de case SC_POS: 37012027Sjungma@eit.uni-kl.de result = 0; 37112027Sjungma@eit.uni-kl.de if ( ndigits > 2 ) 37212027Sjungma@eit.uni-kl.de result = digit[2]; 37312027Sjungma@eit.uni-kl.de if ( ndigits > 1 ) 37412027Sjungma@eit.uni-kl.de result = (result << BITS_PER_DIGIT) | digit[1]; 37512027Sjungma@eit.uni-kl.de result = (result << BITS_PER_DIGIT) | digit[0]; 37612027Sjungma@eit.uni-kl.de break; 37712027Sjungma@eit.uni-kl.de case SC_NEG: 37812027Sjungma@eit.uni-kl.de result = 0; 37912027Sjungma@eit.uni-kl.de if ( ndigits > 2 ) 38012027Sjungma@eit.uni-kl.de result = digit[2]; 38112027Sjungma@eit.uni-kl.de if ( ndigits > 1 ) 38212027Sjungma@eit.uni-kl.de result = (result << BITS_PER_DIGIT) | digit[1]; 38312027Sjungma@eit.uni-kl.de result = (result << BITS_PER_DIGIT) | digit[0]; 38412027Sjungma@eit.uni-kl.de result = -result; 38512027Sjungma@eit.uni-kl.de if ( nbits < 64 ) 38612027Sjungma@eit.uni-kl.de { 38712027Sjungma@eit.uni-kl.de uint64 mask = ~0; 38812027Sjungma@eit.uni-kl.de result = result & ~(mask << nbits); 38912027Sjungma@eit.uni-kl.de } 39012027Sjungma@eit.uni-kl.de break; 39112027Sjungma@eit.uni-kl.de default: 39212027Sjungma@eit.uni-kl.de result = 0; 39312027Sjungma@eit.uni-kl.de break; 39412027Sjungma@eit.uni-kl.de } 39512027Sjungma@eit.uni-kl.de return result; 39612027Sjungma@eit.uni-kl.de} 39712027Sjungma@eit.uni-kl.de 39812027Sjungma@eit.uni-kl.de// #### OPTIMIZE 39912027Sjungma@eit.uni-kl.devoid sc_signed::concat_set(int64 src, int low_i) 40012027Sjungma@eit.uni-kl.de{ 40112027Sjungma@eit.uni-kl.de *this = (low_i < 64) ? src >> low_i : src >> 63; 40212027Sjungma@eit.uni-kl.de} 40312027Sjungma@eit.uni-kl.de 40412027Sjungma@eit.uni-kl.devoid sc_signed::concat_set(const sc_signed& src, int low_i) 40512027Sjungma@eit.uni-kl.de{ 40612027Sjungma@eit.uni-kl.de if ( low_i < src.length() ) 40712027Sjungma@eit.uni-kl.de *this = src >> low_i; 40812027Sjungma@eit.uni-kl.de else 40912027Sjungma@eit.uni-kl.de *this = (src<0) ? (int_type)-1 : 0; 41012027Sjungma@eit.uni-kl.de} 41112027Sjungma@eit.uni-kl.de 41212027Sjungma@eit.uni-kl.devoid sc_signed::concat_set(const sc_unsigned& src, int low_i) 41312027Sjungma@eit.uni-kl.de{ 41412027Sjungma@eit.uni-kl.de if ( low_i < src.length() ) 41512027Sjungma@eit.uni-kl.de *this = src >> low_i; 41612027Sjungma@eit.uni-kl.de else 41712027Sjungma@eit.uni-kl.de *this = 0; 41812027Sjungma@eit.uni-kl.de} 41912027Sjungma@eit.uni-kl.de 42012027Sjungma@eit.uni-kl.devoid sc_signed::concat_set(uint64 src, int low_i) 42112027Sjungma@eit.uni-kl.de{ 42212027Sjungma@eit.uni-kl.de *this = (low_i < 64) ? src >> low_i : 0; 42312027Sjungma@eit.uni-kl.de} 42412027Sjungma@eit.uni-kl.de 42512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 42612027Sjungma@eit.uni-kl.de// SECTION: Public members - Reduction methods. 42712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 42812027Sjungma@eit.uni-kl.de 42912027Sjungma@eit.uni-kl.debool sc_signed::and_reduce() const 43012027Sjungma@eit.uni-kl.de{ 43112027Sjungma@eit.uni-kl.de sc_digit current; // Current digit examining. 43212027Sjungma@eit.uni-kl.de int i; // Index of digit examining. 43312027Sjungma@eit.uni-kl.de 43412027Sjungma@eit.uni-kl.de if ( sgn == SC_NEG ) 43512027Sjungma@eit.uni-kl.de { 43612027Sjungma@eit.uni-kl.de current = (1 << BITS_PER_DIGIT); 43712027Sjungma@eit.uni-kl.de for ( i = 0; i < ndigits-1; i++ ) 43812027Sjungma@eit.uni-kl.de { 43912027Sjungma@eit.uni-kl.de current = (current >> BITS_PER_DIGIT) + (digit[i]^DIGIT_MASK); 44012027Sjungma@eit.uni-kl.de if ( (current & DIGIT_MASK) != DIGIT_MASK ) return false; 44112027Sjungma@eit.uni-kl.de } 44212027Sjungma@eit.uni-kl.de current = (current >> BITS_PER_DIGIT) + (digit[i]^DIGIT_MASK); 44312027Sjungma@eit.uni-kl.de if ( (current & ~(-1 << (nbits % BITS_PER_DIGIT))) == 44412027Sjungma@eit.uni-kl.de (sc_digit) ~(-1 << (nbits % BITS_PER_DIGIT)) ) 44512027Sjungma@eit.uni-kl.de return true; 44612027Sjungma@eit.uni-kl.de } 44712027Sjungma@eit.uni-kl.de return false; 44812027Sjungma@eit.uni-kl.de} 44912027Sjungma@eit.uni-kl.de 45012027Sjungma@eit.uni-kl.debool sc_signed::or_reduce() const 45112027Sjungma@eit.uni-kl.de{ 45212027Sjungma@eit.uni-kl.de return sgn == SC_ZERO ? false : true; 45312027Sjungma@eit.uni-kl.de} 45412027Sjungma@eit.uni-kl.de 45512027Sjungma@eit.uni-kl.debool sc_signed::xor_reduce() const 45612027Sjungma@eit.uni-kl.de{ 45712027Sjungma@eit.uni-kl.de int i; // Digit examining. 45812027Sjungma@eit.uni-kl.de int odd; // Flag for odd number of digits. 45912027Sjungma@eit.uni-kl.de 46012027Sjungma@eit.uni-kl.de odd = 0; 46112027Sjungma@eit.uni-kl.de for ( i = 0; i < nbits; i++ ) 46212027Sjungma@eit.uni-kl.de if ( test(i) ) odd = ~odd; 46312027Sjungma@eit.uni-kl.de return odd ? true : false; 46412027Sjungma@eit.uni-kl.de} 46512027Sjungma@eit.uni-kl.de 46612027Sjungma@eit.uni-kl.de 46712027Sjungma@eit.uni-kl.de 46812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 46912027Sjungma@eit.uni-kl.de// SECTION: Public members - Assignment operators. 47012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 47112027Sjungma@eit.uni-kl.de 47212027Sjungma@eit.uni-kl.de// assignment operators 47312027Sjungma@eit.uni-kl.de 47412027Sjungma@eit.uni-kl.deconst sc_signed& 47512027Sjungma@eit.uni-kl.desc_signed::operator = ( const char* a ) 47612027Sjungma@eit.uni-kl.de{ 47712027Sjungma@eit.uni-kl.de if( a == 0 ) { 47812027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, 47912027Sjungma@eit.uni-kl.de "character string is zero" ); 48012027Sjungma@eit.uni-kl.de } 48112027Sjungma@eit.uni-kl.de if( *a == 0 ) { 48212027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, 48312027Sjungma@eit.uni-kl.de "character string is empty" ); 48412027Sjungma@eit.uni-kl.de } 48512027Sjungma@eit.uni-kl.de try { 48612027Sjungma@eit.uni-kl.de int len = length(); 48712027Sjungma@eit.uni-kl.de sc_fix aa( a, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); 48812027Sjungma@eit.uni-kl.de return this->operator = ( aa ); 48912027Sjungma@eit.uni-kl.de } catch( sc_core::sc_report ) { 49012027Sjungma@eit.uni-kl.de char msg[BUFSIZ]; 49112027Sjungma@eit.uni-kl.de std::sprintf( msg, "character string '%s' is not valid", a ); 49212027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_CONVERSION_FAILED_, msg ); 49312027Sjungma@eit.uni-kl.de // never reached 49412027Sjungma@eit.uni-kl.de } 49512027Sjungma@eit.uni-kl.de return *this; 49612027Sjungma@eit.uni-kl.de} 49712027Sjungma@eit.uni-kl.de 49812027Sjungma@eit.uni-kl.deconst sc_signed& 49912027Sjungma@eit.uni-kl.desc_signed::operator=(int64 v) 50012027Sjungma@eit.uni-kl.de{ 50112027Sjungma@eit.uni-kl.de sgn = get_sign(v); 50212027Sjungma@eit.uni-kl.de // v >= 0 now. 50312027Sjungma@eit.uni-kl.de if (sgn == SC_ZERO) 50412027Sjungma@eit.uni-kl.de vec_zero(ndigits, digit); 50512027Sjungma@eit.uni-kl.de else { 50612027Sjungma@eit.uni-kl.de from_uint(ndigits, digit, (uint64) v); 50712027Sjungma@eit.uni-kl.de if (nbits <= (int)BITS_PER_INT64) 50812027Sjungma@eit.uni-kl.de convert_SM_to_2C_to_SM(); 50912027Sjungma@eit.uni-kl.de } 51012027Sjungma@eit.uni-kl.de return *this; 51112027Sjungma@eit.uni-kl.de} 51212027Sjungma@eit.uni-kl.de 51312027Sjungma@eit.uni-kl.deconst sc_signed& 51412027Sjungma@eit.uni-kl.desc_signed::operator=(uint64 v) 51512027Sjungma@eit.uni-kl.de{ 51612027Sjungma@eit.uni-kl.de sgn = get_sign(v); 51712027Sjungma@eit.uni-kl.de if (sgn == SC_ZERO) 51812027Sjungma@eit.uni-kl.de vec_zero(ndigits, digit); 51912027Sjungma@eit.uni-kl.de else { 52012027Sjungma@eit.uni-kl.de from_uint(ndigits, digit, v); 52112027Sjungma@eit.uni-kl.de if (nbits <= (int)BITS_PER_INT64) 52212027Sjungma@eit.uni-kl.de convert_SM_to_2C_to_SM(); 52312027Sjungma@eit.uni-kl.de } 52412027Sjungma@eit.uni-kl.de return *this; 52512027Sjungma@eit.uni-kl.de} 52612027Sjungma@eit.uni-kl.de 52712027Sjungma@eit.uni-kl.deconst sc_signed& 52812027Sjungma@eit.uni-kl.desc_signed::operator=(long v) 52912027Sjungma@eit.uni-kl.de{ 53012027Sjungma@eit.uni-kl.de sgn = get_sign(v); 53112027Sjungma@eit.uni-kl.de // v >= 0 now. 53212027Sjungma@eit.uni-kl.de if (sgn == SC_ZERO) 53312027Sjungma@eit.uni-kl.de vec_zero(ndigits, digit); 53412027Sjungma@eit.uni-kl.de else { 53512027Sjungma@eit.uni-kl.de from_uint(ndigits, digit, (unsigned long) v); 53612027Sjungma@eit.uni-kl.de if (nbits <= (int)BITS_PER_LONG) 53712027Sjungma@eit.uni-kl.de convert_SM_to_2C_to_SM(); 53812027Sjungma@eit.uni-kl.de } 53912027Sjungma@eit.uni-kl.de return *this; 54012027Sjungma@eit.uni-kl.de} 54112027Sjungma@eit.uni-kl.de 54212027Sjungma@eit.uni-kl.deconst sc_signed& 54312027Sjungma@eit.uni-kl.desc_signed::operator=(unsigned long v) 54412027Sjungma@eit.uni-kl.de{ 54512027Sjungma@eit.uni-kl.de sgn = get_sign(v); 54612027Sjungma@eit.uni-kl.de if (sgn == SC_ZERO) 54712027Sjungma@eit.uni-kl.de vec_zero(ndigits, digit); 54812027Sjungma@eit.uni-kl.de else { 54912027Sjungma@eit.uni-kl.de from_uint(ndigits, digit, v); 55012027Sjungma@eit.uni-kl.de if (nbits <= (int)BITS_PER_LONG) 55112027Sjungma@eit.uni-kl.de convert_SM_to_2C_to_SM(); 55212027Sjungma@eit.uni-kl.de } 55312027Sjungma@eit.uni-kl.de return *this; 55412027Sjungma@eit.uni-kl.de} 55512027Sjungma@eit.uni-kl.de 55612027Sjungma@eit.uni-kl.deconst sc_signed& 55712027Sjungma@eit.uni-kl.desc_signed::operator=(double v) 55812027Sjungma@eit.uni-kl.de{ 55912027Sjungma@eit.uni-kl.de is_bad_double(v); 56012027Sjungma@eit.uni-kl.de if (v < 0) { 56112027Sjungma@eit.uni-kl.de v = -v; 56212027Sjungma@eit.uni-kl.de sgn = SC_NEG; 56312027Sjungma@eit.uni-kl.de } 56412027Sjungma@eit.uni-kl.de else 56512027Sjungma@eit.uni-kl.de sgn = SC_POS; 56612027Sjungma@eit.uni-kl.de int i = 0; 56712027Sjungma@eit.uni-kl.de while (floor(v) && (i < ndigits)) { 56812027Sjungma@eit.uni-kl.de#ifndef _WIN32 56912027Sjungma@eit.uni-kl.de digit[i++] = ((sc_digit)floor(remainder(v, DIGIT_RADIX))) & DIGIT_MASK; 57012027Sjungma@eit.uni-kl.de#else 57112027Sjungma@eit.uni-kl.de digit[i++] = ((sc_digit)floor(fmod(v, DIGIT_RADIX))) & DIGIT_MASK; 57212027Sjungma@eit.uni-kl.de#endif 57312027Sjungma@eit.uni-kl.de v /= DIGIT_RADIX; 57412027Sjungma@eit.uni-kl.de } 57512027Sjungma@eit.uni-kl.de vec_zero(i, ndigits, digit); 57612027Sjungma@eit.uni-kl.de convert_SM_to_2C_to_SM(); 57712027Sjungma@eit.uni-kl.de return *this; 57812027Sjungma@eit.uni-kl.de} 57912027Sjungma@eit.uni-kl.de 58012027Sjungma@eit.uni-kl.de 58112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 58212027Sjungma@eit.uni-kl.de 58312027Sjungma@eit.uni-kl.deconst sc_signed& 58412027Sjungma@eit.uni-kl.desc_signed::operator = ( const sc_bv_base& v ) 58512027Sjungma@eit.uni-kl.de{ 58612027Sjungma@eit.uni-kl.de int minlen = sc_min( nbits, v.length() ); 58712027Sjungma@eit.uni-kl.de int i = 0; 58812027Sjungma@eit.uni-kl.de for( ; i < minlen; ++ i ) { 58912027Sjungma@eit.uni-kl.de safe_set( i, v.get_bit( i ), digit ); 59012027Sjungma@eit.uni-kl.de } 59112027Sjungma@eit.uni-kl.de for( ; i < nbits; ++ i ) { 59212027Sjungma@eit.uni-kl.de safe_set( i, 0, digit ); // zero-extend 59312027Sjungma@eit.uni-kl.de } 59412027Sjungma@eit.uni-kl.de convert_2C_to_SM(); 59512027Sjungma@eit.uni-kl.de return *this; 59612027Sjungma@eit.uni-kl.de} 59712027Sjungma@eit.uni-kl.de 59812027Sjungma@eit.uni-kl.deconst sc_signed& 59912027Sjungma@eit.uni-kl.desc_signed::operator = ( const sc_lv_base& v ) 60012027Sjungma@eit.uni-kl.de{ 60112027Sjungma@eit.uni-kl.de int minlen = sc_min( nbits, v.length() ); 60212027Sjungma@eit.uni-kl.de int i = 0; 60312027Sjungma@eit.uni-kl.de for( ; i < minlen; ++ i ) { 60412027Sjungma@eit.uni-kl.de safe_set( i, sc_logic( v.get_bit( i ) ).to_bool(), digit ); 60512027Sjungma@eit.uni-kl.de } 60612027Sjungma@eit.uni-kl.de for( ; i < nbits; ++ i ) { 60712027Sjungma@eit.uni-kl.de safe_set( i, 0, digit ); // zero-extend 60812027Sjungma@eit.uni-kl.de } 60912027Sjungma@eit.uni-kl.de convert_2C_to_SM(); 61012027Sjungma@eit.uni-kl.de return *this; 61112027Sjungma@eit.uni-kl.de} 61212027Sjungma@eit.uni-kl.de 61312027Sjungma@eit.uni-kl.de 61412027Sjungma@eit.uni-kl.de// explicit conversion to character string 61512027Sjungma@eit.uni-kl.de 61612027Sjungma@eit.uni-kl.deconst std::string 61712027Sjungma@eit.uni-kl.desc_signed::to_string( sc_numrep numrep ) const 61812027Sjungma@eit.uni-kl.de{ 61912027Sjungma@eit.uni-kl.de int len = length(); 62012027Sjungma@eit.uni-kl.de sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); 62112027Sjungma@eit.uni-kl.de return aa.to_string( numrep ); 62212027Sjungma@eit.uni-kl.de} 62312027Sjungma@eit.uni-kl.de 62412027Sjungma@eit.uni-kl.deconst std::string 62512027Sjungma@eit.uni-kl.desc_signed::to_string( sc_numrep numrep, bool w_prefix ) const 62612027Sjungma@eit.uni-kl.de{ 62712027Sjungma@eit.uni-kl.de int len = length(); 62812027Sjungma@eit.uni-kl.de sc_fix aa( *this, len, len, SC_TRN, SC_WRAP, 0, SC_ON ); 62912027Sjungma@eit.uni-kl.de return aa.to_string( numrep, w_prefix ); 63012027Sjungma@eit.uni-kl.de} 63112027Sjungma@eit.uni-kl.de 63212027Sjungma@eit.uni-kl.de 63312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 63412027Sjungma@eit.uni-kl.de// SECTION: Interfacing with sc_int_base 63512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 63612027Sjungma@eit.uni-kl.de 63712027Sjungma@eit.uni-kl.deconst sc_signed& 63812027Sjungma@eit.uni-kl.desc_signed::operator = (const sc_int_base& v) 63912027Sjungma@eit.uni-kl.de{ return operator=((int64) v); } 64012027Sjungma@eit.uni-kl.de 64112027Sjungma@eit.uni-kl.de 64212027Sjungma@eit.uni-kl.desc_signed 64312027Sjungma@eit.uni-kl.deoperator + ( const sc_unsigned& u, const sc_int_base& v ) 64412027Sjungma@eit.uni-kl.de{ return operator + ( u, SCAST<int64>( v ) ); } 64512027Sjungma@eit.uni-kl.de 64612027Sjungma@eit.uni-kl.desc_signed 64712027Sjungma@eit.uni-kl.deoperator + ( const sc_int_base& u, const sc_unsigned& v ) 64812027Sjungma@eit.uni-kl.de{ return operator + ( SCAST<int64>( u ), v ); } 64912027Sjungma@eit.uni-kl.de 65012027Sjungma@eit.uni-kl.desc_signed 65112027Sjungma@eit.uni-kl.deoperator + (const sc_signed& u, const sc_int_base& v) 65212027Sjungma@eit.uni-kl.de{ return operator+(u, (int64) v); } 65312027Sjungma@eit.uni-kl.de 65412027Sjungma@eit.uni-kl.desc_signed 65512027Sjungma@eit.uni-kl.deoperator + (const sc_int_base& u, const sc_signed& v) 65612027Sjungma@eit.uni-kl.de{ return operator+((int64) u, v); } 65712027Sjungma@eit.uni-kl.de 65812027Sjungma@eit.uni-kl.deconst sc_signed& 65912027Sjungma@eit.uni-kl.desc_signed::operator += (const sc_int_base& v) 66012027Sjungma@eit.uni-kl.de{ return operator+=((int64) v); } 66112027Sjungma@eit.uni-kl.de 66212027Sjungma@eit.uni-kl.de 66312027Sjungma@eit.uni-kl.desc_signed 66412027Sjungma@eit.uni-kl.deoperator - (const sc_unsigned& u, const sc_int_base& v) 66512027Sjungma@eit.uni-kl.de{ return operator-(u, (int64) v); } 66612027Sjungma@eit.uni-kl.de 66712027Sjungma@eit.uni-kl.desc_signed 66812027Sjungma@eit.uni-kl.deoperator - (const sc_int_base& u, const sc_unsigned& v) 66912027Sjungma@eit.uni-kl.de{ return operator-((int64) u, v); } 67012027Sjungma@eit.uni-kl.de 67112027Sjungma@eit.uni-kl.desc_signed 67212027Sjungma@eit.uni-kl.deoperator-(const sc_signed& u, const sc_int_base& v) 67312027Sjungma@eit.uni-kl.de{ return operator-(u, (int64) v); } 67412027Sjungma@eit.uni-kl.de 67512027Sjungma@eit.uni-kl.desc_signed 67612027Sjungma@eit.uni-kl.deoperator - (const sc_int_base& u, const sc_signed& v) 67712027Sjungma@eit.uni-kl.de{ return operator-((int64) u, v); } 67812027Sjungma@eit.uni-kl.de 67912027Sjungma@eit.uni-kl.deconst sc_signed& 68012027Sjungma@eit.uni-kl.desc_signed::operator -= (const sc_int_base& v) 68112027Sjungma@eit.uni-kl.de{ return operator-=((int64) v); } 68212027Sjungma@eit.uni-kl.de 68312027Sjungma@eit.uni-kl.de 68412027Sjungma@eit.uni-kl.desc_signed 68512027Sjungma@eit.uni-kl.deoperator * ( const sc_unsigned& u, const sc_int_base& v ) 68612027Sjungma@eit.uni-kl.de{ return operator * ( u, SCAST<int64>( v ) ); } 68712027Sjungma@eit.uni-kl.de 68812027Sjungma@eit.uni-kl.desc_signed 68912027Sjungma@eit.uni-kl.deoperator * ( const sc_int_base& u, const sc_unsigned& v ) 69012027Sjungma@eit.uni-kl.de{ return operator * ( SCAST<int64>( u ), v ); } 69112027Sjungma@eit.uni-kl.de 69212027Sjungma@eit.uni-kl.desc_signed 69312027Sjungma@eit.uni-kl.deoperator * (const sc_signed& u, const sc_int_base& v) 69412027Sjungma@eit.uni-kl.de{ return operator*(u, (int64) v); } 69512027Sjungma@eit.uni-kl.de 69612027Sjungma@eit.uni-kl.desc_signed 69712027Sjungma@eit.uni-kl.deoperator * (const sc_int_base& u, const sc_signed& v) 69812027Sjungma@eit.uni-kl.de{ return operator*((int64) u, v); } 69912027Sjungma@eit.uni-kl.de 70012027Sjungma@eit.uni-kl.deconst sc_signed& 70112027Sjungma@eit.uni-kl.desc_signed::operator *= (const sc_int_base& v) 70212027Sjungma@eit.uni-kl.de{ return operator*=((int64) v); } 70312027Sjungma@eit.uni-kl.de 70412027Sjungma@eit.uni-kl.de 70512027Sjungma@eit.uni-kl.desc_signed 70612027Sjungma@eit.uni-kl.deoperator / ( const sc_unsigned& u, const sc_int_base& v ) 70712027Sjungma@eit.uni-kl.de{ return operator / ( u, SCAST<int64>( v ) ); } 70812027Sjungma@eit.uni-kl.de 70912027Sjungma@eit.uni-kl.desc_signed 71012027Sjungma@eit.uni-kl.deoperator / ( const sc_int_base& u, const sc_unsigned& v ) 71112027Sjungma@eit.uni-kl.de{ return operator / ( SCAST<int64>( u ), v ); } 71212027Sjungma@eit.uni-kl.de 71312027Sjungma@eit.uni-kl.desc_signed 71412027Sjungma@eit.uni-kl.deoperator / (const sc_signed& u, const sc_int_base& v) 71512027Sjungma@eit.uni-kl.de{ return operator/(u, (int64) v); } 71612027Sjungma@eit.uni-kl.de 71712027Sjungma@eit.uni-kl.desc_signed 71812027Sjungma@eit.uni-kl.deoperator / (const sc_int_base& u, const sc_signed& v) 71912027Sjungma@eit.uni-kl.de{ return operator/((int64) u, v); } 72012027Sjungma@eit.uni-kl.de 72112027Sjungma@eit.uni-kl.deconst sc_signed& 72212027Sjungma@eit.uni-kl.desc_signed::operator /= (const sc_int_base& v) 72312027Sjungma@eit.uni-kl.de{ return operator/=((int64) v); } 72412027Sjungma@eit.uni-kl.de 72512027Sjungma@eit.uni-kl.de 72612027Sjungma@eit.uni-kl.desc_signed 72712027Sjungma@eit.uni-kl.deoperator % ( const sc_unsigned& u, const sc_int_base& v ) 72812027Sjungma@eit.uni-kl.de{ return operator % ( u, SCAST<int64>( v ) ); } 72912027Sjungma@eit.uni-kl.de 73012027Sjungma@eit.uni-kl.desc_signed 73112027Sjungma@eit.uni-kl.deoperator % ( const sc_int_base& u, const sc_unsigned& v ) 73212027Sjungma@eit.uni-kl.de{ return operator % ( SCAST<int64>( u ), v ); } 73312027Sjungma@eit.uni-kl.de 73412027Sjungma@eit.uni-kl.desc_signed 73512027Sjungma@eit.uni-kl.deoperator % (const sc_signed& u, const sc_int_base& v) 73612027Sjungma@eit.uni-kl.de{ return operator%(u, (int64) v); } 73712027Sjungma@eit.uni-kl.de 73812027Sjungma@eit.uni-kl.desc_signed 73912027Sjungma@eit.uni-kl.deoperator % (const sc_int_base& u, const sc_signed& v) 74012027Sjungma@eit.uni-kl.de{ return operator%((int64) u, v); } 74112027Sjungma@eit.uni-kl.de 74212027Sjungma@eit.uni-kl.deconst sc_signed& 74312027Sjungma@eit.uni-kl.desc_signed::operator %= (const sc_int_base& v) 74412027Sjungma@eit.uni-kl.de{ return operator%=((int64) v); } 74512027Sjungma@eit.uni-kl.de 74612027Sjungma@eit.uni-kl.de 74712027Sjungma@eit.uni-kl.desc_signed 74812027Sjungma@eit.uni-kl.deoperator & ( const sc_unsigned& u, const sc_int_base& v ) 74912027Sjungma@eit.uni-kl.de{ return operator & ( u, SCAST<int64>( v ) ); } 75012027Sjungma@eit.uni-kl.de 75112027Sjungma@eit.uni-kl.desc_signed 75212027Sjungma@eit.uni-kl.deoperator & ( const sc_int_base& u, const sc_unsigned& v ) 75312027Sjungma@eit.uni-kl.de{ return operator & ( SCAST<int64>( u ), v ); } 75412027Sjungma@eit.uni-kl.de 75512027Sjungma@eit.uni-kl.desc_signed 75612027Sjungma@eit.uni-kl.deoperator & (const sc_signed& u, const sc_int_base& v) 75712027Sjungma@eit.uni-kl.de{ return operator&(u, (int64) v); } 75812027Sjungma@eit.uni-kl.de 75912027Sjungma@eit.uni-kl.desc_signed 76012027Sjungma@eit.uni-kl.deoperator & (const sc_int_base& u, const sc_signed& v) 76112027Sjungma@eit.uni-kl.de{ return operator&((int64) u, v); } 76212027Sjungma@eit.uni-kl.de 76312027Sjungma@eit.uni-kl.deconst sc_signed& 76412027Sjungma@eit.uni-kl.desc_signed::operator &= (const sc_int_base& v) 76512027Sjungma@eit.uni-kl.de{ return operator&=((int64) v); } 76612027Sjungma@eit.uni-kl.de 76712027Sjungma@eit.uni-kl.de 76812027Sjungma@eit.uni-kl.desc_signed 76912027Sjungma@eit.uni-kl.deoperator | ( const sc_unsigned& u, const sc_int_base& v ) 77012027Sjungma@eit.uni-kl.de{ return operator | ( u, SCAST<int64>( v ) ); } 77112027Sjungma@eit.uni-kl.de 77212027Sjungma@eit.uni-kl.desc_signed 77312027Sjungma@eit.uni-kl.deoperator | ( const sc_int_base& u, const sc_unsigned& v ) 77412027Sjungma@eit.uni-kl.de{ return operator | ( SCAST<int64>( u ), v ); } 77512027Sjungma@eit.uni-kl.de 77612027Sjungma@eit.uni-kl.desc_signed 77712027Sjungma@eit.uni-kl.deoperator | (const sc_signed& u, const sc_int_base& v) 77812027Sjungma@eit.uni-kl.de{ return operator|(u, (int64) v); } 77912027Sjungma@eit.uni-kl.de 78012027Sjungma@eit.uni-kl.desc_signed 78112027Sjungma@eit.uni-kl.deoperator | (const sc_int_base& u, const sc_signed& v) 78212027Sjungma@eit.uni-kl.de{ return operator|((int64) u, v); } 78312027Sjungma@eit.uni-kl.de 78412027Sjungma@eit.uni-kl.deconst sc_signed& 78512027Sjungma@eit.uni-kl.desc_signed::operator |= (const sc_int_base& v) 78612027Sjungma@eit.uni-kl.de{ return operator|=((int64) v); } 78712027Sjungma@eit.uni-kl.de 78812027Sjungma@eit.uni-kl.de 78912027Sjungma@eit.uni-kl.desc_signed 79012027Sjungma@eit.uni-kl.deoperator ^ ( const sc_unsigned& u, const sc_int_base& v ) 79112027Sjungma@eit.uni-kl.de{ return operator ^ ( u, SCAST<int64>( v ) ); } 79212027Sjungma@eit.uni-kl.de 79312027Sjungma@eit.uni-kl.desc_signed 79412027Sjungma@eit.uni-kl.deoperator ^ ( const sc_int_base& u, const sc_unsigned& v ) 79512027Sjungma@eit.uni-kl.de{ return operator ^ ( SCAST<int64>( u ), v ); } 79612027Sjungma@eit.uni-kl.de 79712027Sjungma@eit.uni-kl.desc_signed 79812027Sjungma@eit.uni-kl.deoperator ^ (const sc_signed& u, const sc_int_base& v) 79912027Sjungma@eit.uni-kl.de{ return operator^(u, (int64) v); } 80012027Sjungma@eit.uni-kl.de 80112027Sjungma@eit.uni-kl.desc_signed 80212027Sjungma@eit.uni-kl.deoperator ^ (const sc_int_base& u, const sc_signed& v) 80312027Sjungma@eit.uni-kl.de{ return operator^((int64) u, v); } 80412027Sjungma@eit.uni-kl.de 80512027Sjungma@eit.uni-kl.deconst sc_signed& 80612027Sjungma@eit.uni-kl.desc_signed::operator ^= (const sc_int_base& v) 80712027Sjungma@eit.uni-kl.de{ return operator^=((int64) v); } 80812027Sjungma@eit.uni-kl.de 80912027Sjungma@eit.uni-kl.de 81012027Sjungma@eit.uni-kl.desc_signed 81112027Sjungma@eit.uni-kl.deoperator << (const sc_signed& u, const sc_int_base& v) 81212027Sjungma@eit.uni-kl.de{ return operator<<(u, (int64) v); } 81312027Sjungma@eit.uni-kl.de 81412027Sjungma@eit.uni-kl.deconst sc_signed& 81512027Sjungma@eit.uni-kl.desc_signed::operator <<= (const sc_int_base& v) 81612027Sjungma@eit.uni-kl.de{ return operator<<=((int64) v); } 81712027Sjungma@eit.uni-kl.de 81812027Sjungma@eit.uni-kl.de 81912027Sjungma@eit.uni-kl.desc_signed 82012027Sjungma@eit.uni-kl.deoperator >> (const sc_signed& u, const sc_int_base& v) 82112027Sjungma@eit.uni-kl.de{ return operator>>(u, (int64) v); } 82212027Sjungma@eit.uni-kl.de 82312027Sjungma@eit.uni-kl.deconst sc_signed& 82412027Sjungma@eit.uni-kl.desc_signed::operator >>= (const sc_int_base& v) 82512027Sjungma@eit.uni-kl.de{ return operator>>=((int64) v); } 82612027Sjungma@eit.uni-kl.de 82712027Sjungma@eit.uni-kl.de 82812027Sjungma@eit.uni-kl.debool 82912027Sjungma@eit.uni-kl.deoperator == (const sc_signed& u, const sc_int_base& v) 83012027Sjungma@eit.uni-kl.de{ return operator==(u, (int64) v); } 83112027Sjungma@eit.uni-kl.de 83212027Sjungma@eit.uni-kl.debool 83312027Sjungma@eit.uni-kl.deoperator == (const sc_int_base& u, const sc_signed& v) 83412027Sjungma@eit.uni-kl.de{ return operator==((int64) u, v); } 83512027Sjungma@eit.uni-kl.de 83612027Sjungma@eit.uni-kl.de 83712027Sjungma@eit.uni-kl.debool 83812027Sjungma@eit.uni-kl.deoperator != (const sc_signed& u, const sc_int_base& v) 83912027Sjungma@eit.uni-kl.de{ return operator!=(u, (int64) v); } 84012027Sjungma@eit.uni-kl.de 84112027Sjungma@eit.uni-kl.debool 84212027Sjungma@eit.uni-kl.deoperator != (const sc_int_base& u, const sc_signed& v) 84312027Sjungma@eit.uni-kl.de{ return operator!=((int64) u, v); } 84412027Sjungma@eit.uni-kl.de 84512027Sjungma@eit.uni-kl.de 84612027Sjungma@eit.uni-kl.debool 84712027Sjungma@eit.uni-kl.deoperator < (const sc_signed& u, const sc_int_base& v) 84812027Sjungma@eit.uni-kl.de{ return operator<(u, (int64) v); } 84912027Sjungma@eit.uni-kl.de 85012027Sjungma@eit.uni-kl.debool 85112027Sjungma@eit.uni-kl.deoperator < (const sc_int_base& u, const sc_signed& v) 85212027Sjungma@eit.uni-kl.de{ return operator<((int64) u, v); } 85312027Sjungma@eit.uni-kl.de 85412027Sjungma@eit.uni-kl.de 85512027Sjungma@eit.uni-kl.debool 85612027Sjungma@eit.uni-kl.deoperator <= (const sc_signed& u, const sc_int_base& v) 85712027Sjungma@eit.uni-kl.de{ return operator<=(u, (int64) v); } 85812027Sjungma@eit.uni-kl.de 85912027Sjungma@eit.uni-kl.debool 86012027Sjungma@eit.uni-kl.deoperator <= (const sc_int_base& u, const sc_signed& v) 86112027Sjungma@eit.uni-kl.de{ return operator<=((int64) u, v); } 86212027Sjungma@eit.uni-kl.de 86312027Sjungma@eit.uni-kl.de 86412027Sjungma@eit.uni-kl.debool 86512027Sjungma@eit.uni-kl.deoperator > (const sc_signed& u, const sc_int_base& v) 86612027Sjungma@eit.uni-kl.de{ return operator>(u, (int64) v); } 86712027Sjungma@eit.uni-kl.de 86812027Sjungma@eit.uni-kl.debool 86912027Sjungma@eit.uni-kl.deoperator > (const sc_int_base& u, const sc_signed& v) 87012027Sjungma@eit.uni-kl.de{ return operator>((int64) u, v); } 87112027Sjungma@eit.uni-kl.de 87212027Sjungma@eit.uni-kl.de 87312027Sjungma@eit.uni-kl.debool 87412027Sjungma@eit.uni-kl.deoperator >= (const sc_signed& u, const sc_int_base& v) 87512027Sjungma@eit.uni-kl.de{ return operator>=(u, (int64) v); } 87612027Sjungma@eit.uni-kl.de 87712027Sjungma@eit.uni-kl.debool 87812027Sjungma@eit.uni-kl.deoperator >= (const sc_int_base& u, const sc_signed& v) 87912027Sjungma@eit.uni-kl.de{ return operator>=((int64) u, v); } 88012027Sjungma@eit.uni-kl.de 88112027Sjungma@eit.uni-kl.de 88212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 88312027Sjungma@eit.uni-kl.de// SECTION: Interfacing with sc_uint_base 88412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 88512027Sjungma@eit.uni-kl.de 88612027Sjungma@eit.uni-kl.deconst sc_signed& 88712027Sjungma@eit.uni-kl.desc_signed::operator = (const sc_uint_base& v) 88812027Sjungma@eit.uni-kl.de{ return operator=((uint64) v); } 88912027Sjungma@eit.uni-kl.de 89012027Sjungma@eit.uni-kl.de 89112027Sjungma@eit.uni-kl.desc_signed 89212027Sjungma@eit.uni-kl.deoperator + (const sc_signed& u, const sc_uint_base& v) 89312027Sjungma@eit.uni-kl.de{ return operator+(u, (uint64) v); } 89412027Sjungma@eit.uni-kl.de 89512027Sjungma@eit.uni-kl.desc_signed 89612027Sjungma@eit.uni-kl.deoperator + (const sc_uint_base& u, const sc_signed& v) 89712027Sjungma@eit.uni-kl.de{ return operator+((uint64) u, v); } 89812027Sjungma@eit.uni-kl.de 89912027Sjungma@eit.uni-kl.deconst sc_signed& 90012027Sjungma@eit.uni-kl.desc_signed::operator += (const sc_uint_base& v) 90112027Sjungma@eit.uni-kl.de{ return operator+=((uint64) v); } 90212027Sjungma@eit.uni-kl.de 90312027Sjungma@eit.uni-kl.de 90412027Sjungma@eit.uni-kl.desc_signed 90512027Sjungma@eit.uni-kl.deoperator - (const sc_unsigned& u, const sc_uint_base& v) 90612027Sjungma@eit.uni-kl.de{ return operator-(u, (uint64) v); } 90712027Sjungma@eit.uni-kl.de 90812027Sjungma@eit.uni-kl.desc_signed 90912027Sjungma@eit.uni-kl.deoperator - (const sc_uint_base& u, const sc_unsigned& v) 91012027Sjungma@eit.uni-kl.de{ return operator-((uint64) u, v); } 91112027Sjungma@eit.uni-kl.de 91212027Sjungma@eit.uni-kl.desc_signed 91312027Sjungma@eit.uni-kl.deoperator - (const sc_signed& u, const sc_uint_base& v) 91412027Sjungma@eit.uni-kl.de{ return operator-(u, (uint64) v); } 91512027Sjungma@eit.uni-kl.de 91612027Sjungma@eit.uni-kl.desc_signed 91712027Sjungma@eit.uni-kl.deoperator - (const sc_uint_base& u, const sc_signed& v) 91812027Sjungma@eit.uni-kl.de{ return operator-((uint64) u, v); } 91912027Sjungma@eit.uni-kl.de 92012027Sjungma@eit.uni-kl.deconst sc_signed& 92112027Sjungma@eit.uni-kl.desc_signed::operator -= (const sc_uint_base& v) 92212027Sjungma@eit.uni-kl.de{ return operator-=((uint64) v); } 92312027Sjungma@eit.uni-kl.de 92412027Sjungma@eit.uni-kl.de 92512027Sjungma@eit.uni-kl.desc_signed 92612027Sjungma@eit.uni-kl.deoperator * (const sc_signed& u, const sc_uint_base& v) 92712027Sjungma@eit.uni-kl.de{ return operator*(u, (uint64) v); } 92812027Sjungma@eit.uni-kl.de 92912027Sjungma@eit.uni-kl.desc_signed 93012027Sjungma@eit.uni-kl.deoperator * (const sc_uint_base& u, const sc_signed& v) 93112027Sjungma@eit.uni-kl.de{ return operator*((uint64) u, v); } 93212027Sjungma@eit.uni-kl.de 93312027Sjungma@eit.uni-kl.deconst sc_signed& 93412027Sjungma@eit.uni-kl.desc_signed::operator *= (const sc_uint_base& v) 93512027Sjungma@eit.uni-kl.de{ return operator*=((uint64) v); } 93612027Sjungma@eit.uni-kl.de 93712027Sjungma@eit.uni-kl.de 93812027Sjungma@eit.uni-kl.desc_signed 93912027Sjungma@eit.uni-kl.deoperator / (const sc_signed& u, const sc_uint_base& v) 94012027Sjungma@eit.uni-kl.de{ return operator/(u, (uint64) v); } 94112027Sjungma@eit.uni-kl.de 94212027Sjungma@eit.uni-kl.desc_signed 94312027Sjungma@eit.uni-kl.deoperator / (const sc_uint_base& u, const sc_signed& v) 94412027Sjungma@eit.uni-kl.de{ return operator/((uint64) u, v); } 94512027Sjungma@eit.uni-kl.de 94612027Sjungma@eit.uni-kl.deconst sc_signed& 94712027Sjungma@eit.uni-kl.desc_signed::operator /= (const sc_uint_base& v) 94812027Sjungma@eit.uni-kl.de{ return operator/=((uint64) v); } 94912027Sjungma@eit.uni-kl.de 95012027Sjungma@eit.uni-kl.de 95112027Sjungma@eit.uni-kl.desc_signed 95212027Sjungma@eit.uni-kl.deoperator % (const sc_signed& u, const sc_uint_base& v) 95312027Sjungma@eit.uni-kl.de{ return operator%(u, (uint64) v); } 95412027Sjungma@eit.uni-kl.de 95512027Sjungma@eit.uni-kl.desc_signed 95612027Sjungma@eit.uni-kl.deoperator % (const sc_uint_base& u, const sc_signed& v) 95712027Sjungma@eit.uni-kl.de{ return operator%((uint64) u, v); } 95812027Sjungma@eit.uni-kl.de 95912027Sjungma@eit.uni-kl.deconst sc_signed& 96012027Sjungma@eit.uni-kl.desc_signed::operator %= (const sc_uint_base& v) 96112027Sjungma@eit.uni-kl.de{ return operator%=((uint64) v); } 96212027Sjungma@eit.uni-kl.de 96312027Sjungma@eit.uni-kl.de 96412027Sjungma@eit.uni-kl.desc_signed 96512027Sjungma@eit.uni-kl.deoperator & (const sc_signed& u, const sc_uint_base& v) 96612027Sjungma@eit.uni-kl.de{ return operator&(u, (uint64) v); } 96712027Sjungma@eit.uni-kl.de 96812027Sjungma@eit.uni-kl.desc_signed 96912027Sjungma@eit.uni-kl.deoperator & (const sc_uint_base& u, const sc_signed& v) 97012027Sjungma@eit.uni-kl.de{ return operator&((uint64) u, v); } 97112027Sjungma@eit.uni-kl.de 97212027Sjungma@eit.uni-kl.deconst sc_signed& 97312027Sjungma@eit.uni-kl.desc_signed::operator &= (const sc_uint_base& v) 97412027Sjungma@eit.uni-kl.de{ return operator&=((uint64) v); } 97512027Sjungma@eit.uni-kl.de 97612027Sjungma@eit.uni-kl.de 97712027Sjungma@eit.uni-kl.desc_signed 97812027Sjungma@eit.uni-kl.deoperator | (const sc_signed& u, const sc_uint_base& v) 97912027Sjungma@eit.uni-kl.de{ return operator|(u, (uint64) v); } 98012027Sjungma@eit.uni-kl.de 98112027Sjungma@eit.uni-kl.desc_signed 98212027Sjungma@eit.uni-kl.deoperator | (const sc_uint_base& u, const sc_signed& v) 98312027Sjungma@eit.uni-kl.de{ return operator|((uint64) u, v); } 98412027Sjungma@eit.uni-kl.de 98512027Sjungma@eit.uni-kl.deconst sc_signed& 98612027Sjungma@eit.uni-kl.desc_signed::operator |= (const sc_uint_base& v) 98712027Sjungma@eit.uni-kl.de{ return operator|=((uint64) v); } 98812027Sjungma@eit.uni-kl.de 98912027Sjungma@eit.uni-kl.de 99012027Sjungma@eit.uni-kl.desc_signed 99112027Sjungma@eit.uni-kl.deoperator ^ (const sc_signed& u, const sc_uint_base& v) 99212027Sjungma@eit.uni-kl.de{ return operator^(u, (uint64) v); } 99312027Sjungma@eit.uni-kl.de 99412027Sjungma@eit.uni-kl.desc_signed 99512027Sjungma@eit.uni-kl.deoperator ^ (const sc_uint_base& u, const sc_signed& v) 99612027Sjungma@eit.uni-kl.de{ return operator^((uint64) u, v); } 99712027Sjungma@eit.uni-kl.de 99812027Sjungma@eit.uni-kl.deconst sc_signed& 99912027Sjungma@eit.uni-kl.desc_signed::operator ^= (const sc_uint_base& v) 100012027Sjungma@eit.uni-kl.de{ return operator^=((uint64) v); } 100112027Sjungma@eit.uni-kl.de 100212027Sjungma@eit.uni-kl.de 100312027Sjungma@eit.uni-kl.desc_signed 100412027Sjungma@eit.uni-kl.deoperator << (const sc_signed& u, const sc_uint_base& v) 100512027Sjungma@eit.uni-kl.de{ return operator<<(u, (uint64) v); } 100612027Sjungma@eit.uni-kl.de 100712027Sjungma@eit.uni-kl.deconst sc_signed& 100812027Sjungma@eit.uni-kl.desc_signed::operator <<= (const sc_uint_base& v) 100912027Sjungma@eit.uni-kl.de{ return operator<<=((uint64) v); } 101012027Sjungma@eit.uni-kl.de 101112027Sjungma@eit.uni-kl.de 101212027Sjungma@eit.uni-kl.desc_signed 101312027Sjungma@eit.uni-kl.deoperator >> (const sc_signed& u, const sc_uint_base& v) 101412027Sjungma@eit.uni-kl.de{ return operator>>(u, (uint64) v); } 101512027Sjungma@eit.uni-kl.de 101612027Sjungma@eit.uni-kl.deconst sc_signed& 101712027Sjungma@eit.uni-kl.desc_signed::operator >>= (const sc_uint_base& v) 101812027Sjungma@eit.uni-kl.de{ return operator>>=((uint64) v); } 101912027Sjungma@eit.uni-kl.de 102012027Sjungma@eit.uni-kl.de 102112027Sjungma@eit.uni-kl.debool 102212027Sjungma@eit.uni-kl.deoperator == (const sc_signed& u, const sc_uint_base& v) 102312027Sjungma@eit.uni-kl.de{ return operator==(u, (uint64) v); } 102412027Sjungma@eit.uni-kl.de 102512027Sjungma@eit.uni-kl.debool 102612027Sjungma@eit.uni-kl.deoperator == (const sc_uint_base& u, const sc_signed& v) 102712027Sjungma@eit.uni-kl.de{ return operator==((uint64) u, v); } 102812027Sjungma@eit.uni-kl.de 102912027Sjungma@eit.uni-kl.de 103012027Sjungma@eit.uni-kl.debool 103112027Sjungma@eit.uni-kl.deoperator != (const sc_signed& u, const sc_uint_base& v) 103212027Sjungma@eit.uni-kl.de{ return operator!=(u, (uint64) v); } 103312027Sjungma@eit.uni-kl.de 103412027Sjungma@eit.uni-kl.debool 103512027Sjungma@eit.uni-kl.deoperator != (const sc_uint_base& u, const sc_signed& v) 103612027Sjungma@eit.uni-kl.de{ return operator!=((uint64) u, v); } 103712027Sjungma@eit.uni-kl.de 103812027Sjungma@eit.uni-kl.de 103912027Sjungma@eit.uni-kl.debool 104012027Sjungma@eit.uni-kl.deoperator < (const sc_signed& u, const sc_uint_base& v) 104112027Sjungma@eit.uni-kl.de{ return operator<(u, (uint64) v); } 104212027Sjungma@eit.uni-kl.de 104312027Sjungma@eit.uni-kl.debool 104412027Sjungma@eit.uni-kl.deoperator < (const sc_uint_base& u, const sc_signed& v) 104512027Sjungma@eit.uni-kl.de{ return operator<((uint64) u, v); } 104612027Sjungma@eit.uni-kl.de 104712027Sjungma@eit.uni-kl.de 104812027Sjungma@eit.uni-kl.debool 104912027Sjungma@eit.uni-kl.deoperator <= (const sc_signed& u, const sc_uint_base& v) 105012027Sjungma@eit.uni-kl.de{ return operator<=(u, (uint64) v); } 105112027Sjungma@eit.uni-kl.de 105212027Sjungma@eit.uni-kl.debool 105312027Sjungma@eit.uni-kl.deoperator <= (const sc_uint_base& u, const sc_signed& v) 105412027Sjungma@eit.uni-kl.de{ return operator<=((uint64) u, v); } 105512027Sjungma@eit.uni-kl.de 105612027Sjungma@eit.uni-kl.de 105712027Sjungma@eit.uni-kl.debool 105812027Sjungma@eit.uni-kl.deoperator > (const sc_signed& u, const sc_uint_base& v) 105912027Sjungma@eit.uni-kl.de{ return operator>(u, (uint64) v); } 106012027Sjungma@eit.uni-kl.de 106112027Sjungma@eit.uni-kl.debool 106212027Sjungma@eit.uni-kl.deoperator > (const sc_uint_base& u, const sc_signed& v) 106312027Sjungma@eit.uni-kl.de{ return operator>((uint64) u, v); } 106412027Sjungma@eit.uni-kl.de 106512027Sjungma@eit.uni-kl.de 106612027Sjungma@eit.uni-kl.debool 106712027Sjungma@eit.uni-kl.deoperator >= (const sc_signed& u, const sc_uint_base& v) 106812027Sjungma@eit.uni-kl.de{ return operator>=(u, (uint64) v); } 106912027Sjungma@eit.uni-kl.de 107012027Sjungma@eit.uni-kl.debool 107112027Sjungma@eit.uni-kl.deoperator >= (const sc_uint_base& u, const sc_signed& v) 107212027Sjungma@eit.uni-kl.de{ return operator>=((uint64) u, v); } 107312027Sjungma@eit.uni-kl.de 107412027Sjungma@eit.uni-kl.de 107512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 107612027Sjungma@eit.uni-kl.de// SECTION: Input and output operators 107712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 107812027Sjungma@eit.uni-kl.de 107912027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 108012027Sjungma@eit.uni-kl.de 108112027Sjungma@eit.uni-kl.de 108212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 108312027Sjungma@eit.uni-kl.de// SECTION: Operator macros. 108412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 108512027Sjungma@eit.uni-kl.de 108612027Sjungma@eit.uni-kl.de#define CONVERT_LONG(u) \ 108712027Sjungma@eit.uni-kl.desmall_type u ## s = get_sign(u); \ 108812027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_ULONG]; \ 108912027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); 109012027Sjungma@eit.uni-kl.de 109112027Sjungma@eit.uni-kl.de#define CONVERT_LONG_2(u) \ 109212027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_ULONG]; \ 109312027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_ULONG, u ## d, (unsigned long) u); 109412027Sjungma@eit.uni-kl.de 109512027Sjungma@eit.uni-kl.de#define CONVERT_INT(u) \ 109612027Sjungma@eit.uni-kl.desmall_type u ## s = get_sign(u); \ 109712027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_UINT]; \ 109812027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); 109912027Sjungma@eit.uni-kl.de 110012027Sjungma@eit.uni-kl.de#define CONVERT_INT_2(u) \ 110112027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_UINT]; \ 110212027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_UINT, u ## d, (unsigned int) u); 110312027Sjungma@eit.uni-kl.de 110412027Sjungma@eit.uni-kl.de#define CONVERT_INT64(u) \ 110512027Sjungma@eit.uni-kl.desmall_type u ## s = get_sign(u); \ 110612027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_UINT64]; \ 110712027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); 110812027Sjungma@eit.uni-kl.de 110912027Sjungma@eit.uni-kl.de#define CONVERT_INT64_2(u) \ 111012027Sjungma@eit.uni-kl.desc_digit u ## d[DIGITS_PER_UINT64]; \ 111112027Sjungma@eit.uni-kl.defrom_uint(DIGITS_PER_UINT64, u ## d, (uint64) u); 111212027Sjungma@eit.uni-kl.de 111312027Sjungma@eit.uni-kl.de 111412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 111512027Sjungma@eit.uni-kl.de// SECTION: PLUS operators: +, +=, ++ 111612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 111712027Sjungma@eit.uni-kl.de 111812027Sjungma@eit.uni-kl.de// Cases to consider when computing u + v: 111912027Sjungma@eit.uni-kl.de// 1. 0 + v = v 112012027Sjungma@eit.uni-kl.de// 2. u + 0 = u 112112027Sjungma@eit.uni-kl.de// 3. if sgn(u) == sgn(v) 112212027Sjungma@eit.uni-kl.de// 3.1 u + v = +(u + v) = sgn(u) * (u + v) 112312027Sjungma@eit.uni-kl.de// 3.2 (-u) + (-v) = -(u + v) = sgn(u) * (u + v) 112412027Sjungma@eit.uni-kl.de// 4. if sgn(u) != sgn(v) 112512027Sjungma@eit.uni-kl.de// 4.1 u + (-v) = u - v = sgn(u) * (u - v) 112612027Sjungma@eit.uni-kl.de// 4.2 (-u) + v = -(u - v) ==> sgn(u) * (u - v) 112712027Sjungma@eit.uni-kl.de// 112812027Sjungma@eit.uni-kl.de// Specialization of above cases for computing ++u or u++: 112912027Sjungma@eit.uni-kl.de// 1. 0 + 1 = 1 113012027Sjungma@eit.uni-kl.de// 3. u + 1 = u + 1 = sgn(u) * (u + 1) 113112027Sjungma@eit.uni-kl.de// 4. (-u) + 1 = -(u - 1) = sgn(u) * (u - 1) 113212027Sjungma@eit.uni-kl.de 113312027Sjungma@eit.uni-kl.desc_signed 113412027Sjungma@eit.uni-kl.deoperator+(const sc_unsigned& u, const sc_signed& v) 113512027Sjungma@eit.uni-kl.de{ 113612027Sjungma@eit.uni-kl.de 113712027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 113812027Sjungma@eit.uni-kl.de return sc_signed(v); 113912027Sjungma@eit.uni-kl.de 114012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 114112027Sjungma@eit.uni-kl.de return sc_signed(u); 114212027Sjungma@eit.uni-kl.de 114312027Sjungma@eit.uni-kl.de // cases 3 and 4 114412027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 114512027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 114612027Sjungma@eit.uni-kl.de 114712027Sjungma@eit.uni-kl.de} 114812027Sjungma@eit.uni-kl.de 114912027Sjungma@eit.uni-kl.de 115012027Sjungma@eit.uni-kl.desc_signed 115112027Sjungma@eit.uni-kl.deoperator+(const sc_signed& u, const sc_unsigned& v) 115212027Sjungma@eit.uni-kl.de{ 115312027Sjungma@eit.uni-kl.de 115412027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 115512027Sjungma@eit.uni-kl.de return sc_signed(v); 115612027Sjungma@eit.uni-kl.de 115712027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 115812027Sjungma@eit.uni-kl.de return sc_signed(u); 115912027Sjungma@eit.uni-kl.de 116012027Sjungma@eit.uni-kl.de // cases 3 and 4 116112027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 116212027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 116312027Sjungma@eit.uni-kl.de 116412027Sjungma@eit.uni-kl.de} 116512027Sjungma@eit.uni-kl.de 116612027Sjungma@eit.uni-kl.de 116712027Sjungma@eit.uni-kl.desc_signed 116812027Sjungma@eit.uni-kl.deoperator+(const sc_signed& u, const sc_signed& v) 116912027Sjungma@eit.uni-kl.de{ 117012027Sjungma@eit.uni-kl.de 117112027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 117212027Sjungma@eit.uni-kl.de return sc_signed(v); 117312027Sjungma@eit.uni-kl.de 117412027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 117512027Sjungma@eit.uni-kl.de return sc_signed(u); 117612027Sjungma@eit.uni-kl.de 117712027Sjungma@eit.uni-kl.de // cases 3 and 4 117812027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 117912027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 118012027Sjungma@eit.uni-kl.de 118112027Sjungma@eit.uni-kl.de} 118212027Sjungma@eit.uni-kl.de 118312027Sjungma@eit.uni-kl.de 118412027Sjungma@eit.uni-kl.desc_signed 118512027Sjungma@eit.uni-kl.deoperator+(const sc_signed &u, int64 v) 118612027Sjungma@eit.uni-kl.de{ 118712027Sjungma@eit.uni-kl.de 118812027Sjungma@eit.uni-kl.de if (v == 0) // case 2 118912027Sjungma@eit.uni-kl.de return sc_signed(u); 119012027Sjungma@eit.uni-kl.de 119112027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 119212027Sjungma@eit.uni-kl.de 119312027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 119412027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 119512027Sjungma@eit.uni-kl.de 119612027Sjungma@eit.uni-kl.de // cases 3 and 4 119712027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 119812027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 119912027Sjungma@eit.uni-kl.de 120012027Sjungma@eit.uni-kl.de} 120112027Sjungma@eit.uni-kl.de 120212027Sjungma@eit.uni-kl.de 120312027Sjungma@eit.uni-kl.desc_signed 120412027Sjungma@eit.uni-kl.deoperator+(int64 u, const sc_signed &v) 120512027Sjungma@eit.uni-kl.de{ 120612027Sjungma@eit.uni-kl.de 120712027Sjungma@eit.uni-kl.de if (u == 0) // case 1 120812027Sjungma@eit.uni-kl.de return sc_signed(v); 120912027Sjungma@eit.uni-kl.de 121012027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 121112027Sjungma@eit.uni-kl.de 121212027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 121312027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 121412027Sjungma@eit.uni-kl.de 121512027Sjungma@eit.uni-kl.de // cases 3 and 4 121612027Sjungma@eit.uni-kl.de 121712027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 121812027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 121912027Sjungma@eit.uni-kl.de 122012027Sjungma@eit.uni-kl.de} 122112027Sjungma@eit.uni-kl.de 122212027Sjungma@eit.uni-kl.de 122312027Sjungma@eit.uni-kl.desc_signed 122412027Sjungma@eit.uni-kl.deoperator+(const sc_unsigned &u, int64 v) 122512027Sjungma@eit.uni-kl.de{ 122612027Sjungma@eit.uni-kl.de 122712027Sjungma@eit.uni-kl.de if (v == 0) // case 2 122812027Sjungma@eit.uni-kl.de return sc_signed(u); 122912027Sjungma@eit.uni-kl.de 123012027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 123112027Sjungma@eit.uni-kl.de 123212027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 123312027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 123412027Sjungma@eit.uni-kl.de 123512027Sjungma@eit.uni-kl.de // cases 3 and 4 123612027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 123712027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 123812027Sjungma@eit.uni-kl.de 123912027Sjungma@eit.uni-kl.de} 124012027Sjungma@eit.uni-kl.de 124112027Sjungma@eit.uni-kl.de 124212027Sjungma@eit.uni-kl.desc_signed 124312027Sjungma@eit.uni-kl.deoperator+(int64 u, const sc_unsigned &v) 124412027Sjungma@eit.uni-kl.de{ 124512027Sjungma@eit.uni-kl.de 124612027Sjungma@eit.uni-kl.de if (u == 0) // case 1 124712027Sjungma@eit.uni-kl.de return sc_signed(v); 124812027Sjungma@eit.uni-kl.de 124912027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 125012027Sjungma@eit.uni-kl.de 125112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 125212027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 125312027Sjungma@eit.uni-kl.de 125412027Sjungma@eit.uni-kl.de // cases 3 and 4 125512027Sjungma@eit.uni-kl.de 125612027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 125712027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 125812027Sjungma@eit.uni-kl.de 125912027Sjungma@eit.uni-kl.de} 126012027Sjungma@eit.uni-kl.de 126112027Sjungma@eit.uni-kl.de 126212027Sjungma@eit.uni-kl.desc_signed 126312027Sjungma@eit.uni-kl.deoperator+(const sc_signed &u, uint64 v) 126412027Sjungma@eit.uni-kl.de{ 126512027Sjungma@eit.uni-kl.de 126612027Sjungma@eit.uni-kl.de if (v == 0) // case 2 126712027Sjungma@eit.uni-kl.de return sc_signed(u); 126812027Sjungma@eit.uni-kl.de 126912027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 127012027Sjungma@eit.uni-kl.de 127112027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 127212027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 127312027Sjungma@eit.uni-kl.de 127412027Sjungma@eit.uni-kl.de // cases 3 and 4 127512027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 127612027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 127712027Sjungma@eit.uni-kl.de 127812027Sjungma@eit.uni-kl.de} 127912027Sjungma@eit.uni-kl.de 128012027Sjungma@eit.uni-kl.de 128112027Sjungma@eit.uni-kl.desc_signed 128212027Sjungma@eit.uni-kl.deoperator+(uint64 u, const sc_signed &v) 128312027Sjungma@eit.uni-kl.de{ 128412027Sjungma@eit.uni-kl.de 128512027Sjungma@eit.uni-kl.de if (u == 0) // case 1 128612027Sjungma@eit.uni-kl.de return sc_signed(v); 128712027Sjungma@eit.uni-kl.de 128812027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 128912027Sjungma@eit.uni-kl.de 129012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 129112027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 129212027Sjungma@eit.uni-kl.de 129312027Sjungma@eit.uni-kl.de // cases 3 and 4 129412027Sjungma@eit.uni-kl.de 129512027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 129612027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 129712027Sjungma@eit.uni-kl.de 129812027Sjungma@eit.uni-kl.de} 129912027Sjungma@eit.uni-kl.de 130012027Sjungma@eit.uni-kl.de 130112027Sjungma@eit.uni-kl.desc_signed 130212027Sjungma@eit.uni-kl.deoperator+(const sc_signed &u, long v) 130312027Sjungma@eit.uni-kl.de{ 130412027Sjungma@eit.uni-kl.de 130512027Sjungma@eit.uni-kl.de if (v == 0) // case 2 130612027Sjungma@eit.uni-kl.de return sc_signed(u); 130712027Sjungma@eit.uni-kl.de 130812027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 130912027Sjungma@eit.uni-kl.de 131012027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 131112027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 131212027Sjungma@eit.uni-kl.de 131312027Sjungma@eit.uni-kl.de // cases 3 and 4 131412027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 131512027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 131612027Sjungma@eit.uni-kl.de 131712027Sjungma@eit.uni-kl.de} 131812027Sjungma@eit.uni-kl.de 131912027Sjungma@eit.uni-kl.de 132012027Sjungma@eit.uni-kl.desc_signed 132112027Sjungma@eit.uni-kl.deoperator+(long u, const sc_signed &v) 132212027Sjungma@eit.uni-kl.de{ 132312027Sjungma@eit.uni-kl.de 132412027Sjungma@eit.uni-kl.de if (u == 0) // case 1 132512027Sjungma@eit.uni-kl.de return sc_signed(v); 132612027Sjungma@eit.uni-kl.de 132712027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 132812027Sjungma@eit.uni-kl.de 132912027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 133012027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 133112027Sjungma@eit.uni-kl.de 133212027Sjungma@eit.uni-kl.de // cases 3 and 4 133312027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 133412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 133512027Sjungma@eit.uni-kl.de 133612027Sjungma@eit.uni-kl.de} 133712027Sjungma@eit.uni-kl.de 133812027Sjungma@eit.uni-kl.de 133912027Sjungma@eit.uni-kl.desc_signed 134012027Sjungma@eit.uni-kl.deoperator+(const sc_unsigned &u, long v) 134112027Sjungma@eit.uni-kl.de{ 134212027Sjungma@eit.uni-kl.de 134312027Sjungma@eit.uni-kl.de if (v == 0) // case 2 134412027Sjungma@eit.uni-kl.de return sc_signed(u); 134512027Sjungma@eit.uni-kl.de 134612027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 134712027Sjungma@eit.uni-kl.de 134812027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 134912027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 135012027Sjungma@eit.uni-kl.de 135112027Sjungma@eit.uni-kl.de // cases 3 and 4 135212027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 135312027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 135412027Sjungma@eit.uni-kl.de 135512027Sjungma@eit.uni-kl.de} 135612027Sjungma@eit.uni-kl.de 135712027Sjungma@eit.uni-kl.de 135812027Sjungma@eit.uni-kl.desc_signed 135912027Sjungma@eit.uni-kl.deoperator+(long u, const sc_unsigned &v) 136012027Sjungma@eit.uni-kl.de{ 136112027Sjungma@eit.uni-kl.de 136212027Sjungma@eit.uni-kl.de if (u == 0) // case 1 136312027Sjungma@eit.uni-kl.de return sc_signed(v); 136412027Sjungma@eit.uni-kl.de 136512027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 136612027Sjungma@eit.uni-kl.de 136712027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 136812027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 136912027Sjungma@eit.uni-kl.de 137012027Sjungma@eit.uni-kl.de // cases 3 and 4 137112027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 137212027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 137312027Sjungma@eit.uni-kl.de 137412027Sjungma@eit.uni-kl.de} 137512027Sjungma@eit.uni-kl.de 137612027Sjungma@eit.uni-kl.de 137712027Sjungma@eit.uni-kl.desc_signed 137812027Sjungma@eit.uni-kl.deoperator+(const sc_signed &u, unsigned long v) 137912027Sjungma@eit.uni-kl.de{ 138012027Sjungma@eit.uni-kl.de 138112027Sjungma@eit.uni-kl.de if (v == 0) // case 2 138212027Sjungma@eit.uni-kl.de return sc_signed(u); 138312027Sjungma@eit.uni-kl.de 138412027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 138512027Sjungma@eit.uni-kl.de 138612027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 1 138712027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 138812027Sjungma@eit.uni-kl.de 138912027Sjungma@eit.uni-kl.de // cases 3 and 4 139012027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 139112027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 139212027Sjungma@eit.uni-kl.de 139312027Sjungma@eit.uni-kl.de} 139412027Sjungma@eit.uni-kl.de 139512027Sjungma@eit.uni-kl.de 139612027Sjungma@eit.uni-kl.desc_signed 139712027Sjungma@eit.uni-kl.deoperator+(unsigned long u, const sc_signed &v) 139812027Sjungma@eit.uni-kl.de{ 139912027Sjungma@eit.uni-kl.de 140012027Sjungma@eit.uni-kl.de if (u == 0) // case 1 140112027Sjungma@eit.uni-kl.de return sc_signed(v); 140212027Sjungma@eit.uni-kl.de 140312027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 140412027Sjungma@eit.uni-kl.de 140512027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 140612027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 140712027Sjungma@eit.uni-kl.de 140812027Sjungma@eit.uni-kl.de // cases 3 and 4 140912027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 141012027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 141112027Sjungma@eit.uni-kl.de 141212027Sjungma@eit.uni-kl.de} 141312027Sjungma@eit.uni-kl.de 141412027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 141512027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 141612027Sjungma@eit.uni-kl.de 141712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 141812027Sjungma@eit.uni-kl.de// SECTION: MINUS operators: -, -=, -- 141912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 142012027Sjungma@eit.uni-kl.de 142112027Sjungma@eit.uni-kl.de// Cases to consider when computing u + v: 142212027Sjungma@eit.uni-kl.de// 1. u - 0 = u 142312027Sjungma@eit.uni-kl.de// 2. 0 - v = -v 142412027Sjungma@eit.uni-kl.de// 3. if sgn(u) != sgn(v) 142512027Sjungma@eit.uni-kl.de// 3.1 u - (-v) = u + v = sgn(u) * (u + v) 142612027Sjungma@eit.uni-kl.de// 3.2 (-u) - v = -(u + v) ==> sgn(u) * (u + v) 142712027Sjungma@eit.uni-kl.de// 4. if sgn(u) == sgn(v) 142812027Sjungma@eit.uni-kl.de// 4.1 u - v = +(u - v) = sgn(u) * (u - v) 142912027Sjungma@eit.uni-kl.de// 4.2 (-u) - (-v) = -(u - v) = sgn(u) * (u - v) 143012027Sjungma@eit.uni-kl.de// 143112027Sjungma@eit.uni-kl.de// Specialization of above cases for computing --u or u--: 143212027Sjungma@eit.uni-kl.de// 1. 0 - 1 = -1 143312027Sjungma@eit.uni-kl.de// 3. (-u) - 1 = -(u + 1) = sgn(u) * (u + 1) 143412027Sjungma@eit.uni-kl.de// 4. u - 1 = u - 1 = sgn(u) * (u - 1) 143512027Sjungma@eit.uni-kl.de 143612027Sjungma@eit.uni-kl.desc_signed 143712027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned& u, const sc_unsigned& v) 143812027Sjungma@eit.uni-kl.de{ 143912027Sjungma@eit.uni-kl.de 144012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 144112027Sjungma@eit.uni-kl.de return sc_signed(u); 144212027Sjungma@eit.uni-kl.de 144312027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 144412027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 144512027Sjungma@eit.uni-kl.de 144612027Sjungma@eit.uni-kl.de // cases 3 and 4 144712027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 144812027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 144912027Sjungma@eit.uni-kl.de 145012027Sjungma@eit.uni-kl.de} 145112027Sjungma@eit.uni-kl.de 145212027Sjungma@eit.uni-kl.de 145312027Sjungma@eit.uni-kl.desc_signed 145412027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned& u, const sc_signed& v) 145512027Sjungma@eit.uni-kl.de{ 145612027Sjungma@eit.uni-kl.de 145712027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 145812027Sjungma@eit.uni-kl.de return sc_signed(u); 145912027Sjungma@eit.uni-kl.de 146012027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 146112027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 146212027Sjungma@eit.uni-kl.de 146312027Sjungma@eit.uni-kl.de // cases 3 and 4 146412027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 146512027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 146612027Sjungma@eit.uni-kl.de 146712027Sjungma@eit.uni-kl.de} 146812027Sjungma@eit.uni-kl.de 146912027Sjungma@eit.uni-kl.de 147012027Sjungma@eit.uni-kl.desc_signed 147112027Sjungma@eit.uni-kl.deoperator-(const sc_signed& u, const sc_unsigned& v) 147212027Sjungma@eit.uni-kl.de{ 147312027Sjungma@eit.uni-kl.de 147412027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 147512027Sjungma@eit.uni-kl.de return sc_signed(u); 147612027Sjungma@eit.uni-kl.de 147712027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 147812027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 147912027Sjungma@eit.uni-kl.de 148012027Sjungma@eit.uni-kl.de // cases 3 and 4 148112027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 148212027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 148312027Sjungma@eit.uni-kl.de 148412027Sjungma@eit.uni-kl.de} 148512027Sjungma@eit.uni-kl.de 148612027Sjungma@eit.uni-kl.de 148712027Sjungma@eit.uni-kl.desc_signed 148812027Sjungma@eit.uni-kl.deoperator-(const sc_signed& u, const sc_signed& v) 148912027Sjungma@eit.uni-kl.de{ 149012027Sjungma@eit.uni-kl.de 149112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 149212027Sjungma@eit.uni-kl.de return sc_signed(u); 149312027Sjungma@eit.uni-kl.de 149412027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 149512027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 149612027Sjungma@eit.uni-kl.de 149712027Sjungma@eit.uni-kl.de // cases 3 and 4 149812027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 149912027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 150012027Sjungma@eit.uni-kl.de 150112027Sjungma@eit.uni-kl.de} 150212027Sjungma@eit.uni-kl.de 150312027Sjungma@eit.uni-kl.de 150412027Sjungma@eit.uni-kl.desc_signed 150512027Sjungma@eit.uni-kl.deoperator-(const sc_signed &u, int64 v) 150612027Sjungma@eit.uni-kl.de{ 150712027Sjungma@eit.uni-kl.de 150812027Sjungma@eit.uni-kl.de if (v == 0) // case 1 150912027Sjungma@eit.uni-kl.de return sc_signed(u); 151012027Sjungma@eit.uni-kl.de 151112027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 151212027Sjungma@eit.uni-kl.de 151312027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 151412027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 151512027Sjungma@eit.uni-kl.de 151612027Sjungma@eit.uni-kl.de // cases 3 and 4 151712027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 151812027Sjungma@eit.uni-kl.de -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 151912027Sjungma@eit.uni-kl.de 152012027Sjungma@eit.uni-kl.de} 152112027Sjungma@eit.uni-kl.de 152212027Sjungma@eit.uni-kl.de 152312027Sjungma@eit.uni-kl.desc_signed 152412027Sjungma@eit.uni-kl.deoperator-(int64 u, const sc_signed& v) 152512027Sjungma@eit.uni-kl.de{ 152612027Sjungma@eit.uni-kl.de 152712027Sjungma@eit.uni-kl.de if (u == 0) // case 1 152812027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 152912027Sjungma@eit.uni-kl.de 153012027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 153112027Sjungma@eit.uni-kl.de 153212027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 153312027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 153412027Sjungma@eit.uni-kl.de 153512027Sjungma@eit.uni-kl.de // cases 3 and 4 153612027Sjungma@eit.uni-kl.de 153712027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 153812027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 153912027Sjungma@eit.uni-kl.de 154012027Sjungma@eit.uni-kl.de} 154112027Sjungma@eit.uni-kl.de 154212027Sjungma@eit.uni-kl.de 154312027Sjungma@eit.uni-kl.desc_signed 154412027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned &u, int64 v) 154512027Sjungma@eit.uni-kl.de{ 154612027Sjungma@eit.uni-kl.de 154712027Sjungma@eit.uni-kl.de if (v == 0) // case 1 154812027Sjungma@eit.uni-kl.de return sc_signed(u); 154912027Sjungma@eit.uni-kl.de 155012027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 155112027Sjungma@eit.uni-kl.de 155212027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 155312027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 155412027Sjungma@eit.uni-kl.de 155512027Sjungma@eit.uni-kl.de // cases 3 and 4 155612027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 155712027Sjungma@eit.uni-kl.de -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 155812027Sjungma@eit.uni-kl.de 155912027Sjungma@eit.uni-kl.de} 156012027Sjungma@eit.uni-kl.de 156112027Sjungma@eit.uni-kl.de 156212027Sjungma@eit.uni-kl.desc_signed 156312027Sjungma@eit.uni-kl.deoperator-(int64 u, const sc_unsigned& v) 156412027Sjungma@eit.uni-kl.de{ 156512027Sjungma@eit.uni-kl.de 156612027Sjungma@eit.uni-kl.de if (u == 0) // case 1 156712027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 156812027Sjungma@eit.uni-kl.de 156912027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 157012027Sjungma@eit.uni-kl.de 157112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 157212027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 157312027Sjungma@eit.uni-kl.de 157412027Sjungma@eit.uni-kl.de // cases 3 and 4 157512027Sjungma@eit.uni-kl.de 157612027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 157712027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 157812027Sjungma@eit.uni-kl.de 157912027Sjungma@eit.uni-kl.de} 158012027Sjungma@eit.uni-kl.de 158112027Sjungma@eit.uni-kl.de 158212027Sjungma@eit.uni-kl.desc_signed 158312027Sjungma@eit.uni-kl.deoperator-(const sc_signed &u, uint64 v) 158412027Sjungma@eit.uni-kl.de{ 158512027Sjungma@eit.uni-kl.de 158612027Sjungma@eit.uni-kl.de if (v == 0) // case 1 158712027Sjungma@eit.uni-kl.de return sc_signed(u); 158812027Sjungma@eit.uni-kl.de 158912027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 159012027Sjungma@eit.uni-kl.de 159112027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 159212027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 159312027Sjungma@eit.uni-kl.de 159412027Sjungma@eit.uni-kl.de // cases 3 and 4 159512027Sjungma@eit.uni-kl.de 159612027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 159712027Sjungma@eit.uni-kl.de -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 159812027Sjungma@eit.uni-kl.de 159912027Sjungma@eit.uni-kl.de} 160012027Sjungma@eit.uni-kl.de 160112027Sjungma@eit.uni-kl.de 160212027Sjungma@eit.uni-kl.desc_signed 160312027Sjungma@eit.uni-kl.deoperator-(uint64 u, const sc_signed& v) 160412027Sjungma@eit.uni-kl.de{ 160512027Sjungma@eit.uni-kl.de 160612027Sjungma@eit.uni-kl.de if (u == 0) // case 1 160712027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 160812027Sjungma@eit.uni-kl.de 160912027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 161012027Sjungma@eit.uni-kl.de 161112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 161212027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 161312027Sjungma@eit.uni-kl.de 161412027Sjungma@eit.uni-kl.de // cases 3 and 4 161512027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 161612027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 161712027Sjungma@eit.uni-kl.de 161812027Sjungma@eit.uni-kl.de} 161912027Sjungma@eit.uni-kl.de 162012027Sjungma@eit.uni-kl.de 162112027Sjungma@eit.uni-kl.desc_signed 162212027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned &u, uint64 v) 162312027Sjungma@eit.uni-kl.de{ 162412027Sjungma@eit.uni-kl.de 162512027Sjungma@eit.uni-kl.de if (v == 0) // case 1 162612027Sjungma@eit.uni-kl.de return sc_signed(u); 162712027Sjungma@eit.uni-kl.de 162812027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 162912027Sjungma@eit.uni-kl.de 163012027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 163112027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 163212027Sjungma@eit.uni-kl.de 163312027Sjungma@eit.uni-kl.de // cases 3 and 4 163412027Sjungma@eit.uni-kl.de 163512027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 163612027Sjungma@eit.uni-kl.de -vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 163712027Sjungma@eit.uni-kl.de 163812027Sjungma@eit.uni-kl.de} 163912027Sjungma@eit.uni-kl.de 164012027Sjungma@eit.uni-kl.de 164112027Sjungma@eit.uni-kl.desc_signed 164212027Sjungma@eit.uni-kl.deoperator-(uint64 u, const sc_unsigned& v) 164312027Sjungma@eit.uni-kl.de{ 164412027Sjungma@eit.uni-kl.de 164512027Sjungma@eit.uni-kl.de if (u == 0) // case 1 164612027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 164712027Sjungma@eit.uni-kl.de 164812027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 164912027Sjungma@eit.uni-kl.de 165012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 165112027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 165212027Sjungma@eit.uni-kl.de 165312027Sjungma@eit.uni-kl.de // cases 3 and 4 165412027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 165512027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 165612027Sjungma@eit.uni-kl.de 165712027Sjungma@eit.uni-kl.de} 165812027Sjungma@eit.uni-kl.de 165912027Sjungma@eit.uni-kl.de 166012027Sjungma@eit.uni-kl.desc_signed 166112027Sjungma@eit.uni-kl.deoperator-(const sc_signed &u, long v) 166212027Sjungma@eit.uni-kl.de{ 166312027Sjungma@eit.uni-kl.de 166412027Sjungma@eit.uni-kl.de if (v == 0) // case 1 166512027Sjungma@eit.uni-kl.de return sc_signed(u); 166612027Sjungma@eit.uni-kl.de 166712027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 166812027Sjungma@eit.uni-kl.de 166912027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 167012027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 167112027Sjungma@eit.uni-kl.de 167212027Sjungma@eit.uni-kl.de // cases 3 and 4 167312027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 167412027Sjungma@eit.uni-kl.de -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 167512027Sjungma@eit.uni-kl.de 167612027Sjungma@eit.uni-kl.de} 167712027Sjungma@eit.uni-kl.de 167812027Sjungma@eit.uni-kl.de 167912027Sjungma@eit.uni-kl.desc_signed 168012027Sjungma@eit.uni-kl.deoperator-(long u, const sc_signed& v) 168112027Sjungma@eit.uni-kl.de{ 168212027Sjungma@eit.uni-kl.de 168312027Sjungma@eit.uni-kl.de if (u == 0) // case 1 168412027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 168512027Sjungma@eit.uni-kl.de 168612027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 168712027Sjungma@eit.uni-kl.de 168812027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 168912027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 169012027Sjungma@eit.uni-kl.de 169112027Sjungma@eit.uni-kl.de // cases 3 and 4 169212027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 169312027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 169412027Sjungma@eit.uni-kl.de 169512027Sjungma@eit.uni-kl.de} 169612027Sjungma@eit.uni-kl.de 169712027Sjungma@eit.uni-kl.de 169812027Sjungma@eit.uni-kl.desc_signed 169912027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned &u, long v) 170012027Sjungma@eit.uni-kl.de{ 170112027Sjungma@eit.uni-kl.de 170212027Sjungma@eit.uni-kl.de if (v == 0) // case 1 170312027Sjungma@eit.uni-kl.de return sc_signed(u); 170412027Sjungma@eit.uni-kl.de 170512027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 170612027Sjungma@eit.uni-kl.de 170712027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 170812027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 170912027Sjungma@eit.uni-kl.de 171012027Sjungma@eit.uni-kl.de // cases 3 and 4 171112027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 171212027Sjungma@eit.uni-kl.de -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 171312027Sjungma@eit.uni-kl.de 171412027Sjungma@eit.uni-kl.de} 171512027Sjungma@eit.uni-kl.de 171612027Sjungma@eit.uni-kl.de 171712027Sjungma@eit.uni-kl.desc_signed 171812027Sjungma@eit.uni-kl.deoperator-(long u, const sc_unsigned& v) 171912027Sjungma@eit.uni-kl.de{ 172012027Sjungma@eit.uni-kl.de 172112027Sjungma@eit.uni-kl.de if (u == 0) // case 1 172212027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 172312027Sjungma@eit.uni-kl.de 172412027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 172512027Sjungma@eit.uni-kl.de 172612027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 172712027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 172812027Sjungma@eit.uni-kl.de 172912027Sjungma@eit.uni-kl.de // cases 3 and 4 173012027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 173112027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 173212027Sjungma@eit.uni-kl.de 173312027Sjungma@eit.uni-kl.de} 173412027Sjungma@eit.uni-kl.de 173512027Sjungma@eit.uni-kl.de 173612027Sjungma@eit.uni-kl.desc_signed 173712027Sjungma@eit.uni-kl.deoperator-(const sc_signed &u, unsigned long v) 173812027Sjungma@eit.uni-kl.de{ 173912027Sjungma@eit.uni-kl.de 174012027Sjungma@eit.uni-kl.de if (v == 0) // case 1 174112027Sjungma@eit.uni-kl.de return sc_signed(u); 174212027Sjungma@eit.uni-kl.de 174312027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 174412027Sjungma@eit.uni-kl.de 174512027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 174612027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 174712027Sjungma@eit.uni-kl.de 174812027Sjungma@eit.uni-kl.de // cases 3 and 4 174912027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 175012027Sjungma@eit.uni-kl.de -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 175112027Sjungma@eit.uni-kl.de 175212027Sjungma@eit.uni-kl.de} 175312027Sjungma@eit.uni-kl.de 175412027Sjungma@eit.uni-kl.de 175512027Sjungma@eit.uni-kl.desc_signed 175612027Sjungma@eit.uni-kl.deoperator-(unsigned long u, const sc_signed& v) 175712027Sjungma@eit.uni-kl.de{ 175812027Sjungma@eit.uni-kl.de if (u == 0) // case 1 175912027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 176012027Sjungma@eit.uni-kl.de 176112027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 176212027Sjungma@eit.uni-kl.de 176312027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 176412027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 176512027Sjungma@eit.uni-kl.de 176612027Sjungma@eit.uni-kl.de // cases 3 and 4 176712027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 176812027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 176912027Sjungma@eit.uni-kl.de 177012027Sjungma@eit.uni-kl.de} 177112027Sjungma@eit.uni-kl.de 177212027Sjungma@eit.uni-kl.de 177312027Sjungma@eit.uni-kl.desc_signed 177412027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned &u, unsigned long v) 177512027Sjungma@eit.uni-kl.de{ 177612027Sjungma@eit.uni-kl.de 177712027Sjungma@eit.uni-kl.de if (v == 0) // case 1 177812027Sjungma@eit.uni-kl.de return sc_signed(u); 177912027Sjungma@eit.uni-kl.de 178012027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 178112027Sjungma@eit.uni-kl.de 178212027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 178312027Sjungma@eit.uni-kl.de return sc_signed(-vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 178412027Sjungma@eit.uni-kl.de 178512027Sjungma@eit.uni-kl.de // cases 3 and 4 178612027Sjungma@eit.uni-kl.de return add_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 178712027Sjungma@eit.uni-kl.de -vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 178812027Sjungma@eit.uni-kl.de 178912027Sjungma@eit.uni-kl.de} 179012027Sjungma@eit.uni-kl.de 179112027Sjungma@eit.uni-kl.de 179212027Sjungma@eit.uni-kl.desc_signed 179312027Sjungma@eit.uni-kl.deoperator-(unsigned long u, const sc_unsigned& v) 179412027Sjungma@eit.uni-kl.de{ 179512027Sjungma@eit.uni-kl.de if (u == 0) // case 1 179612027Sjungma@eit.uni-kl.de return sc_signed(v, -v.sgn); 179712027Sjungma@eit.uni-kl.de 179812027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 179912027Sjungma@eit.uni-kl.de 180012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 2 180112027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 180212027Sjungma@eit.uni-kl.de 180312027Sjungma@eit.uni-kl.de // cases 3 and 4 180412027Sjungma@eit.uni-kl.de return add_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 180512027Sjungma@eit.uni-kl.de -v.sgn, v.nbits, v.ndigits, v.digit); 180612027Sjungma@eit.uni-kl.de 180712027Sjungma@eit.uni-kl.de} 180812027Sjungma@eit.uni-kl.de 180912027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 181012027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 181112027Sjungma@eit.uni-kl.de 181212027Sjungma@eit.uni-kl.de 181312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 181412027Sjungma@eit.uni-kl.de// SECTION: MULTIPLICATION operators: *, *= 181512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 181612027Sjungma@eit.uni-kl.de 181712027Sjungma@eit.uni-kl.de// Cases to consider when computing u * v: 181812027Sjungma@eit.uni-kl.de// 1. u * 0 = 0 * v = 0 181912027Sjungma@eit.uni-kl.de// 2. 1 * v = v and -1 * v = -v 182012027Sjungma@eit.uni-kl.de// 3. u * 1 = u and u * -1 = -u 182112027Sjungma@eit.uni-kl.de// 4. u * v = u * v 182212027Sjungma@eit.uni-kl.de 182312027Sjungma@eit.uni-kl.desc_signed 182412027Sjungma@eit.uni-kl.deoperator*(const sc_unsigned& u, const sc_signed& v) 182512027Sjungma@eit.uni-kl.de{ 182612027Sjungma@eit.uni-kl.de 182712027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 182812027Sjungma@eit.uni-kl.de 182912027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 183012027Sjungma@eit.uni-kl.de return sc_signed(); 183112027Sjungma@eit.uni-kl.de 183212027Sjungma@eit.uni-kl.de // cases 2-4 183312027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 183412027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 183512027Sjungma@eit.uni-kl.de 183612027Sjungma@eit.uni-kl.de} 183712027Sjungma@eit.uni-kl.de 183812027Sjungma@eit.uni-kl.de 183912027Sjungma@eit.uni-kl.desc_signed 184012027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, const sc_unsigned& v) 184112027Sjungma@eit.uni-kl.de{ 184212027Sjungma@eit.uni-kl.de 184312027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 184412027Sjungma@eit.uni-kl.de 184512027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 184612027Sjungma@eit.uni-kl.de return sc_signed(); 184712027Sjungma@eit.uni-kl.de 184812027Sjungma@eit.uni-kl.de // cases 2-4 184912027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 185012027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 185112027Sjungma@eit.uni-kl.de 185212027Sjungma@eit.uni-kl.de} 185312027Sjungma@eit.uni-kl.de 185412027Sjungma@eit.uni-kl.de 185512027Sjungma@eit.uni-kl.desc_signed 185612027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, const sc_signed& v) 185712027Sjungma@eit.uni-kl.de{ 185812027Sjungma@eit.uni-kl.de 185912027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 186012027Sjungma@eit.uni-kl.de 186112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 186212027Sjungma@eit.uni-kl.de return sc_signed(); 186312027Sjungma@eit.uni-kl.de 186412027Sjungma@eit.uni-kl.de // cases 2-4 186512027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 186612027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 186712027Sjungma@eit.uni-kl.de 186812027Sjungma@eit.uni-kl.de} 186912027Sjungma@eit.uni-kl.de 187012027Sjungma@eit.uni-kl.de 187112027Sjungma@eit.uni-kl.desc_signed 187212027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, int64 v) 187312027Sjungma@eit.uni-kl.de{ 187412027Sjungma@eit.uni-kl.de 187512027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 187612027Sjungma@eit.uni-kl.de 187712027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 187812027Sjungma@eit.uni-kl.de return sc_signed(); 187912027Sjungma@eit.uni-kl.de 188012027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 188112027Sjungma@eit.uni-kl.de 188212027Sjungma@eit.uni-kl.de // cases 2-4 188312027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 188412027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 188512027Sjungma@eit.uni-kl.de 188612027Sjungma@eit.uni-kl.de} 188712027Sjungma@eit.uni-kl.de 188812027Sjungma@eit.uni-kl.de 188912027Sjungma@eit.uni-kl.desc_signed 189012027Sjungma@eit.uni-kl.deoperator*(int64 u, const sc_signed& v) 189112027Sjungma@eit.uni-kl.de{ 189212027Sjungma@eit.uni-kl.de 189312027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 189412027Sjungma@eit.uni-kl.de 189512027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 189612027Sjungma@eit.uni-kl.de return sc_signed(); 189712027Sjungma@eit.uni-kl.de 189812027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 189912027Sjungma@eit.uni-kl.de 190012027Sjungma@eit.uni-kl.de // cases 2-4 190112027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 190212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 190312027Sjungma@eit.uni-kl.de 190412027Sjungma@eit.uni-kl.de} 190512027Sjungma@eit.uni-kl.de 190612027Sjungma@eit.uni-kl.de 190712027Sjungma@eit.uni-kl.desc_signed 190812027Sjungma@eit.uni-kl.deoperator*(const sc_unsigned& u, int64 v) 190912027Sjungma@eit.uni-kl.de{ 191012027Sjungma@eit.uni-kl.de 191112027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 191212027Sjungma@eit.uni-kl.de 191312027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 191412027Sjungma@eit.uni-kl.de return sc_signed(); 191512027Sjungma@eit.uni-kl.de 191612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 191712027Sjungma@eit.uni-kl.de 191812027Sjungma@eit.uni-kl.de // cases 2-4 191912027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 192012027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 192112027Sjungma@eit.uni-kl.de 192212027Sjungma@eit.uni-kl.de} 192312027Sjungma@eit.uni-kl.de 192412027Sjungma@eit.uni-kl.de 192512027Sjungma@eit.uni-kl.desc_signed 192612027Sjungma@eit.uni-kl.deoperator*(int64 u, const sc_unsigned& v) 192712027Sjungma@eit.uni-kl.de{ 192812027Sjungma@eit.uni-kl.de 192912027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 193012027Sjungma@eit.uni-kl.de 193112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 193212027Sjungma@eit.uni-kl.de return sc_signed(); 193312027Sjungma@eit.uni-kl.de 193412027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 193512027Sjungma@eit.uni-kl.de 193612027Sjungma@eit.uni-kl.de // cases 2-4 193712027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 193812027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 193912027Sjungma@eit.uni-kl.de 194012027Sjungma@eit.uni-kl.de} 194112027Sjungma@eit.uni-kl.de 194212027Sjungma@eit.uni-kl.de 194312027Sjungma@eit.uni-kl.desc_signed 194412027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, uint64 v) 194512027Sjungma@eit.uni-kl.de{ 194612027Sjungma@eit.uni-kl.de 194712027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 194812027Sjungma@eit.uni-kl.de 194912027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 195012027Sjungma@eit.uni-kl.de return sc_signed(); 195112027Sjungma@eit.uni-kl.de 195212027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 195312027Sjungma@eit.uni-kl.de 195412027Sjungma@eit.uni-kl.de // cases 2-4 195512027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 195612027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 195712027Sjungma@eit.uni-kl.de 195812027Sjungma@eit.uni-kl.de} 195912027Sjungma@eit.uni-kl.de 196012027Sjungma@eit.uni-kl.de 196112027Sjungma@eit.uni-kl.desc_signed 196212027Sjungma@eit.uni-kl.deoperator*(uint64 u, const sc_signed& v) 196312027Sjungma@eit.uni-kl.de{ 196412027Sjungma@eit.uni-kl.de 196512027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 196612027Sjungma@eit.uni-kl.de 196712027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 196812027Sjungma@eit.uni-kl.de return sc_signed(); 196912027Sjungma@eit.uni-kl.de 197012027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 197112027Sjungma@eit.uni-kl.de 197212027Sjungma@eit.uni-kl.de // cases 2-4 197312027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 197412027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 197512027Sjungma@eit.uni-kl.de 197612027Sjungma@eit.uni-kl.de} 197712027Sjungma@eit.uni-kl.de 197812027Sjungma@eit.uni-kl.de 197912027Sjungma@eit.uni-kl.desc_signed 198012027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, long v) 198112027Sjungma@eit.uni-kl.de{ 198212027Sjungma@eit.uni-kl.de 198312027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 198412027Sjungma@eit.uni-kl.de 198512027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 198612027Sjungma@eit.uni-kl.de return sc_signed(); 198712027Sjungma@eit.uni-kl.de 198812027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 198912027Sjungma@eit.uni-kl.de 199012027Sjungma@eit.uni-kl.de // cases 2-4 199112027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 199212027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 199312027Sjungma@eit.uni-kl.de 199412027Sjungma@eit.uni-kl.de} 199512027Sjungma@eit.uni-kl.de 199612027Sjungma@eit.uni-kl.de 199712027Sjungma@eit.uni-kl.desc_signed 199812027Sjungma@eit.uni-kl.deoperator*(long u, const sc_signed& v) 199912027Sjungma@eit.uni-kl.de{ 200012027Sjungma@eit.uni-kl.de 200112027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 200212027Sjungma@eit.uni-kl.de 200312027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 200412027Sjungma@eit.uni-kl.de return sc_signed(); 200512027Sjungma@eit.uni-kl.de 200612027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 200712027Sjungma@eit.uni-kl.de 200812027Sjungma@eit.uni-kl.de // cases 2-4 200912027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 201012027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 201112027Sjungma@eit.uni-kl.de 201212027Sjungma@eit.uni-kl.de} 201312027Sjungma@eit.uni-kl.de 201412027Sjungma@eit.uni-kl.de 201512027Sjungma@eit.uni-kl.desc_signed 201612027Sjungma@eit.uni-kl.deoperator*(const sc_unsigned& u, long v) 201712027Sjungma@eit.uni-kl.de{ 201812027Sjungma@eit.uni-kl.de 201912027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 202012027Sjungma@eit.uni-kl.de 202112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 202212027Sjungma@eit.uni-kl.de return sc_signed(); 202312027Sjungma@eit.uni-kl.de 202412027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 202512027Sjungma@eit.uni-kl.de 202612027Sjungma@eit.uni-kl.de // cases 2-4 202712027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 202812027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 202912027Sjungma@eit.uni-kl.de 203012027Sjungma@eit.uni-kl.de} 203112027Sjungma@eit.uni-kl.de 203212027Sjungma@eit.uni-kl.de 203312027Sjungma@eit.uni-kl.desc_signed 203412027Sjungma@eit.uni-kl.deoperator*(long u, const sc_unsigned& v) 203512027Sjungma@eit.uni-kl.de{ 203612027Sjungma@eit.uni-kl.de 203712027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 203812027Sjungma@eit.uni-kl.de 203912027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 204012027Sjungma@eit.uni-kl.de return sc_signed(); 204112027Sjungma@eit.uni-kl.de 204212027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 204312027Sjungma@eit.uni-kl.de 204412027Sjungma@eit.uni-kl.de // cases 2-4 204512027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 204612027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 204712027Sjungma@eit.uni-kl.de 204812027Sjungma@eit.uni-kl.de} 204912027Sjungma@eit.uni-kl.de 205012027Sjungma@eit.uni-kl.de 205112027Sjungma@eit.uni-kl.desc_signed 205212027Sjungma@eit.uni-kl.deoperator*(const sc_signed& u, unsigned long v) 205312027Sjungma@eit.uni-kl.de{ 205412027Sjungma@eit.uni-kl.de 205512027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 205612027Sjungma@eit.uni-kl.de 205712027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 205812027Sjungma@eit.uni-kl.de return sc_signed(); 205912027Sjungma@eit.uni-kl.de 206012027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 206112027Sjungma@eit.uni-kl.de 206212027Sjungma@eit.uni-kl.de // else cases 2-4 206312027Sjungma@eit.uni-kl.de return mul_signed_friend(s, u.nbits, u.ndigits, u.digit, 206412027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 206512027Sjungma@eit.uni-kl.de 206612027Sjungma@eit.uni-kl.de} 206712027Sjungma@eit.uni-kl.de 206812027Sjungma@eit.uni-kl.desc_signed 206912027Sjungma@eit.uni-kl.deoperator*(unsigned long u, const sc_signed& v) 207012027Sjungma@eit.uni-kl.de{ 207112027Sjungma@eit.uni-kl.de 207212027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 207312027Sjungma@eit.uni-kl.de 207412027Sjungma@eit.uni-kl.de if (s == SC_ZERO) // case 1 207512027Sjungma@eit.uni-kl.de return sc_signed(); 207612027Sjungma@eit.uni-kl.de 207712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 207812027Sjungma@eit.uni-kl.de 207912027Sjungma@eit.uni-kl.de // cases 2-4 208012027Sjungma@eit.uni-kl.de return mul_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 208112027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 208212027Sjungma@eit.uni-kl.de 208312027Sjungma@eit.uni-kl.de} 208412027Sjungma@eit.uni-kl.de 208512027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 208612027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 208712027Sjungma@eit.uni-kl.de 208812027Sjungma@eit.uni-kl.de 208912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 209012027Sjungma@eit.uni-kl.de// SECTION: DIVISION operators: /, /= 209112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 209212027Sjungma@eit.uni-kl.de 209312027Sjungma@eit.uni-kl.de// Cases to consider when finding the quotient q = floor(u/v): 209412027Sjungma@eit.uni-kl.de// Note that u = q * v + r for r < q. 209512027Sjungma@eit.uni-kl.de// 1. 0 / 0 or u / 0 => error 209612027Sjungma@eit.uni-kl.de// 2. 0 / v => 0 = 0 * v + 0 209712027Sjungma@eit.uni-kl.de// 3. u / v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 209812027Sjungma@eit.uni-kl.de// 4. u / v && u < v => u = 0 * v + u - u can be 1 or -1 209912027Sjungma@eit.uni-kl.de// 5. u / v && u > v => u = q * v + r - v can be 1 or -1 210012027Sjungma@eit.uni-kl.de 210112027Sjungma@eit.uni-kl.desc_signed 210212027Sjungma@eit.uni-kl.deoperator/(const sc_unsigned& u, const sc_signed& v) 210312027Sjungma@eit.uni-kl.de{ 210412027Sjungma@eit.uni-kl.de 210512027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 210612027Sjungma@eit.uni-kl.de 210712027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 210812027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 210912027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 211012027Sjungma@eit.uni-kl.de } 211112027Sjungma@eit.uni-kl.de 211212027Sjungma@eit.uni-kl.de // other cases 211312027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 211412027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 211512027Sjungma@eit.uni-kl.de 211612027Sjungma@eit.uni-kl.de} 211712027Sjungma@eit.uni-kl.de 211812027Sjungma@eit.uni-kl.de 211912027Sjungma@eit.uni-kl.desc_signed 212012027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, const sc_unsigned& v) 212112027Sjungma@eit.uni-kl.de{ 212212027Sjungma@eit.uni-kl.de 212312027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 212412027Sjungma@eit.uni-kl.de 212512027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 212612027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 212712027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 212812027Sjungma@eit.uni-kl.de } 212912027Sjungma@eit.uni-kl.de 213012027Sjungma@eit.uni-kl.de // other cases 213112027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 213212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 213312027Sjungma@eit.uni-kl.de 213412027Sjungma@eit.uni-kl.de} 213512027Sjungma@eit.uni-kl.de 213612027Sjungma@eit.uni-kl.de 213712027Sjungma@eit.uni-kl.desc_signed 213812027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, const sc_signed& v) 213912027Sjungma@eit.uni-kl.de{ 214012027Sjungma@eit.uni-kl.de 214112027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, v.sgn); 214212027Sjungma@eit.uni-kl.de 214312027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 214412027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 214512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 214612027Sjungma@eit.uni-kl.de } 214712027Sjungma@eit.uni-kl.de 214812027Sjungma@eit.uni-kl.de // other cases 214912027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 215012027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 215112027Sjungma@eit.uni-kl.de 215212027Sjungma@eit.uni-kl.de} 215312027Sjungma@eit.uni-kl.de 215412027Sjungma@eit.uni-kl.de 215512027Sjungma@eit.uni-kl.desc_signed 215612027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, int64 v) 215712027Sjungma@eit.uni-kl.de{ 215812027Sjungma@eit.uni-kl.de 215912027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 216012027Sjungma@eit.uni-kl.de 216112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 216212027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 216312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 216412027Sjungma@eit.uni-kl.de } 216512027Sjungma@eit.uni-kl.de 216612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 216712027Sjungma@eit.uni-kl.de 216812027Sjungma@eit.uni-kl.de // other cases 216912027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 217012027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 217112027Sjungma@eit.uni-kl.de 217212027Sjungma@eit.uni-kl.de} 217312027Sjungma@eit.uni-kl.de 217412027Sjungma@eit.uni-kl.de 217512027Sjungma@eit.uni-kl.desc_signed 217612027Sjungma@eit.uni-kl.deoperator/(int64 u, const sc_signed& v) 217712027Sjungma@eit.uni-kl.de{ 217812027Sjungma@eit.uni-kl.de 217912027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 218012027Sjungma@eit.uni-kl.de 218112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 218212027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 218312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 218412027Sjungma@eit.uni-kl.de } 218512027Sjungma@eit.uni-kl.de 218612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 218712027Sjungma@eit.uni-kl.de 218812027Sjungma@eit.uni-kl.de // other cases 218912027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 219012027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 219112027Sjungma@eit.uni-kl.de 219212027Sjungma@eit.uni-kl.de} 219312027Sjungma@eit.uni-kl.de 219412027Sjungma@eit.uni-kl.de 219512027Sjungma@eit.uni-kl.desc_signed 219612027Sjungma@eit.uni-kl.deoperator/(const sc_unsigned& u, int64 v) 219712027Sjungma@eit.uni-kl.de{ 219812027Sjungma@eit.uni-kl.de 219912027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 220012027Sjungma@eit.uni-kl.de 220112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 220212027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 220312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 220412027Sjungma@eit.uni-kl.de } 220512027Sjungma@eit.uni-kl.de 220612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 220712027Sjungma@eit.uni-kl.de 220812027Sjungma@eit.uni-kl.de // other cases 220912027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 221012027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 221112027Sjungma@eit.uni-kl.de 221212027Sjungma@eit.uni-kl.de} 221312027Sjungma@eit.uni-kl.de 221412027Sjungma@eit.uni-kl.de 221512027Sjungma@eit.uni-kl.desc_signed 221612027Sjungma@eit.uni-kl.deoperator/(int64 u, const sc_unsigned& v) 221712027Sjungma@eit.uni-kl.de{ 221812027Sjungma@eit.uni-kl.de 221912027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 222012027Sjungma@eit.uni-kl.de 222112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 222212027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 222312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 222412027Sjungma@eit.uni-kl.de } 222512027Sjungma@eit.uni-kl.de 222612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 222712027Sjungma@eit.uni-kl.de 222812027Sjungma@eit.uni-kl.de // other cases 222912027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 223012027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 223112027Sjungma@eit.uni-kl.de 223212027Sjungma@eit.uni-kl.de} 223312027Sjungma@eit.uni-kl.de 223412027Sjungma@eit.uni-kl.de 223512027Sjungma@eit.uni-kl.desc_signed 223612027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, uint64 v) 223712027Sjungma@eit.uni-kl.de{ 223812027Sjungma@eit.uni-kl.de 223912027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 224012027Sjungma@eit.uni-kl.de 224112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 224212027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 224312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 224412027Sjungma@eit.uni-kl.de } 224512027Sjungma@eit.uni-kl.de 224612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 224712027Sjungma@eit.uni-kl.de 224812027Sjungma@eit.uni-kl.de // other cases 224912027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 225012027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 225112027Sjungma@eit.uni-kl.de 225212027Sjungma@eit.uni-kl.de} 225312027Sjungma@eit.uni-kl.de 225412027Sjungma@eit.uni-kl.de 225512027Sjungma@eit.uni-kl.desc_signed 225612027Sjungma@eit.uni-kl.deoperator/(uint64 u, const sc_signed& v) 225712027Sjungma@eit.uni-kl.de{ 225812027Sjungma@eit.uni-kl.de 225912027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 226012027Sjungma@eit.uni-kl.de 226112027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 226212027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 226312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 226412027Sjungma@eit.uni-kl.de 226512027Sjungma@eit.uni-kl.de } 226612027Sjungma@eit.uni-kl.de 226712027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 226812027Sjungma@eit.uni-kl.de 226912027Sjungma@eit.uni-kl.de // other cases 227012027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 227112027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 227212027Sjungma@eit.uni-kl.de 227312027Sjungma@eit.uni-kl.de} 227412027Sjungma@eit.uni-kl.de 227512027Sjungma@eit.uni-kl.de 227612027Sjungma@eit.uni-kl.desc_signed 227712027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, long v) 227812027Sjungma@eit.uni-kl.de{ 227912027Sjungma@eit.uni-kl.de 228012027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 228112027Sjungma@eit.uni-kl.de 228212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 228312027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 228412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 228512027Sjungma@eit.uni-kl.de } 228612027Sjungma@eit.uni-kl.de 228712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 228812027Sjungma@eit.uni-kl.de 228912027Sjungma@eit.uni-kl.de // other cases 229012027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 229112027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 229212027Sjungma@eit.uni-kl.de 229312027Sjungma@eit.uni-kl.de} 229412027Sjungma@eit.uni-kl.de 229512027Sjungma@eit.uni-kl.de 229612027Sjungma@eit.uni-kl.desc_signed 229712027Sjungma@eit.uni-kl.deoperator/(long u, const sc_signed& v) 229812027Sjungma@eit.uni-kl.de{ 229912027Sjungma@eit.uni-kl.de 230012027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 230112027Sjungma@eit.uni-kl.de 230212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 230312027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 230412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 230512027Sjungma@eit.uni-kl.de } 230612027Sjungma@eit.uni-kl.de 230712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 230812027Sjungma@eit.uni-kl.de 230912027Sjungma@eit.uni-kl.de // other cases 231012027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 231112027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 231212027Sjungma@eit.uni-kl.de 231312027Sjungma@eit.uni-kl.de} 231412027Sjungma@eit.uni-kl.de 231512027Sjungma@eit.uni-kl.de 231612027Sjungma@eit.uni-kl.desc_signed 231712027Sjungma@eit.uni-kl.deoperator/(const sc_unsigned& u, long v) 231812027Sjungma@eit.uni-kl.de{ 231912027Sjungma@eit.uni-kl.de 232012027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 232112027Sjungma@eit.uni-kl.de 232212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 232312027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 232412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 232512027Sjungma@eit.uni-kl.de } 232612027Sjungma@eit.uni-kl.de 232712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 232812027Sjungma@eit.uni-kl.de 232912027Sjungma@eit.uni-kl.de // other cases 233012027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 233112027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 233212027Sjungma@eit.uni-kl.de 233312027Sjungma@eit.uni-kl.de} 233412027Sjungma@eit.uni-kl.de 233512027Sjungma@eit.uni-kl.de 233612027Sjungma@eit.uni-kl.desc_signed 233712027Sjungma@eit.uni-kl.deoperator/(long u, const sc_unsigned& v) 233812027Sjungma@eit.uni-kl.de{ 233912027Sjungma@eit.uni-kl.de 234012027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 234112027Sjungma@eit.uni-kl.de 234212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 234312027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 234412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 234512027Sjungma@eit.uni-kl.de } 234612027Sjungma@eit.uni-kl.de 234712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 234812027Sjungma@eit.uni-kl.de 234912027Sjungma@eit.uni-kl.de // other cases 235012027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 235112027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 235212027Sjungma@eit.uni-kl.de 235312027Sjungma@eit.uni-kl.de} 235412027Sjungma@eit.uni-kl.de 235512027Sjungma@eit.uni-kl.de 235612027Sjungma@eit.uni-kl.desc_signed 235712027Sjungma@eit.uni-kl.deoperator/(const sc_signed& u, unsigned long v) 235812027Sjungma@eit.uni-kl.de{ 235912027Sjungma@eit.uni-kl.de 236012027Sjungma@eit.uni-kl.de small_type s = mul_signs(u.sgn, get_sign(v)); 236112027Sjungma@eit.uni-kl.de 236212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 236312027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 236412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 236512027Sjungma@eit.uni-kl.de } 236612027Sjungma@eit.uni-kl.de 236712027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 236812027Sjungma@eit.uni-kl.de 236912027Sjungma@eit.uni-kl.de // other cases 237012027Sjungma@eit.uni-kl.de return div_signed_friend(s, u.nbits, u.ndigits, u.digit, 237112027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 237212027Sjungma@eit.uni-kl.de 237312027Sjungma@eit.uni-kl.de} 237412027Sjungma@eit.uni-kl.de 237512027Sjungma@eit.uni-kl.de 237612027Sjungma@eit.uni-kl.desc_signed 237712027Sjungma@eit.uni-kl.deoperator/(unsigned long u, const sc_signed& v) 237812027Sjungma@eit.uni-kl.de{ 237912027Sjungma@eit.uni-kl.de 238012027Sjungma@eit.uni-kl.de small_type s = mul_signs(v.sgn, get_sign(u)); 238112027Sjungma@eit.uni-kl.de 238212027Sjungma@eit.uni-kl.de if (s == SC_ZERO) { 238312027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 238412027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 238512027Sjungma@eit.uni-kl.de 238612027Sjungma@eit.uni-kl.de } 238712027Sjungma@eit.uni-kl.de 238812027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 238912027Sjungma@eit.uni-kl.de 239012027Sjungma@eit.uni-kl.de // other cases 239112027Sjungma@eit.uni-kl.de return div_signed_friend(s, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 239212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 239312027Sjungma@eit.uni-kl.de 239412027Sjungma@eit.uni-kl.de} 239512027Sjungma@eit.uni-kl.de 239612027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 239712027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 239812027Sjungma@eit.uni-kl.de 239912027Sjungma@eit.uni-kl.de 240012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 240112027Sjungma@eit.uni-kl.de// SECTION: MOD operators: %, %=. 240212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 240312027Sjungma@eit.uni-kl.de 240412027Sjungma@eit.uni-kl.de// Cases to consider when finding the remainder r = u % v: 240512027Sjungma@eit.uni-kl.de// Note that u = q * v + r for r < q. 240612027Sjungma@eit.uni-kl.de// 1. 0 % 0 or u % 0 => error 240712027Sjungma@eit.uni-kl.de// 2. 0 % v => 0 = 0 * v + 0 240812027Sjungma@eit.uni-kl.de// 3. u % v && u = v => u = 1 * u + 0 - u or v can be 1 or -1 240912027Sjungma@eit.uni-kl.de// 4. u % v && u < v => u = 0 * v + u - u can be 1 or -1 241012027Sjungma@eit.uni-kl.de// 5. u % v && u > v => u = q * v + r - v can be 1 or -1 241112027Sjungma@eit.uni-kl.de 241212027Sjungma@eit.uni-kl.desc_signed 241312027Sjungma@eit.uni-kl.deoperator%(const sc_unsigned& u, const sc_signed& v) 241412027Sjungma@eit.uni-kl.de{ 241512027Sjungma@eit.uni-kl.de 241612027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { 241712027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 241812027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 241912027Sjungma@eit.uni-kl.de } 242012027Sjungma@eit.uni-kl.de 242112027Sjungma@eit.uni-kl.de // other cases 242212027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 242312027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 242412027Sjungma@eit.uni-kl.de} 242512027Sjungma@eit.uni-kl.de 242612027Sjungma@eit.uni-kl.de 242712027Sjungma@eit.uni-kl.desc_signed 242812027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, const sc_unsigned& v) 242912027Sjungma@eit.uni-kl.de{ 243012027Sjungma@eit.uni-kl.de 243112027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { 243212027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 243312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 243412027Sjungma@eit.uni-kl.de } 243512027Sjungma@eit.uni-kl.de 243612027Sjungma@eit.uni-kl.de // other cases 243712027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 243812027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 243912027Sjungma@eit.uni-kl.de} 244012027Sjungma@eit.uni-kl.de 244112027Sjungma@eit.uni-kl.de 244212027Sjungma@eit.uni-kl.desc_signed 244312027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, const sc_signed& v) 244412027Sjungma@eit.uni-kl.de{ 244512027Sjungma@eit.uni-kl.de 244612027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) { 244712027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 244812027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 244912027Sjungma@eit.uni-kl.de } 245012027Sjungma@eit.uni-kl.de 245112027Sjungma@eit.uni-kl.de // other cases 245212027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 245312027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 245412027Sjungma@eit.uni-kl.de} 245512027Sjungma@eit.uni-kl.de 245612027Sjungma@eit.uni-kl.de 245712027Sjungma@eit.uni-kl.desc_signed 245812027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, int64 v) 245912027Sjungma@eit.uni-kl.de{ 246012027Sjungma@eit.uni-kl.de 246112027Sjungma@eit.uni-kl.de small_type vs = get_sign(v); 246212027Sjungma@eit.uni-kl.de 246312027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { 246412027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 246512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 246612027Sjungma@eit.uni-kl.de } 246712027Sjungma@eit.uni-kl.de 246812027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 246912027Sjungma@eit.uni-kl.de 247012027Sjungma@eit.uni-kl.de // other cases 247112027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 247212027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 247312027Sjungma@eit.uni-kl.de 247412027Sjungma@eit.uni-kl.de} 247512027Sjungma@eit.uni-kl.de 247612027Sjungma@eit.uni-kl.de 247712027Sjungma@eit.uni-kl.desc_signed 247812027Sjungma@eit.uni-kl.deoperator%(int64 u, const sc_signed& v) 247912027Sjungma@eit.uni-kl.de{ 248012027Sjungma@eit.uni-kl.de 248112027Sjungma@eit.uni-kl.de small_type us = get_sign(u); 248212027Sjungma@eit.uni-kl.de 248312027Sjungma@eit.uni-kl.de if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { 248412027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 248512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 248612027Sjungma@eit.uni-kl.de } 248712027Sjungma@eit.uni-kl.de 248812027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 248912027Sjungma@eit.uni-kl.de 249012027Sjungma@eit.uni-kl.de // other cases 249112027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 249212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 249312027Sjungma@eit.uni-kl.de 249412027Sjungma@eit.uni-kl.de} 249512027Sjungma@eit.uni-kl.de 249612027Sjungma@eit.uni-kl.de 249712027Sjungma@eit.uni-kl.desc_signed 249812027Sjungma@eit.uni-kl.deoperator%(const sc_unsigned& u, int64 v) 249912027Sjungma@eit.uni-kl.de{ 250012027Sjungma@eit.uni-kl.de 250112027Sjungma@eit.uni-kl.de small_type vs = get_sign(v); 250212027Sjungma@eit.uni-kl.de 250312027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { 250412027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 250512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 250612027Sjungma@eit.uni-kl.de } 250712027Sjungma@eit.uni-kl.de 250812027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 250912027Sjungma@eit.uni-kl.de 251012027Sjungma@eit.uni-kl.de // other cases 251112027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 251212027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 251312027Sjungma@eit.uni-kl.de 251412027Sjungma@eit.uni-kl.de} 251512027Sjungma@eit.uni-kl.de 251612027Sjungma@eit.uni-kl.de 251712027Sjungma@eit.uni-kl.desc_signed 251812027Sjungma@eit.uni-kl.deoperator%(int64 u, const sc_unsigned& v) 251912027Sjungma@eit.uni-kl.de{ 252012027Sjungma@eit.uni-kl.de 252112027Sjungma@eit.uni-kl.de small_type us = get_sign(u); 252212027Sjungma@eit.uni-kl.de 252312027Sjungma@eit.uni-kl.de if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { 252412027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 252512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 252612027Sjungma@eit.uni-kl.de } 252712027Sjungma@eit.uni-kl.de 252812027Sjungma@eit.uni-kl.de CONVERT_INT64_2(u); 252912027Sjungma@eit.uni-kl.de 253012027Sjungma@eit.uni-kl.de // other cases 253112027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 253212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 253312027Sjungma@eit.uni-kl.de 253412027Sjungma@eit.uni-kl.de} 253512027Sjungma@eit.uni-kl.de 253612027Sjungma@eit.uni-kl.de 253712027Sjungma@eit.uni-kl.desc_signed 253812027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, uint64 v) 253912027Sjungma@eit.uni-kl.de{ 254012027Sjungma@eit.uni-kl.de 254112027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) { 254212027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 254312027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 254412027Sjungma@eit.uni-kl.de } 254512027Sjungma@eit.uni-kl.de 254612027Sjungma@eit.uni-kl.de CONVERT_INT64_2(v); 254712027Sjungma@eit.uni-kl.de 254812027Sjungma@eit.uni-kl.de // other cases 254912027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 255012027Sjungma@eit.uni-kl.de BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 255112027Sjungma@eit.uni-kl.de 255212027Sjungma@eit.uni-kl.de} 255312027Sjungma@eit.uni-kl.de 255412027Sjungma@eit.uni-kl.de 255512027Sjungma@eit.uni-kl.desc_signed 255612027Sjungma@eit.uni-kl.deoperator%(uint64 u, const sc_signed& v) 255712027Sjungma@eit.uni-kl.de{ 255812027Sjungma@eit.uni-kl.de 255912027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) { 256012027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 256112027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 256212027Sjungma@eit.uni-kl.de } 256312027Sjungma@eit.uni-kl.de 256412027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 256512027Sjungma@eit.uni-kl.de 256612027Sjungma@eit.uni-kl.de // other cases 256712027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 256812027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 256912027Sjungma@eit.uni-kl.de 257012027Sjungma@eit.uni-kl.de} 257112027Sjungma@eit.uni-kl.de 257212027Sjungma@eit.uni-kl.de 257312027Sjungma@eit.uni-kl.desc_signed 257412027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, long v) 257512027Sjungma@eit.uni-kl.de{ 257612027Sjungma@eit.uni-kl.de 257712027Sjungma@eit.uni-kl.de small_type vs = get_sign(v); 257812027Sjungma@eit.uni-kl.de 257912027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { 258012027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 258112027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 258212027Sjungma@eit.uni-kl.de } 258312027Sjungma@eit.uni-kl.de 258412027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 258512027Sjungma@eit.uni-kl.de 258612027Sjungma@eit.uni-kl.de // other cases 258712027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 258812027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 258912027Sjungma@eit.uni-kl.de} 259012027Sjungma@eit.uni-kl.de 259112027Sjungma@eit.uni-kl.de 259212027Sjungma@eit.uni-kl.desc_signed 259312027Sjungma@eit.uni-kl.deoperator%(long u, const sc_signed& v) 259412027Sjungma@eit.uni-kl.de{ 259512027Sjungma@eit.uni-kl.de 259612027Sjungma@eit.uni-kl.de small_type us = get_sign(u); 259712027Sjungma@eit.uni-kl.de 259812027Sjungma@eit.uni-kl.de if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { 259912027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 260012027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 260112027Sjungma@eit.uni-kl.de } 260212027Sjungma@eit.uni-kl.de 260312027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 260412027Sjungma@eit.uni-kl.de 260512027Sjungma@eit.uni-kl.de // other cases 260612027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 260712027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 260812027Sjungma@eit.uni-kl.de 260912027Sjungma@eit.uni-kl.de} 261012027Sjungma@eit.uni-kl.de 261112027Sjungma@eit.uni-kl.de 261212027Sjungma@eit.uni-kl.desc_signed 261312027Sjungma@eit.uni-kl.deoperator%(const sc_unsigned& u, long v) 261412027Sjungma@eit.uni-kl.de{ 261512027Sjungma@eit.uni-kl.de 261612027Sjungma@eit.uni-kl.de small_type vs = get_sign(v); 261712027Sjungma@eit.uni-kl.de 261812027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (vs == SC_ZERO)) { 261912027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 262012027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 262112027Sjungma@eit.uni-kl.de } 262212027Sjungma@eit.uni-kl.de 262312027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 262412027Sjungma@eit.uni-kl.de 262512027Sjungma@eit.uni-kl.de // other cases 262612027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 262712027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 262812027Sjungma@eit.uni-kl.de} 262912027Sjungma@eit.uni-kl.de 263012027Sjungma@eit.uni-kl.de 263112027Sjungma@eit.uni-kl.desc_signed 263212027Sjungma@eit.uni-kl.deoperator%(long u, const sc_unsigned& v) 263312027Sjungma@eit.uni-kl.de{ 263412027Sjungma@eit.uni-kl.de 263512027Sjungma@eit.uni-kl.de small_type us = get_sign(u); 263612027Sjungma@eit.uni-kl.de 263712027Sjungma@eit.uni-kl.de if ((us == SC_ZERO) || (v.sgn == SC_ZERO)) { 263812027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 263912027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 264012027Sjungma@eit.uni-kl.de } 264112027Sjungma@eit.uni-kl.de 264212027Sjungma@eit.uni-kl.de CONVERT_LONG_2(u); 264312027Sjungma@eit.uni-kl.de 264412027Sjungma@eit.uni-kl.de // other cases 264512027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 264612027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 264712027Sjungma@eit.uni-kl.de 264812027Sjungma@eit.uni-kl.de} 264912027Sjungma@eit.uni-kl.de 265012027Sjungma@eit.uni-kl.de 265112027Sjungma@eit.uni-kl.desc_signed 265212027Sjungma@eit.uni-kl.deoperator%(const sc_signed& u, unsigned long v) 265312027Sjungma@eit.uni-kl.de{ 265412027Sjungma@eit.uni-kl.de 265512027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) { 265612027Sjungma@eit.uni-kl.de div_by_zero(v); // case 1 265712027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 265812027Sjungma@eit.uni-kl.de } 265912027Sjungma@eit.uni-kl.de 266012027Sjungma@eit.uni-kl.de CONVERT_LONG_2(v); 266112027Sjungma@eit.uni-kl.de 266212027Sjungma@eit.uni-kl.de // other cases 266312027Sjungma@eit.uni-kl.de return mod_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 266412027Sjungma@eit.uni-kl.de BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 266512027Sjungma@eit.uni-kl.de 266612027Sjungma@eit.uni-kl.de} 266712027Sjungma@eit.uni-kl.de 266812027Sjungma@eit.uni-kl.de 266912027Sjungma@eit.uni-kl.desc_signed 267012027Sjungma@eit.uni-kl.deoperator%(unsigned long u, const sc_signed& v) 267112027Sjungma@eit.uni-kl.de{ 267212027Sjungma@eit.uni-kl.de 267312027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) { 267412027Sjungma@eit.uni-kl.de div_by_zero(v.sgn); // case 1 267512027Sjungma@eit.uni-kl.de return sc_signed(); // case 2 267612027Sjungma@eit.uni-kl.de } 267712027Sjungma@eit.uni-kl.de 267812027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 267912027Sjungma@eit.uni-kl.de 268012027Sjungma@eit.uni-kl.de // other cases 268112027Sjungma@eit.uni-kl.de return mod_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 268212027Sjungma@eit.uni-kl.de v.nbits, v.ndigits, v.digit); 268312027Sjungma@eit.uni-kl.de 268412027Sjungma@eit.uni-kl.de} 268512027Sjungma@eit.uni-kl.de 268612027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 268712027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 268812027Sjungma@eit.uni-kl.de 268912027Sjungma@eit.uni-kl.de 269012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 269112027Sjungma@eit.uni-kl.de// SECTION: Bitwise AND operators: &, &= 269212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 269312027Sjungma@eit.uni-kl.de 269412027Sjungma@eit.uni-kl.de// Cases to consider when computing u & v: 269512027Sjungma@eit.uni-kl.de// 1. u & 0 = 0 & v = 0 269612027Sjungma@eit.uni-kl.de// 2. u & v => sgn = + 269712027Sjungma@eit.uni-kl.de// 3. (-u) & (-v) => sgn = - 269812027Sjungma@eit.uni-kl.de// 4. u & (-v) => sgn = + 269912027Sjungma@eit.uni-kl.de// 5. (-u) & v => sgn = + 270012027Sjungma@eit.uni-kl.de 270112027Sjungma@eit.uni-kl.desc_signed 270212027Sjungma@eit.uni-kl.deoperator&(const sc_unsigned& u, const sc_signed& v) 270312027Sjungma@eit.uni-kl.de{ 270412027Sjungma@eit.uni-kl.de 270512027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 270612027Sjungma@eit.uni-kl.de return sc_signed(); 270712027Sjungma@eit.uni-kl.de 270812027Sjungma@eit.uni-kl.de // other cases 270912027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 271012027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 271112027Sjungma@eit.uni-kl.de 271212027Sjungma@eit.uni-kl.de} 271312027Sjungma@eit.uni-kl.de 271412027Sjungma@eit.uni-kl.de 271512027Sjungma@eit.uni-kl.desc_signed 271612027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, const sc_unsigned& v) 271712027Sjungma@eit.uni-kl.de{ 271812027Sjungma@eit.uni-kl.de 271912027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 272012027Sjungma@eit.uni-kl.de return sc_signed(); 272112027Sjungma@eit.uni-kl.de 272212027Sjungma@eit.uni-kl.de // other cases 272312027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 272412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 272512027Sjungma@eit.uni-kl.de 272612027Sjungma@eit.uni-kl.de} 272712027Sjungma@eit.uni-kl.de 272812027Sjungma@eit.uni-kl.de 272912027Sjungma@eit.uni-kl.desc_signed 273012027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, const sc_signed& v) 273112027Sjungma@eit.uni-kl.de{ 273212027Sjungma@eit.uni-kl.de 273312027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v.sgn == SC_ZERO)) // case 1 273412027Sjungma@eit.uni-kl.de return sc_signed(); 273512027Sjungma@eit.uni-kl.de 273612027Sjungma@eit.uni-kl.de // other cases 273712027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 273812027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 273912027Sjungma@eit.uni-kl.de 274012027Sjungma@eit.uni-kl.de} 274112027Sjungma@eit.uni-kl.de 274212027Sjungma@eit.uni-kl.de 274312027Sjungma@eit.uni-kl.desc_signed 274412027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, int64 v) 274512027Sjungma@eit.uni-kl.de{ 274612027Sjungma@eit.uni-kl.de 274712027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 274812027Sjungma@eit.uni-kl.de return sc_signed(); 274912027Sjungma@eit.uni-kl.de 275012027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 275112027Sjungma@eit.uni-kl.de 275212027Sjungma@eit.uni-kl.de // other cases 275312027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 275412027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 275512027Sjungma@eit.uni-kl.de 275612027Sjungma@eit.uni-kl.de} 275712027Sjungma@eit.uni-kl.de 275812027Sjungma@eit.uni-kl.de 275912027Sjungma@eit.uni-kl.desc_signed 276012027Sjungma@eit.uni-kl.deoperator&(int64 u, const sc_signed& v) 276112027Sjungma@eit.uni-kl.de{ 276212027Sjungma@eit.uni-kl.de 276312027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 276412027Sjungma@eit.uni-kl.de return sc_signed(); 276512027Sjungma@eit.uni-kl.de 276612027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 276712027Sjungma@eit.uni-kl.de 276812027Sjungma@eit.uni-kl.de // other cases 276912027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 277012027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 277112027Sjungma@eit.uni-kl.de 277212027Sjungma@eit.uni-kl.de} 277312027Sjungma@eit.uni-kl.de 277412027Sjungma@eit.uni-kl.de 277512027Sjungma@eit.uni-kl.desc_signed 277612027Sjungma@eit.uni-kl.deoperator&(const sc_unsigned& u, int64 v) 277712027Sjungma@eit.uni-kl.de{ 277812027Sjungma@eit.uni-kl.de 277912027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 278012027Sjungma@eit.uni-kl.de return sc_signed(); 278112027Sjungma@eit.uni-kl.de 278212027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 278312027Sjungma@eit.uni-kl.de 278412027Sjungma@eit.uni-kl.de // other cases 278512027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 278612027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 278712027Sjungma@eit.uni-kl.de 278812027Sjungma@eit.uni-kl.de} 278912027Sjungma@eit.uni-kl.de 279012027Sjungma@eit.uni-kl.de 279112027Sjungma@eit.uni-kl.desc_signed 279212027Sjungma@eit.uni-kl.deoperator&(int64 u, const sc_unsigned& v) 279312027Sjungma@eit.uni-kl.de{ 279412027Sjungma@eit.uni-kl.de 279512027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 279612027Sjungma@eit.uni-kl.de return sc_signed(); 279712027Sjungma@eit.uni-kl.de 279812027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 279912027Sjungma@eit.uni-kl.de 280012027Sjungma@eit.uni-kl.de // other cases 280112027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 280212027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 280312027Sjungma@eit.uni-kl.de 280412027Sjungma@eit.uni-kl.de} 280512027Sjungma@eit.uni-kl.de 280612027Sjungma@eit.uni-kl.de 280712027Sjungma@eit.uni-kl.desc_signed 280812027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, uint64 v) 280912027Sjungma@eit.uni-kl.de{ 281012027Sjungma@eit.uni-kl.de 281112027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 281212027Sjungma@eit.uni-kl.de return sc_signed(); 281312027Sjungma@eit.uni-kl.de 281412027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 281512027Sjungma@eit.uni-kl.de 281612027Sjungma@eit.uni-kl.de // other cases 281712027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 281812027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 281912027Sjungma@eit.uni-kl.de 282012027Sjungma@eit.uni-kl.de} 282112027Sjungma@eit.uni-kl.de 282212027Sjungma@eit.uni-kl.de 282312027Sjungma@eit.uni-kl.desc_signed 282412027Sjungma@eit.uni-kl.deoperator&(uint64 u, const sc_signed& v) 282512027Sjungma@eit.uni-kl.de{ 282612027Sjungma@eit.uni-kl.de 282712027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 282812027Sjungma@eit.uni-kl.de return sc_signed(); 282912027Sjungma@eit.uni-kl.de 283012027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 283112027Sjungma@eit.uni-kl.de 283212027Sjungma@eit.uni-kl.de // other cases 283312027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 283412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 283512027Sjungma@eit.uni-kl.de 283612027Sjungma@eit.uni-kl.de} 283712027Sjungma@eit.uni-kl.de 283812027Sjungma@eit.uni-kl.de 283912027Sjungma@eit.uni-kl.desc_signed 284012027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, long v) 284112027Sjungma@eit.uni-kl.de{ 284212027Sjungma@eit.uni-kl.de 284312027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 284412027Sjungma@eit.uni-kl.de return sc_signed(); 284512027Sjungma@eit.uni-kl.de 284612027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 284712027Sjungma@eit.uni-kl.de 284812027Sjungma@eit.uni-kl.de // other cases 284912027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 285012027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 285112027Sjungma@eit.uni-kl.de 285212027Sjungma@eit.uni-kl.de} 285312027Sjungma@eit.uni-kl.de 285412027Sjungma@eit.uni-kl.de 285512027Sjungma@eit.uni-kl.desc_signed 285612027Sjungma@eit.uni-kl.deoperator&(long u, const sc_signed& v) 285712027Sjungma@eit.uni-kl.de{ 285812027Sjungma@eit.uni-kl.de 285912027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 286012027Sjungma@eit.uni-kl.de return sc_signed(); 286112027Sjungma@eit.uni-kl.de 286212027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 286312027Sjungma@eit.uni-kl.de 286412027Sjungma@eit.uni-kl.de // other cases 286512027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 286612027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 286712027Sjungma@eit.uni-kl.de 286812027Sjungma@eit.uni-kl.de} 286912027Sjungma@eit.uni-kl.de 287012027Sjungma@eit.uni-kl.de 287112027Sjungma@eit.uni-kl.desc_signed 287212027Sjungma@eit.uni-kl.deoperator&(const sc_unsigned& u, long v) 287312027Sjungma@eit.uni-kl.de{ 287412027Sjungma@eit.uni-kl.de 287512027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 287612027Sjungma@eit.uni-kl.de return sc_signed(); 287712027Sjungma@eit.uni-kl.de 287812027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 287912027Sjungma@eit.uni-kl.de 288012027Sjungma@eit.uni-kl.de // other cases 288112027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 288212027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 288312027Sjungma@eit.uni-kl.de 288412027Sjungma@eit.uni-kl.de} 288512027Sjungma@eit.uni-kl.de 288612027Sjungma@eit.uni-kl.de 288712027Sjungma@eit.uni-kl.desc_signed 288812027Sjungma@eit.uni-kl.deoperator&(long u, const sc_unsigned& v) 288912027Sjungma@eit.uni-kl.de{ 289012027Sjungma@eit.uni-kl.de 289112027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 289212027Sjungma@eit.uni-kl.de return sc_signed(); 289312027Sjungma@eit.uni-kl.de 289412027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 289512027Sjungma@eit.uni-kl.de 289612027Sjungma@eit.uni-kl.de // other cases 289712027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 289812027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 289912027Sjungma@eit.uni-kl.de 290012027Sjungma@eit.uni-kl.de} 290112027Sjungma@eit.uni-kl.de 290212027Sjungma@eit.uni-kl.de 290312027Sjungma@eit.uni-kl.desc_signed 290412027Sjungma@eit.uni-kl.deoperator&(const sc_signed& u, unsigned long v) 290512027Sjungma@eit.uni-kl.de{ 290612027Sjungma@eit.uni-kl.de 290712027Sjungma@eit.uni-kl.de if ((u.sgn == SC_ZERO) || (v == 0)) // case 1 290812027Sjungma@eit.uni-kl.de return sc_signed(); 290912027Sjungma@eit.uni-kl.de 291012027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 291112027Sjungma@eit.uni-kl.de 291212027Sjungma@eit.uni-kl.de // other cases 291312027Sjungma@eit.uni-kl.de return and_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 291412027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 291512027Sjungma@eit.uni-kl.de 291612027Sjungma@eit.uni-kl.de} 291712027Sjungma@eit.uni-kl.de 291812027Sjungma@eit.uni-kl.de 291912027Sjungma@eit.uni-kl.desc_signed 292012027Sjungma@eit.uni-kl.deoperator&(unsigned long u, const sc_signed& v) 292112027Sjungma@eit.uni-kl.de{ 292212027Sjungma@eit.uni-kl.de 292312027Sjungma@eit.uni-kl.de if ((u == 0) || (v.sgn == SC_ZERO)) // case 1 292412027Sjungma@eit.uni-kl.de return sc_signed(); 292512027Sjungma@eit.uni-kl.de 292612027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 292712027Sjungma@eit.uni-kl.de 292812027Sjungma@eit.uni-kl.de // other cases 292912027Sjungma@eit.uni-kl.de return and_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 293012027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 293112027Sjungma@eit.uni-kl.de 293212027Sjungma@eit.uni-kl.de} 293312027Sjungma@eit.uni-kl.de 293412027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 293512027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 293612027Sjungma@eit.uni-kl.de 293712027Sjungma@eit.uni-kl.de 293812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 293912027Sjungma@eit.uni-kl.de// SECTION: Bitwise OR operators: |, |= 294012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 294112027Sjungma@eit.uni-kl.de 294212027Sjungma@eit.uni-kl.de// Cases to consider when computing u | v: 294312027Sjungma@eit.uni-kl.de// 1. u | 0 = u 294412027Sjungma@eit.uni-kl.de// 2. 0 | v = v 294512027Sjungma@eit.uni-kl.de// 3. u | v => sgn = + 294612027Sjungma@eit.uni-kl.de// 4. (-u) | (-v) => sgn = - 294712027Sjungma@eit.uni-kl.de// 5. u | (-v) => sgn = - 294812027Sjungma@eit.uni-kl.de// 6. (-u) | v => sgn = - 294912027Sjungma@eit.uni-kl.de 295012027Sjungma@eit.uni-kl.desc_signed 295112027Sjungma@eit.uni-kl.deoperator|(const sc_unsigned& u, const sc_signed& v) 295212027Sjungma@eit.uni-kl.de{ 295312027Sjungma@eit.uni-kl.de 295412027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 295512027Sjungma@eit.uni-kl.de return sc_signed(u); 295612027Sjungma@eit.uni-kl.de 295712027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 295812027Sjungma@eit.uni-kl.de return sc_signed(v); 295912027Sjungma@eit.uni-kl.de 296012027Sjungma@eit.uni-kl.de // other cases 296112027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 296212027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 296312027Sjungma@eit.uni-kl.de 296412027Sjungma@eit.uni-kl.de} 296512027Sjungma@eit.uni-kl.de 296612027Sjungma@eit.uni-kl.de 296712027Sjungma@eit.uni-kl.desc_signed 296812027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, const sc_unsigned& v) 296912027Sjungma@eit.uni-kl.de{ 297012027Sjungma@eit.uni-kl.de 297112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 297212027Sjungma@eit.uni-kl.de return sc_signed(u); 297312027Sjungma@eit.uni-kl.de 297412027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 297512027Sjungma@eit.uni-kl.de return sc_signed(v); 297612027Sjungma@eit.uni-kl.de 297712027Sjungma@eit.uni-kl.de // other cases 297812027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 297912027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 298012027Sjungma@eit.uni-kl.de 298112027Sjungma@eit.uni-kl.de} 298212027Sjungma@eit.uni-kl.de 298312027Sjungma@eit.uni-kl.de 298412027Sjungma@eit.uni-kl.desc_signed 298512027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, const sc_signed& v) 298612027Sjungma@eit.uni-kl.de{ 298712027Sjungma@eit.uni-kl.de 298812027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 298912027Sjungma@eit.uni-kl.de return sc_signed(u); 299012027Sjungma@eit.uni-kl.de 299112027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 299212027Sjungma@eit.uni-kl.de return sc_signed(v); 299312027Sjungma@eit.uni-kl.de 299412027Sjungma@eit.uni-kl.de // other cases 299512027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 299612027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 299712027Sjungma@eit.uni-kl.de 299812027Sjungma@eit.uni-kl.de} 299912027Sjungma@eit.uni-kl.de 300012027Sjungma@eit.uni-kl.de 300112027Sjungma@eit.uni-kl.desc_signed 300212027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, int64 v) 300312027Sjungma@eit.uni-kl.de{ 300412027Sjungma@eit.uni-kl.de 300512027Sjungma@eit.uni-kl.de if (v == 0) // case 1 300612027Sjungma@eit.uni-kl.de return sc_signed(u); 300712027Sjungma@eit.uni-kl.de 300812027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 300912027Sjungma@eit.uni-kl.de 301012027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 301112027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 301212027Sjungma@eit.uni-kl.de 301312027Sjungma@eit.uni-kl.de // other cases 301412027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 301512027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 301612027Sjungma@eit.uni-kl.de 301712027Sjungma@eit.uni-kl.de} 301812027Sjungma@eit.uni-kl.de 301912027Sjungma@eit.uni-kl.de 302012027Sjungma@eit.uni-kl.desc_signed 302112027Sjungma@eit.uni-kl.deoperator|(int64 u, const sc_signed& v) 302212027Sjungma@eit.uni-kl.de{ 302312027Sjungma@eit.uni-kl.de 302412027Sjungma@eit.uni-kl.de if (u == 0) 302512027Sjungma@eit.uni-kl.de return sc_signed(v); 302612027Sjungma@eit.uni-kl.de 302712027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 302812027Sjungma@eit.uni-kl.de 302912027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 303012027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 303112027Sjungma@eit.uni-kl.de 303212027Sjungma@eit.uni-kl.de // other cases 303312027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 303412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 303512027Sjungma@eit.uni-kl.de 303612027Sjungma@eit.uni-kl.de} 303712027Sjungma@eit.uni-kl.de 303812027Sjungma@eit.uni-kl.de 303912027Sjungma@eit.uni-kl.desc_signed 304012027Sjungma@eit.uni-kl.deoperator|(const sc_unsigned& u, int64 v) 304112027Sjungma@eit.uni-kl.de{ 304212027Sjungma@eit.uni-kl.de 304312027Sjungma@eit.uni-kl.de if (v == 0) // case 1 304412027Sjungma@eit.uni-kl.de return sc_signed(u); 304512027Sjungma@eit.uni-kl.de 304612027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 304712027Sjungma@eit.uni-kl.de 304812027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 304912027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 305012027Sjungma@eit.uni-kl.de 305112027Sjungma@eit.uni-kl.de // other cases 305212027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 305312027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 305412027Sjungma@eit.uni-kl.de 305512027Sjungma@eit.uni-kl.de} 305612027Sjungma@eit.uni-kl.de 305712027Sjungma@eit.uni-kl.de 305812027Sjungma@eit.uni-kl.desc_signed 305912027Sjungma@eit.uni-kl.deoperator|(int64 u, const sc_unsigned& v) 306012027Sjungma@eit.uni-kl.de{ 306112027Sjungma@eit.uni-kl.de 306212027Sjungma@eit.uni-kl.de if (u == 0) 306312027Sjungma@eit.uni-kl.de return sc_signed(v); 306412027Sjungma@eit.uni-kl.de 306512027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 306612027Sjungma@eit.uni-kl.de 306712027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 306812027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 306912027Sjungma@eit.uni-kl.de 307012027Sjungma@eit.uni-kl.de // other cases 307112027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 307212027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 307312027Sjungma@eit.uni-kl.de 307412027Sjungma@eit.uni-kl.de} 307512027Sjungma@eit.uni-kl.de 307612027Sjungma@eit.uni-kl.de 307712027Sjungma@eit.uni-kl.desc_signed 307812027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, uint64 v) 307912027Sjungma@eit.uni-kl.de{ 308012027Sjungma@eit.uni-kl.de 308112027Sjungma@eit.uni-kl.de if (v == 0) // case 1 308212027Sjungma@eit.uni-kl.de return sc_signed(u); 308312027Sjungma@eit.uni-kl.de 308412027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 308512027Sjungma@eit.uni-kl.de 308612027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 308712027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 308812027Sjungma@eit.uni-kl.de 308912027Sjungma@eit.uni-kl.de // other cases 309012027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 309112027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 309212027Sjungma@eit.uni-kl.de 309312027Sjungma@eit.uni-kl.de} 309412027Sjungma@eit.uni-kl.de 309512027Sjungma@eit.uni-kl.de 309612027Sjungma@eit.uni-kl.desc_signed 309712027Sjungma@eit.uni-kl.deoperator|(uint64 u, const sc_signed& v) 309812027Sjungma@eit.uni-kl.de{ 309912027Sjungma@eit.uni-kl.de 310012027Sjungma@eit.uni-kl.de if (u == 0) 310112027Sjungma@eit.uni-kl.de return sc_signed(v); 310212027Sjungma@eit.uni-kl.de 310312027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 310412027Sjungma@eit.uni-kl.de 310512027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 310612027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 310712027Sjungma@eit.uni-kl.de 310812027Sjungma@eit.uni-kl.de // other cases 310912027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 311012027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 311112027Sjungma@eit.uni-kl.de 311212027Sjungma@eit.uni-kl.de} 311312027Sjungma@eit.uni-kl.de 311412027Sjungma@eit.uni-kl.de 311512027Sjungma@eit.uni-kl.desc_signed 311612027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, long v) 311712027Sjungma@eit.uni-kl.de{ 311812027Sjungma@eit.uni-kl.de 311912027Sjungma@eit.uni-kl.de if (v == 0) // case 1 312012027Sjungma@eit.uni-kl.de return sc_signed(u); 312112027Sjungma@eit.uni-kl.de 312212027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 312312027Sjungma@eit.uni-kl.de 312412027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 312512027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 312612027Sjungma@eit.uni-kl.de 312712027Sjungma@eit.uni-kl.de // other cases 312812027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 312912027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 313012027Sjungma@eit.uni-kl.de 313112027Sjungma@eit.uni-kl.de} 313212027Sjungma@eit.uni-kl.de 313312027Sjungma@eit.uni-kl.de 313412027Sjungma@eit.uni-kl.desc_signed 313512027Sjungma@eit.uni-kl.deoperator|(long u, const sc_signed& v) 313612027Sjungma@eit.uni-kl.de{ 313712027Sjungma@eit.uni-kl.de 313812027Sjungma@eit.uni-kl.de if (u == 0) 313912027Sjungma@eit.uni-kl.de return sc_signed(v); 314012027Sjungma@eit.uni-kl.de 314112027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 314212027Sjungma@eit.uni-kl.de 314312027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 314412027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 314512027Sjungma@eit.uni-kl.de 314612027Sjungma@eit.uni-kl.de // other cases 314712027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 314812027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 314912027Sjungma@eit.uni-kl.de 315012027Sjungma@eit.uni-kl.de} 315112027Sjungma@eit.uni-kl.de 315212027Sjungma@eit.uni-kl.de 315312027Sjungma@eit.uni-kl.desc_signed 315412027Sjungma@eit.uni-kl.deoperator|(const sc_unsigned& u, long v) 315512027Sjungma@eit.uni-kl.de{ 315612027Sjungma@eit.uni-kl.de 315712027Sjungma@eit.uni-kl.de if (v == 0) // case 1 315812027Sjungma@eit.uni-kl.de return sc_signed(u); 315912027Sjungma@eit.uni-kl.de 316012027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 316112027Sjungma@eit.uni-kl.de 316212027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 316312027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 316412027Sjungma@eit.uni-kl.de 316512027Sjungma@eit.uni-kl.de // other cases 316612027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 316712027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 316812027Sjungma@eit.uni-kl.de 316912027Sjungma@eit.uni-kl.de} 317012027Sjungma@eit.uni-kl.de 317112027Sjungma@eit.uni-kl.de 317212027Sjungma@eit.uni-kl.desc_signed 317312027Sjungma@eit.uni-kl.deoperator|(long u, const sc_unsigned& v) 317412027Sjungma@eit.uni-kl.de{ 317512027Sjungma@eit.uni-kl.de 317612027Sjungma@eit.uni-kl.de if (u == 0) 317712027Sjungma@eit.uni-kl.de return sc_signed(v); 317812027Sjungma@eit.uni-kl.de 317912027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 318012027Sjungma@eit.uni-kl.de 318112027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 318212027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 318312027Sjungma@eit.uni-kl.de 318412027Sjungma@eit.uni-kl.de // other cases 318512027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 318612027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 318712027Sjungma@eit.uni-kl.de 318812027Sjungma@eit.uni-kl.de} 318912027Sjungma@eit.uni-kl.de 319012027Sjungma@eit.uni-kl.de 319112027Sjungma@eit.uni-kl.desc_signed 319212027Sjungma@eit.uni-kl.deoperator|(const sc_signed& u, unsigned long v) 319312027Sjungma@eit.uni-kl.de{ 319412027Sjungma@eit.uni-kl.de 319512027Sjungma@eit.uni-kl.de if (v == 0) // case 1 319612027Sjungma@eit.uni-kl.de return sc_signed(u); 319712027Sjungma@eit.uni-kl.de 319812027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 319912027Sjungma@eit.uni-kl.de 320012027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 320112027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 320212027Sjungma@eit.uni-kl.de 320312027Sjungma@eit.uni-kl.de // other cases 320412027Sjungma@eit.uni-kl.de return or_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 320512027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 320612027Sjungma@eit.uni-kl.de 320712027Sjungma@eit.uni-kl.de} 320812027Sjungma@eit.uni-kl.de 320912027Sjungma@eit.uni-kl.de 321012027Sjungma@eit.uni-kl.desc_signed 321112027Sjungma@eit.uni-kl.deoperator|(unsigned long u, const sc_signed& v) 321212027Sjungma@eit.uni-kl.de{ 321312027Sjungma@eit.uni-kl.de 321412027Sjungma@eit.uni-kl.de if (u == 0) 321512027Sjungma@eit.uni-kl.de return sc_signed(v); 321612027Sjungma@eit.uni-kl.de 321712027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 321812027Sjungma@eit.uni-kl.de 321912027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 322012027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 322112027Sjungma@eit.uni-kl.de 322212027Sjungma@eit.uni-kl.de // other cases 322312027Sjungma@eit.uni-kl.de return or_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 322412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 322512027Sjungma@eit.uni-kl.de 322612027Sjungma@eit.uni-kl.de} 322712027Sjungma@eit.uni-kl.de 322812027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 322912027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 323012027Sjungma@eit.uni-kl.de 323112027Sjungma@eit.uni-kl.de 323212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 323312027Sjungma@eit.uni-kl.de// SECTION: Bitwise XOR operators: ^, ^= 323412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 323512027Sjungma@eit.uni-kl.de 323612027Sjungma@eit.uni-kl.de// Cases to consider when computing u ^ v: 323712027Sjungma@eit.uni-kl.de// Note that u ^ v = (~u & v) | (u & ~v). 323812027Sjungma@eit.uni-kl.de// 1. u ^ 0 = u 323912027Sjungma@eit.uni-kl.de// 2. 0 ^ v = v 324012027Sjungma@eit.uni-kl.de// 3. u ^ v => sgn = + 324112027Sjungma@eit.uni-kl.de// 4. (-u) ^ (-v) => sgn = - 324212027Sjungma@eit.uni-kl.de// 5. u ^ (-v) => sgn = - 324312027Sjungma@eit.uni-kl.de// 6. (-u) ^ v => sgn = + 324412027Sjungma@eit.uni-kl.de 324512027Sjungma@eit.uni-kl.desc_signed 324612027Sjungma@eit.uni-kl.deoperator^(const sc_unsigned& u, const sc_signed& v) 324712027Sjungma@eit.uni-kl.de{ 324812027Sjungma@eit.uni-kl.de 324912027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 325012027Sjungma@eit.uni-kl.de return sc_signed(u); 325112027Sjungma@eit.uni-kl.de 325212027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 325312027Sjungma@eit.uni-kl.de return sc_signed(v); 325412027Sjungma@eit.uni-kl.de 325512027Sjungma@eit.uni-kl.de // other cases 325612027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 325712027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 325812027Sjungma@eit.uni-kl.de 325912027Sjungma@eit.uni-kl.de} 326012027Sjungma@eit.uni-kl.de 326112027Sjungma@eit.uni-kl.de 326212027Sjungma@eit.uni-kl.desc_signed 326312027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, const sc_unsigned& v) 326412027Sjungma@eit.uni-kl.de{ 326512027Sjungma@eit.uni-kl.de 326612027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 326712027Sjungma@eit.uni-kl.de return sc_signed(u); 326812027Sjungma@eit.uni-kl.de 326912027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 327012027Sjungma@eit.uni-kl.de return sc_signed(v); 327112027Sjungma@eit.uni-kl.de 327212027Sjungma@eit.uni-kl.de // other cases 327312027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 327412027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 327512027Sjungma@eit.uni-kl.de 327612027Sjungma@eit.uni-kl.de} 327712027Sjungma@eit.uni-kl.de 327812027Sjungma@eit.uni-kl.de 327912027Sjungma@eit.uni-kl.desc_signed 328012027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, const sc_signed& v) 328112027Sjungma@eit.uni-kl.de{ 328212027Sjungma@eit.uni-kl.de 328312027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) // case 1 328412027Sjungma@eit.uni-kl.de return sc_signed(u); 328512027Sjungma@eit.uni-kl.de 328612027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 328712027Sjungma@eit.uni-kl.de return sc_signed(v); 328812027Sjungma@eit.uni-kl.de 328912027Sjungma@eit.uni-kl.de // other cases 329012027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 329112027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 329212027Sjungma@eit.uni-kl.de 329312027Sjungma@eit.uni-kl.de} 329412027Sjungma@eit.uni-kl.de 329512027Sjungma@eit.uni-kl.de 329612027Sjungma@eit.uni-kl.desc_signed 329712027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, int64 v) 329812027Sjungma@eit.uni-kl.de{ 329912027Sjungma@eit.uni-kl.de 330012027Sjungma@eit.uni-kl.de if (v == 0) // case 1 330112027Sjungma@eit.uni-kl.de return sc_signed(u); 330212027Sjungma@eit.uni-kl.de 330312027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 330412027Sjungma@eit.uni-kl.de 330512027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 330612027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 330712027Sjungma@eit.uni-kl.de 330812027Sjungma@eit.uni-kl.de // other cases 330912027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 331012027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 331112027Sjungma@eit.uni-kl.de 331212027Sjungma@eit.uni-kl.de} 331312027Sjungma@eit.uni-kl.de 331412027Sjungma@eit.uni-kl.de 331512027Sjungma@eit.uni-kl.desc_signed 331612027Sjungma@eit.uni-kl.deoperator^(int64 u, const sc_signed& v) 331712027Sjungma@eit.uni-kl.de{ 331812027Sjungma@eit.uni-kl.de 331912027Sjungma@eit.uni-kl.de if (u == 0) 332012027Sjungma@eit.uni-kl.de return sc_signed(v); 332112027Sjungma@eit.uni-kl.de 332212027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 332312027Sjungma@eit.uni-kl.de 332412027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 332512027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 332612027Sjungma@eit.uni-kl.de 332712027Sjungma@eit.uni-kl.de // other cases 332812027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 332912027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 333012027Sjungma@eit.uni-kl.de 333112027Sjungma@eit.uni-kl.de} 333212027Sjungma@eit.uni-kl.de 333312027Sjungma@eit.uni-kl.de 333412027Sjungma@eit.uni-kl.desc_signed 333512027Sjungma@eit.uni-kl.deoperator^(const sc_unsigned& u, int64 v) 333612027Sjungma@eit.uni-kl.de{ 333712027Sjungma@eit.uni-kl.de 333812027Sjungma@eit.uni-kl.de if (v == 0) // case 1 333912027Sjungma@eit.uni-kl.de return sc_signed(u); 334012027Sjungma@eit.uni-kl.de 334112027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 334212027Sjungma@eit.uni-kl.de 334312027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 334412027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 334512027Sjungma@eit.uni-kl.de 334612027Sjungma@eit.uni-kl.de // other cases 334712027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 334812027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 334912027Sjungma@eit.uni-kl.de 335012027Sjungma@eit.uni-kl.de} 335112027Sjungma@eit.uni-kl.de 335212027Sjungma@eit.uni-kl.de 335312027Sjungma@eit.uni-kl.desc_signed 335412027Sjungma@eit.uni-kl.deoperator^(int64 u, const sc_unsigned& v) 335512027Sjungma@eit.uni-kl.de{ 335612027Sjungma@eit.uni-kl.de 335712027Sjungma@eit.uni-kl.de if (u == 0) 335812027Sjungma@eit.uni-kl.de return sc_signed(v); 335912027Sjungma@eit.uni-kl.de 336012027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 336112027Sjungma@eit.uni-kl.de 336212027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 336312027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 336412027Sjungma@eit.uni-kl.de 336512027Sjungma@eit.uni-kl.de // other cases 336612027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 336712027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 336812027Sjungma@eit.uni-kl.de 336912027Sjungma@eit.uni-kl.de} 337012027Sjungma@eit.uni-kl.de 337112027Sjungma@eit.uni-kl.de 337212027Sjungma@eit.uni-kl.desc_signed 337312027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, uint64 v) 337412027Sjungma@eit.uni-kl.de{ 337512027Sjungma@eit.uni-kl.de 337612027Sjungma@eit.uni-kl.de if (v == 0) // case 1 337712027Sjungma@eit.uni-kl.de return sc_signed(u); 337812027Sjungma@eit.uni-kl.de 337912027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 338012027Sjungma@eit.uni-kl.de 338112027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 338212027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd, false); 338312027Sjungma@eit.uni-kl.de 338412027Sjungma@eit.uni-kl.de // other cases 338512027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 338612027Sjungma@eit.uni-kl.de vs, BITS_PER_UINT64, DIGITS_PER_UINT64, vd); 338712027Sjungma@eit.uni-kl.de 338812027Sjungma@eit.uni-kl.de} 338912027Sjungma@eit.uni-kl.de 339012027Sjungma@eit.uni-kl.desc_signed 339112027Sjungma@eit.uni-kl.deoperator^(uint64 u, const sc_signed& v) 339212027Sjungma@eit.uni-kl.de{ 339312027Sjungma@eit.uni-kl.de if (u == 0) 339412027Sjungma@eit.uni-kl.de return sc_signed(v); 339512027Sjungma@eit.uni-kl.de 339612027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 339712027Sjungma@eit.uni-kl.de 339812027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 339912027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, false); 340012027Sjungma@eit.uni-kl.de 340112027Sjungma@eit.uni-kl.de // other cases 340212027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_UINT64, DIGITS_PER_UINT64, ud, 340312027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 340412027Sjungma@eit.uni-kl.de 340512027Sjungma@eit.uni-kl.de} 340612027Sjungma@eit.uni-kl.de 340712027Sjungma@eit.uni-kl.de 340812027Sjungma@eit.uni-kl.desc_signed 340912027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, long v) 341012027Sjungma@eit.uni-kl.de{ 341112027Sjungma@eit.uni-kl.de 341212027Sjungma@eit.uni-kl.de if (v == 0) // case 1 341312027Sjungma@eit.uni-kl.de return sc_signed(u); 341412027Sjungma@eit.uni-kl.de 341512027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 341612027Sjungma@eit.uni-kl.de 341712027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 341812027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 341912027Sjungma@eit.uni-kl.de 342012027Sjungma@eit.uni-kl.de // other cases 342112027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 342212027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 342312027Sjungma@eit.uni-kl.de 342412027Sjungma@eit.uni-kl.de} 342512027Sjungma@eit.uni-kl.de 342612027Sjungma@eit.uni-kl.de 342712027Sjungma@eit.uni-kl.desc_signed 342812027Sjungma@eit.uni-kl.deoperator^(long u, const sc_signed& v) 342912027Sjungma@eit.uni-kl.de{ 343012027Sjungma@eit.uni-kl.de 343112027Sjungma@eit.uni-kl.de if (u == 0) 343212027Sjungma@eit.uni-kl.de return sc_signed(v); 343312027Sjungma@eit.uni-kl.de 343412027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 343512027Sjungma@eit.uni-kl.de 343612027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 343712027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 343812027Sjungma@eit.uni-kl.de 343912027Sjungma@eit.uni-kl.de // other cases 344012027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 344112027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 344212027Sjungma@eit.uni-kl.de 344312027Sjungma@eit.uni-kl.de} 344412027Sjungma@eit.uni-kl.de 344512027Sjungma@eit.uni-kl.de 344612027Sjungma@eit.uni-kl.desc_signed 344712027Sjungma@eit.uni-kl.deoperator^(const sc_unsigned& u, long v) 344812027Sjungma@eit.uni-kl.de{ 344912027Sjungma@eit.uni-kl.de 345012027Sjungma@eit.uni-kl.de if (v == 0) // case 1 345112027Sjungma@eit.uni-kl.de return sc_signed(u); 345212027Sjungma@eit.uni-kl.de 345312027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 345412027Sjungma@eit.uni-kl.de 345512027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 345612027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 345712027Sjungma@eit.uni-kl.de 345812027Sjungma@eit.uni-kl.de // other cases 345912027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 346012027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 346112027Sjungma@eit.uni-kl.de 346212027Sjungma@eit.uni-kl.de} 346312027Sjungma@eit.uni-kl.de 346412027Sjungma@eit.uni-kl.de 346512027Sjungma@eit.uni-kl.desc_signed 346612027Sjungma@eit.uni-kl.deoperator^(long u, const sc_unsigned& v) 346712027Sjungma@eit.uni-kl.de{ 346812027Sjungma@eit.uni-kl.de 346912027Sjungma@eit.uni-kl.de if (u == 0) 347012027Sjungma@eit.uni-kl.de return sc_signed(v); 347112027Sjungma@eit.uni-kl.de 347212027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 347312027Sjungma@eit.uni-kl.de 347412027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 347512027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 347612027Sjungma@eit.uni-kl.de 347712027Sjungma@eit.uni-kl.de // other cases 347812027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 347912027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 348012027Sjungma@eit.uni-kl.de 348112027Sjungma@eit.uni-kl.de} 348212027Sjungma@eit.uni-kl.de 348312027Sjungma@eit.uni-kl.de 348412027Sjungma@eit.uni-kl.desc_signed 348512027Sjungma@eit.uni-kl.deoperator^(const sc_signed& u, unsigned long v) 348612027Sjungma@eit.uni-kl.de{ 348712027Sjungma@eit.uni-kl.de 348812027Sjungma@eit.uni-kl.de if (v == 0) // case 1 348912027Sjungma@eit.uni-kl.de return sc_signed(u); 349012027Sjungma@eit.uni-kl.de 349112027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 349212027Sjungma@eit.uni-kl.de 349312027Sjungma@eit.uni-kl.de if (u.sgn == SC_ZERO) // case 2 349412027Sjungma@eit.uni-kl.de return sc_signed(vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd, false); 349512027Sjungma@eit.uni-kl.de 349612027Sjungma@eit.uni-kl.de // other cases 349712027Sjungma@eit.uni-kl.de return xor_signed_friend(u.sgn, u.nbits, u.ndigits, u.digit, 349812027Sjungma@eit.uni-kl.de vs, BITS_PER_ULONG, DIGITS_PER_ULONG, vd); 349912027Sjungma@eit.uni-kl.de 350012027Sjungma@eit.uni-kl.de} 350112027Sjungma@eit.uni-kl.de 350212027Sjungma@eit.uni-kl.desc_signed 350312027Sjungma@eit.uni-kl.deoperator^(unsigned long u, const sc_signed& v) 350412027Sjungma@eit.uni-kl.de{ 350512027Sjungma@eit.uni-kl.de if (u == 0) 350612027Sjungma@eit.uni-kl.de return sc_signed(v); 350712027Sjungma@eit.uni-kl.de 350812027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 350912027Sjungma@eit.uni-kl.de 351012027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 351112027Sjungma@eit.uni-kl.de return sc_signed(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, false); 351212027Sjungma@eit.uni-kl.de 351312027Sjungma@eit.uni-kl.de // other cases 351412027Sjungma@eit.uni-kl.de return xor_signed_friend(us, BITS_PER_ULONG, DIGITS_PER_ULONG, ud, 351512027Sjungma@eit.uni-kl.de v.sgn, v.nbits, v.ndigits, v.digit); 351612027Sjungma@eit.uni-kl.de 351712027Sjungma@eit.uni-kl.de} 351812027Sjungma@eit.uni-kl.de 351912027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 352012027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 352112027Sjungma@eit.uni-kl.de 352212027Sjungma@eit.uni-kl.de 352312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 352412027Sjungma@eit.uni-kl.de// SECTION: Bitwise NOT operator: ~ 352512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 352612027Sjungma@eit.uni-kl.de 352712027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 352812027Sjungma@eit.uni-kl.de 352912027Sjungma@eit.uni-kl.de 353012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 353112027Sjungma@eit.uni-kl.de// SECTION: LEFT SHIFT operators: <<, <<= 353212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 353312027Sjungma@eit.uni-kl.de 353412027Sjungma@eit.uni-kl.desc_signed 353512027Sjungma@eit.uni-kl.deoperator<<(const sc_signed& u, const sc_unsigned& v) 353612027Sjungma@eit.uni-kl.de{ 353712027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 353812027Sjungma@eit.uni-kl.de return sc_signed(u); 353912027Sjungma@eit.uni-kl.de 354012027Sjungma@eit.uni-kl.de return operator<<(u, v.to_ulong()); 354112027Sjungma@eit.uni-kl.de} 354212027Sjungma@eit.uni-kl.de 354312027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 354412027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 354512027Sjungma@eit.uni-kl.de 354612027Sjungma@eit.uni-kl.de 354712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 354812027Sjungma@eit.uni-kl.de// SECTION: RIGHT SHIFT operators: >>, >>= 354912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 355012027Sjungma@eit.uni-kl.de 355112027Sjungma@eit.uni-kl.desc_signed 355212027Sjungma@eit.uni-kl.deoperator>>(const sc_signed& u, const sc_unsigned& v) 355312027Sjungma@eit.uni-kl.de{ 355412027Sjungma@eit.uni-kl.de 355512027Sjungma@eit.uni-kl.de if (v.sgn == SC_ZERO) 355612027Sjungma@eit.uni-kl.de return sc_signed(u); 355712027Sjungma@eit.uni-kl.de 355812027Sjungma@eit.uni-kl.de return operator>>(u, v.to_ulong()); 355912027Sjungma@eit.uni-kl.de 356012027Sjungma@eit.uni-kl.de} 356112027Sjungma@eit.uni-kl.de 356212027Sjungma@eit.uni-kl.de// The rest of the operators in this section are included from 356312027Sjungma@eit.uni-kl.de// sc_nbcommon.cpp. 356412027Sjungma@eit.uni-kl.de 356512027Sjungma@eit.uni-kl.de 356612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 356712027Sjungma@eit.uni-kl.de// SECTION: Unary arithmetic operators. 356812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 356912027Sjungma@eit.uni-kl.de 357012027Sjungma@eit.uni-kl.desc_signed 357112027Sjungma@eit.uni-kl.deoperator+(const sc_signed& u) 357212027Sjungma@eit.uni-kl.de{ 357312027Sjungma@eit.uni-kl.de return sc_signed(u); 357412027Sjungma@eit.uni-kl.de} 357512027Sjungma@eit.uni-kl.de 357612027Sjungma@eit.uni-kl.desc_signed 357712027Sjungma@eit.uni-kl.deoperator-(const sc_signed& u) 357812027Sjungma@eit.uni-kl.de{ 357912027Sjungma@eit.uni-kl.de return sc_signed(u, -u.sgn); 358012027Sjungma@eit.uni-kl.de} 358112027Sjungma@eit.uni-kl.de 358212027Sjungma@eit.uni-kl.desc_signed 358312027Sjungma@eit.uni-kl.deoperator-(const sc_unsigned& u) 358412027Sjungma@eit.uni-kl.de{ 358512027Sjungma@eit.uni-kl.de return sc_signed(u, -u.sgn); 358612027Sjungma@eit.uni-kl.de} 358712027Sjungma@eit.uni-kl.de 358812027Sjungma@eit.uni-kl.de 358912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 359012027Sjungma@eit.uni-kl.de// SECTION: EQUAL operator: == 359112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 359212027Sjungma@eit.uni-kl.de 359312027Sjungma@eit.uni-kl.debool 359412027Sjungma@eit.uni-kl.deoperator==(const sc_signed& u, const sc_signed& v) 359512027Sjungma@eit.uni-kl.de{ 359612027Sjungma@eit.uni-kl.de 359712027Sjungma@eit.uni-kl.de if (u.sgn != v.sgn) 359812027Sjungma@eit.uni-kl.de return false; 359912027Sjungma@eit.uni-kl.de 360012027Sjungma@eit.uni-kl.de if (&u == &v) 360112027Sjungma@eit.uni-kl.de return true; 360212027Sjungma@eit.uni-kl.de 360312027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) != 0) 360412027Sjungma@eit.uni-kl.de return false; 360512027Sjungma@eit.uni-kl.de 360612027Sjungma@eit.uni-kl.de return true; 360712027Sjungma@eit.uni-kl.de 360812027Sjungma@eit.uni-kl.de} 360912027Sjungma@eit.uni-kl.de 361012027Sjungma@eit.uni-kl.de 361112027Sjungma@eit.uni-kl.debool 361212027Sjungma@eit.uni-kl.deoperator==(const sc_signed& u, int64 v) 361312027Sjungma@eit.uni-kl.de{ 361412027Sjungma@eit.uni-kl.de 361512027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 361612027Sjungma@eit.uni-kl.de 361712027Sjungma@eit.uni-kl.de if (u.sgn != vs) 361812027Sjungma@eit.uni-kl.de return false; 361912027Sjungma@eit.uni-kl.de 362012027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) != 0) 362112027Sjungma@eit.uni-kl.de return false; 362212027Sjungma@eit.uni-kl.de 362312027Sjungma@eit.uni-kl.de return true; 362412027Sjungma@eit.uni-kl.de 362512027Sjungma@eit.uni-kl.de} 362612027Sjungma@eit.uni-kl.de 362712027Sjungma@eit.uni-kl.de 362812027Sjungma@eit.uni-kl.debool 362912027Sjungma@eit.uni-kl.deoperator==(int64 u, const sc_signed& v) 363012027Sjungma@eit.uni-kl.de{ 363112027Sjungma@eit.uni-kl.de 363212027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 363312027Sjungma@eit.uni-kl.de 363412027Sjungma@eit.uni-kl.de if (us != v.sgn) 363512027Sjungma@eit.uni-kl.de return false; 363612027Sjungma@eit.uni-kl.de 363712027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) != 0) 363812027Sjungma@eit.uni-kl.de return false; 363912027Sjungma@eit.uni-kl.de 364012027Sjungma@eit.uni-kl.de return true; 364112027Sjungma@eit.uni-kl.de 364212027Sjungma@eit.uni-kl.de} 364312027Sjungma@eit.uni-kl.de 364412027Sjungma@eit.uni-kl.de 364512027Sjungma@eit.uni-kl.debool 364612027Sjungma@eit.uni-kl.deoperator==(const sc_signed& u, uint64 v) 364712027Sjungma@eit.uni-kl.de{ 364812027Sjungma@eit.uni-kl.de 364912027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 365012027Sjungma@eit.uni-kl.de 365112027Sjungma@eit.uni-kl.de if (u.sgn != vs) 365212027Sjungma@eit.uni-kl.de return false; 365312027Sjungma@eit.uni-kl.de 365412027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) != 0) 365512027Sjungma@eit.uni-kl.de return false; 365612027Sjungma@eit.uni-kl.de 365712027Sjungma@eit.uni-kl.de return true; 365812027Sjungma@eit.uni-kl.de 365912027Sjungma@eit.uni-kl.de} 366012027Sjungma@eit.uni-kl.de 366112027Sjungma@eit.uni-kl.de 366212027Sjungma@eit.uni-kl.debool 366312027Sjungma@eit.uni-kl.deoperator==(uint64 u, const sc_signed& v) 366412027Sjungma@eit.uni-kl.de{ 366512027Sjungma@eit.uni-kl.de 366612027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 366712027Sjungma@eit.uni-kl.de 366812027Sjungma@eit.uni-kl.de if (us != v.sgn) 366912027Sjungma@eit.uni-kl.de return false; 367012027Sjungma@eit.uni-kl.de 367112027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) != 0) 367212027Sjungma@eit.uni-kl.de return false; 367312027Sjungma@eit.uni-kl.de 367412027Sjungma@eit.uni-kl.de return true; 367512027Sjungma@eit.uni-kl.de 367612027Sjungma@eit.uni-kl.de} 367712027Sjungma@eit.uni-kl.de 367812027Sjungma@eit.uni-kl.de 367912027Sjungma@eit.uni-kl.debool 368012027Sjungma@eit.uni-kl.deoperator==(const sc_signed& u, long v) 368112027Sjungma@eit.uni-kl.de{ 368212027Sjungma@eit.uni-kl.de 368312027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 368412027Sjungma@eit.uni-kl.de 368512027Sjungma@eit.uni-kl.de if (u.sgn != vs) 368612027Sjungma@eit.uni-kl.de return false; 368712027Sjungma@eit.uni-kl.de 368812027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) != 0) 368912027Sjungma@eit.uni-kl.de return false; 369012027Sjungma@eit.uni-kl.de 369112027Sjungma@eit.uni-kl.de return true; 369212027Sjungma@eit.uni-kl.de 369312027Sjungma@eit.uni-kl.de} 369412027Sjungma@eit.uni-kl.de 369512027Sjungma@eit.uni-kl.de 369612027Sjungma@eit.uni-kl.debool 369712027Sjungma@eit.uni-kl.deoperator==(long u, const sc_signed& v) 369812027Sjungma@eit.uni-kl.de{ 369912027Sjungma@eit.uni-kl.de 370012027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 370112027Sjungma@eit.uni-kl.de 370212027Sjungma@eit.uni-kl.de if (us != v.sgn) 370312027Sjungma@eit.uni-kl.de return false; 370412027Sjungma@eit.uni-kl.de 370512027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) != 0) 370612027Sjungma@eit.uni-kl.de return false; 370712027Sjungma@eit.uni-kl.de 370812027Sjungma@eit.uni-kl.de return true; 370912027Sjungma@eit.uni-kl.de 371012027Sjungma@eit.uni-kl.de} 371112027Sjungma@eit.uni-kl.de 371212027Sjungma@eit.uni-kl.de 371312027Sjungma@eit.uni-kl.debool 371412027Sjungma@eit.uni-kl.deoperator==(const sc_signed& u, unsigned long v) 371512027Sjungma@eit.uni-kl.de{ 371612027Sjungma@eit.uni-kl.de 371712027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 371812027Sjungma@eit.uni-kl.de 371912027Sjungma@eit.uni-kl.de if (u.sgn != vs) 372012027Sjungma@eit.uni-kl.de return false; 372112027Sjungma@eit.uni-kl.de 372212027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) != 0) 372312027Sjungma@eit.uni-kl.de return false; 372412027Sjungma@eit.uni-kl.de 372512027Sjungma@eit.uni-kl.de return true; 372612027Sjungma@eit.uni-kl.de 372712027Sjungma@eit.uni-kl.de} 372812027Sjungma@eit.uni-kl.de 372912027Sjungma@eit.uni-kl.de 373012027Sjungma@eit.uni-kl.debool 373112027Sjungma@eit.uni-kl.deoperator==(unsigned long u, const sc_signed& v) 373212027Sjungma@eit.uni-kl.de{ 373312027Sjungma@eit.uni-kl.de 373412027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 373512027Sjungma@eit.uni-kl.de 373612027Sjungma@eit.uni-kl.de if (us != v.sgn) 373712027Sjungma@eit.uni-kl.de return false; 373812027Sjungma@eit.uni-kl.de 373912027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) != 0) 374012027Sjungma@eit.uni-kl.de return false; 374112027Sjungma@eit.uni-kl.de 374212027Sjungma@eit.uni-kl.de return true; 374312027Sjungma@eit.uni-kl.de 374412027Sjungma@eit.uni-kl.de} 374512027Sjungma@eit.uni-kl.de 374612027Sjungma@eit.uni-kl.de 374712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 374812027Sjungma@eit.uni-kl.de// SECTION: NOT_EQUAL operator: != 374912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 375012027Sjungma@eit.uni-kl.de 375112027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 375212027Sjungma@eit.uni-kl.de 375312027Sjungma@eit.uni-kl.de 375412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 375512027Sjungma@eit.uni-kl.de// SECTION: LESS THAN operator: < 375612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 375712027Sjungma@eit.uni-kl.de 375812027Sjungma@eit.uni-kl.debool 375912027Sjungma@eit.uni-kl.deoperator<(const sc_signed& u, const sc_signed& v) 376012027Sjungma@eit.uni-kl.de{ 376112027Sjungma@eit.uni-kl.de 376212027Sjungma@eit.uni-kl.de if (u.sgn < v.sgn) 376312027Sjungma@eit.uni-kl.de return true; 376412027Sjungma@eit.uni-kl.de 376512027Sjungma@eit.uni-kl.de if (u.sgn > v.sgn) 376612027Sjungma@eit.uni-kl.de return false; 376712027Sjungma@eit.uni-kl.de 376812027Sjungma@eit.uni-kl.de // u.sgn == v.sgn 376912027Sjungma@eit.uni-kl.de 377012027Sjungma@eit.uni-kl.de if (&u == &v) 377112027Sjungma@eit.uni-kl.de return false; 377212027Sjungma@eit.uni-kl.de 377312027Sjungma@eit.uni-kl.de if (u.sgn == SC_POS) { 377412027Sjungma@eit.uni-kl.de 377512027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) < 0) 377612027Sjungma@eit.uni-kl.de return true; 377712027Sjungma@eit.uni-kl.de 377812027Sjungma@eit.uni-kl.de } 377912027Sjungma@eit.uni-kl.de else if (u.sgn == SC_NEG) { 378012027Sjungma@eit.uni-kl.de 378112027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, v.ndigits, v.digit) > 0) 378212027Sjungma@eit.uni-kl.de return true; 378312027Sjungma@eit.uni-kl.de 378412027Sjungma@eit.uni-kl.de } 378512027Sjungma@eit.uni-kl.de 378612027Sjungma@eit.uni-kl.de return false; 378712027Sjungma@eit.uni-kl.de 378812027Sjungma@eit.uni-kl.de} 378912027Sjungma@eit.uni-kl.de 379012027Sjungma@eit.uni-kl.de 379112027Sjungma@eit.uni-kl.debool 379212027Sjungma@eit.uni-kl.deoperator<(const sc_signed& u, int64 v) 379312027Sjungma@eit.uni-kl.de{ 379412027Sjungma@eit.uni-kl.de 379512027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 379612027Sjungma@eit.uni-kl.de 379712027Sjungma@eit.uni-kl.de if (u.sgn < vs) 379812027Sjungma@eit.uni-kl.de return true; 379912027Sjungma@eit.uni-kl.de 380012027Sjungma@eit.uni-kl.de if (u.sgn > vs) 380112027Sjungma@eit.uni-kl.de return false; 380212027Sjungma@eit.uni-kl.de 380312027Sjungma@eit.uni-kl.de // u.sgn == vs 380412027Sjungma@eit.uni-kl.de 380512027Sjungma@eit.uni-kl.de if (vs == SC_POS) { 380612027Sjungma@eit.uni-kl.de 380712027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) < 0) 380812027Sjungma@eit.uni-kl.de return true; 380912027Sjungma@eit.uni-kl.de 381012027Sjungma@eit.uni-kl.de } 381112027Sjungma@eit.uni-kl.de else if (vs == SC_NEG) { 381212027Sjungma@eit.uni-kl.de 381312027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) > 0) 381412027Sjungma@eit.uni-kl.de return true; 381512027Sjungma@eit.uni-kl.de 381612027Sjungma@eit.uni-kl.de } 381712027Sjungma@eit.uni-kl.de 381812027Sjungma@eit.uni-kl.de return false; 381912027Sjungma@eit.uni-kl.de 382012027Sjungma@eit.uni-kl.de} 382112027Sjungma@eit.uni-kl.de 382212027Sjungma@eit.uni-kl.de 382312027Sjungma@eit.uni-kl.debool 382412027Sjungma@eit.uni-kl.deoperator<(int64 u, const sc_signed& v) 382512027Sjungma@eit.uni-kl.de{ 382612027Sjungma@eit.uni-kl.de 382712027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 382812027Sjungma@eit.uni-kl.de 382912027Sjungma@eit.uni-kl.de if (us < v.sgn) 383012027Sjungma@eit.uni-kl.de return true; 383112027Sjungma@eit.uni-kl.de 383212027Sjungma@eit.uni-kl.de if (us > v.sgn) 383312027Sjungma@eit.uni-kl.de return false; 383412027Sjungma@eit.uni-kl.de 383512027Sjungma@eit.uni-kl.de // us == v.sgn 383612027Sjungma@eit.uni-kl.de 383712027Sjungma@eit.uni-kl.de if (us == SC_POS) { 383812027Sjungma@eit.uni-kl.de 383912027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) < 0) 384012027Sjungma@eit.uni-kl.de return true; 384112027Sjungma@eit.uni-kl.de 384212027Sjungma@eit.uni-kl.de } 384312027Sjungma@eit.uni-kl.de else if (us == SC_NEG) { 384412027Sjungma@eit.uni-kl.de 384512027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) > 0) 384612027Sjungma@eit.uni-kl.de return true; 384712027Sjungma@eit.uni-kl.de 384812027Sjungma@eit.uni-kl.de } 384912027Sjungma@eit.uni-kl.de 385012027Sjungma@eit.uni-kl.de return false; 385112027Sjungma@eit.uni-kl.de 385212027Sjungma@eit.uni-kl.de} 385312027Sjungma@eit.uni-kl.de 385412027Sjungma@eit.uni-kl.de 385512027Sjungma@eit.uni-kl.debool 385612027Sjungma@eit.uni-kl.deoperator<(const sc_signed& u, uint64 v) 385712027Sjungma@eit.uni-kl.de{ 385812027Sjungma@eit.uni-kl.de 385912027Sjungma@eit.uni-kl.de CONVERT_INT64(v); 386012027Sjungma@eit.uni-kl.de 386112027Sjungma@eit.uni-kl.de if (u.sgn < vs) 386212027Sjungma@eit.uni-kl.de return true; 386312027Sjungma@eit.uni-kl.de 386412027Sjungma@eit.uni-kl.de if (u.sgn > vs) 386512027Sjungma@eit.uni-kl.de return false; 386612027Sjungma@eit.uni-kl.de 386712027Sjungma@eit.uni-kl.de // u.sgn == vs 386812027Sjungma@eit.uni-kl.de 386912027Sjungma@eit.uni-kl.de if (vs == SC_POS) { 387012027Sjungma@eit.uni-kl.de 387112027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_INT64, vd) < 0) 387212027Sjungma@eit.uni-kl.de return true; 387312027Sjungma@eit.uni-kl.de 387412027Sjungma@eit.uni-kl.de } 387512027Sjungma@eit.uni-kl.de 387612027Sjungma@eit.uni-kl.de return false; 387712027Sjungma@eit.uni-kl.de 387812027Sjungma@eit.uni-kl.de} 387912027Sjungma@eit.uni-kl.de 388012027Sjungma@eit.uni-kl.de 388112027Sjungma@eit.uni-kl.debool 388212027Sjungma@eit.uni-kl.deoperator<(uint64 u, const sc_signed& v) 388312027Sjungma@eit.uni-kl.de{ 388412027Sjungma@eit.uni-kl.de 388512027Sjungma@eit.uni-kl.de CONVERT_INT64(u); 388612027Sjungma@eit.uni-kl.de 388712027Sjungma@eit.uni-kl.de if (us < v.sgn) 388812027Sjungma@eit.uni-kl.de return true; 388912027Sjungma@eit.uni-kl.de 389012027Sjungma@eit.uni-kl.de if (us > v.sgn) 389112027Sjungma@eit.uni-kl.de return false; 389212027Sjungma@eit.uni-kl.de 389312027Sjungma@eit.uni-kl.de // us == v.sgn 389412027Sjungma@eit.uni-kl.de 389512027Sjungma@eit.uni-kl.de if (us == SC_POS) { 389612027Sjungma@eit.uni-kl.de 389712027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_INT64, ud, v.ndigits, v.digit) < 0) 389812027Sjungma@eit.uni-kl.de return true; 389912027Sjungma@eit.uni-kl.de 390012027Sjungma@eit.uni-kl.de } 390112027Sjungma@eit.uni-kl.de 390212027Sjungma@eit.uni-kl.de return false; 390312027Sjungma@eit.uni-kl.de 390412027Sjungma@eit.uni-kl.de} 390512027Sjungma@eit.uni-kl.de 390612027Sjungma@eit.uni-kl.de 390712027Sjungma@eit.uni-kl.debool 390812027Sjungma@eit.uni-kl.deoperator<(const sc_signed& u, long v) 390912027Sjungma@eit.uni-kl.de{ 391012027Sjungma@eit.uni-kl.de 391112027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 391212027Sjungma@eit.uni-kl.de 391312027Sjungma@eit.uni-kl.de if (u.sgn < vs) 391412027Sjungma@eit.uni-kl.de return true; 391512027Sjungma@eit.uni-kl.de 391612027Sjungma@eit.uni-kl.de if (u.sgn > vs) 391712027Sjungma@eit.uni-kl.de return false; 391812027Sjungma@eit.uni-kl.de 391912027Sjungma@eit.uni-kl.de // u.sgn == vs 392012027Sjungma@eit.uni-kl.de 392112027Sjungma@eit.uni-kl.de if (vs == SC_POS) { 392212027Sjungma@eit.uni-kl.de 392312027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) < 0) 392412027Sjungma@eit.uni-kl.de return true; 392512027Sjungma@eit.uni-kl.de 392612027Sjungma@eit.uni-kl.de } 392712027Sjungma@eit.uni-kl.de else if (vs == SC_NEG) { 392812027Sjungma@eit.uni-kl.de 392912027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) > 0) 393012027Sjungma@eit.uni-kl.de return true; 393112027Sjungma@eit.uni-kl.de 393212027Sjungma@eit.uni-kl.de } 393312027Sjungma@eit.uni-kl.de 393412027Sjungma@eit.uni-kl.de return false; 393512027Sjungma@eit.uni-kl.de 393612027Sjungma@eit.uni-kl.de} 393712027Sjungma@eit.uni-kl.de 393812027Sjungma@eit.uni-kl.de 393912027Sjungma@eit.uni-kl.debool 394012027Sjungma@eit.uni-kl.deoperator<(long u, const sc_signed& v) 394112027Sjungma@eit.uni-kl.de{ 394212027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 394312027Sjungma@eit.uni-kl.de 394412027Sjungma@eit.uni-kl.de if (us < v.sgn) 394512027Sjungma@eit.uni-kl.de return true; 394612027Sjungma@eit.uni-kl.de 394712027Sjungma@eit.uni-kl.de if (us > v.sgn) 394812027Sjungma@eit.uni-kl.de return false; 394912027Sjungma@eit.uni-kl.de 395012027Sjungma@eit.uni-kl.de // us == v.sgn 395112027Sjungma@eit.uni-kl.de 395212027Sjungma@eit.uni-kl.de if (us == SC_POS) { 395312027Sjungma@eit.uni-kl.de 395412027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) < 0) 395512027Sjungma@eit.uni-kl.de return true; 395612027Sjungma@eit.uni-kl.de 395712027Sjungma@eit.uni-kl.de } 395812027Sjungma@eit.uni-kl.de else if (us == SC_NEG) { 395912027Sjungma@eit.uni-kl.de 396012027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) > 0) 396112027Sjungma@eit.uni-kl.de return true; 396212027Sjungma@eit.uni-kl.de 396312027Sjungma@eit.uni-kl.de } 396412027Sjungma@eit.uni-kl.de 396512027Sjungma@eit.uni-kl.de return false; 396612027Sjungma@eit.uni-kl.de} 396712027Sjungma@eit.uni-kl.de 396812027Sjungma@eit.uni-kl.de 396912027Sjungma@eit.uni-kl.debool 397012027Sjungma@eit.uni-kl.deoperator<(const sc_signed& u, unsigned long v) 397112027Sjungma@eit.uni-kl.de{ 397212027Sjungma@eit.uni-kl.de CONVERT_LONG(v); 397312027Sjungma@eit.uni-kl.de 397412027Sjungma@eit.uni-kl.de if (u.sgn < vs) 397512027Sjungma@eit.uni-kl.de return true; 397612027Sjungma@eit.uni-kl.de 397712027Sjungma@eit.uni-kl.de if (u.sgn > vs) 397812027Sjungma@eit.uni-kl.de return false; 397912027Sjungma@eit.uni-kl.de 398012027Sjungma@eit.uni-kl.de // u.sgn == vs 398112027Sjungma@eit.uni-kl.de 398212027Sjungma@eit.uni-kl.de if (vs == SC_POS) { 398312027Sjungma@eit.uni-kl.de 398412027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(u.ndigits, u.digit, DIGITS_PER_LONG, vd) < 0) 398512027Sjungma@eit.uni-kl.de return true; 398612027Sjungma@eit.uni-kl.de 398712027Sjungma@eit.uni-kl.de } 398812027Sjungma@eit.uni-kl.de 398912027Sjungma@eit.uni-kl.de return false; 399012027Sjungma@eit.uni-kl.de} 399112027Sjungma@eit.uni-kl.de 399212027Sjungma@eit.uni-kl.de 399312027Sjungma@eit.uni-kl.debool 399412027Sjungma@eit.uni-kl.deoperator<(unsigned long u, const sc_signed& v) 399512027Sjungma@eit.uni-kl.de{ 399612027Sjungma@eit.uni-kl.de CONVERT_LONG(u); 399712027Sjungma@eit.uni-kl.de 399812027Sjungma@eit.uni-kl.de if (us < v.sgn) 399912027Sjungma@eit.uni-kl.de return true; 400012027Sjungma@eit.uni-kl.de 400112027Sjungma@eit.uni-kl.de if (us > v.sgn) 400212027Sjungma@eit.uni-kl.de return false; 400312027Sjungma@eit.uni-kl.de 400412027Sjungma@eit.uni-kl.de // us == v.sgn 400512027Sjungma@eit.uni-kl.de 400612027Sjungma@eit.uni-kl.de if (us == SC_POS) { 400712027Sjungma@eit.uni-kl.de 400812027Sjungma@eit.uni-kl.de if (vec_skip_and_cmp(DIGITS_PER_LONG, ud, v.ndigits, v.digit) < 0) 400912027Sjungma@eit.uni-kl.de return true; 401012027Sjungma@eit.uni-kl.de 401112027Sjungma@eit.uni-kl.de } 401212027Sjungma@eit.uni-kl.de 401312027Sjungma@eit.uni-kl.de return false; 401412027Sjungma@eit.uni-kl.de} 401512027Sjungma@eit.uni-kl.de 401612027Sjungma@eit.uni-kl.de 401712027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 401812027Sjungma@eit.uni-kl.de// SECTION: LESS THAN or EQUAL operator: <= 401912027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 402012027Sjungma@eit.uni-kl.de 402112027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 402212027Sjungma@eit.uni-kl.de 402312027Sjungma@eit.uni-kl.de 402412027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 402512027Sjungma@eit.uni-kl.de// SECTION: GREATER THAN operator: > 402612027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 402712027Sjungma@eit.uni-kl.de 402812027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 402912027Sjungma@eit.uni-kl.de 403012027Sjungma@eit.uni-kl.de 403112027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 403212027Sjungma@eit.uni-kl.de// SECTION: GREATER THAN or EQUAL operator: >= 403312027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 403412027Sjungma@eit.uni-kl.de 403512027Sjungma@eit.uni-kl.de// Operators in this section are included from sc_nbcommon.cpp. 403612027Sjungma@eit.uni-kl.de 403712027Sjungma@eit.uni-kl.de 403812027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 403912027Sjungma@eit.uni-kl.de// SECTION: Public members - Other utils. 404012027Sjungma@eit.uni-kl.de// --------------------------------------------------------------------------- 404112027Sjungma@eit.uni-kl.de 404212027Sjungma@eit.uni-kl.debool 404312027Sjungma@eit.uni-kl.desc_signed::iszero() const 404412027Sjungma@eit.uni-kl.de{ 404512027Sjungma@eit.uni-kl.de if (sgn == SC_ZERO) 404612027Sjungma@eit.uni-kl.de return true; 404712027Sjungma@eit.uni-kl.de else if (sgn != SC_NOSIGN) 404812027Sjungma@eit.uni-kl.de return false; 404912027Sjungma@eit.uni-kl.de else 405012027Sjungma@eit.uni-kl.de return check_for_zero(ndigits, digit); 405112027Sjungma@eit.uni-kl.de} 405212027Sjungma@eit.uni-kl.de 405312027Sjungma@eit.uni-kl.de 405412027Sjungma@eit.uni-kl.debool 405512027Sjungma@eit.uni-kl.desc_signed::sign() const 405612027Sjungma@eit.uni-kl.de{ 405712027Sjungma@eit.uni-kl.de if (sgn == SC_NEG) 405812027Sjungma@eit.uni-kl.de return 1; 405912027Sjungma@eit.uni-kl.de else if (sgn != SC_NOSIGN) 406012027Sjungma@eit.uni-kl.de return 0; 406112027Sjungma@eit.uni-kl.de else 406212027Sjungma@eit.uni-kl.de return ((digit[ndigits - 1] & one_and_zeros(bit_ord(nbits - 1))) != 0); 406312027Sjungma@eit.uni-kl.de} 406412027Sjungma@eit.uni-kl.de 406512027Sjungma@eit.uni-kl.de// The rest of the utils in this section are included from sc_nbcommon.cpp. 406612027Sjungma@eit.uni-kl.de 406712027Sjungma@eit.uni-kl.de 406812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 406912027Sjungma@eit.uni-kl.de// SECTION: Private members. 407012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 407112027Sjungma@eit.uni-kl.de 407212027Sjungma@eit.uni-kl.de// The private members in this section are included from sc_nbcommon.cpp. 407312027Sjungma@eit.uni-kl.de 407412027Sjungma@eit.uni-kl.de#define CLASS_TYPE sc_signed 407512027Sjungma@eit.uni-kl.de#define CLASS_TYPE_STR "sc_signed" 407612027Sjungma@eit.uni-kl.de 407712027Sjungma@eit.uni-kl.de#define ADD_HELPER add_signed_friend 407812027Sjungma@eit.uni-kl.de#define SUB_HELPER sub_signed_friend 407912027Sjungma@eit.uni-kl.de#define MUL_HELPER mul_signed_friend 408012027Sjungma@eit.uni-kl.de#define DIV_HELPER div_signed_friend 408112027Sjungma@eit.uni-kl.de#define MOD_HELPER mod_signed_friend 408212027Sjungma@eit.uni-kl.de#define AND_HELPER and_signed_friend 408312027Sjungma@eit.uni-kl.de#define OR_HELPER or_signed_friend 408412027Sjungma@eit.uni-kl.de#define XOR_HELPER xor_signed_friend 408512027Sjungma@eit.uni-kl.de 408612027Sjungma@eit.uni-kl.de#include "sc_nbfriends.inc" 408712027Sjungma@eit.uni-kl.de 408812027Sjungma@eit.uni-kl.de#undef SC_UNSIGNED 408912027Sjungma@eit.uni-kl.de#define SC_SIGNED 409012027Sjungma@eit.uni-kl.de#define IF_SC_SIGNED 1 // 1 = sc_signed 409112027Sjungma@eit.uni-kl.de#define CLASS_TYPE_SUBREF sc_signed_subref_r 409212027Sjungma@eit.uni-kl.de#define OTHER_CLASS_TYPE sc_unsigned 409312027Sjungma@eit.uni-kl.de#define OTHER_CLASS_TYPE_SUBREF sc_unsigned_subref_r 409412027Sjungma@eit.uni-kl.de 409512027Sjungma@eit.uni-kl.de#define MUL_ON_HELPER mul_on_help_signed 409612027Sjungma@eit.uni-kl.de#define DIV_ON_HELPER div_on_help_signed 409712027Sjungma@eit.uni-kl.de#define MOD_ON_HELPER mod_on_help_signed 409812027Sjungma@eit.uni-kl.de 409912027Sjungma@eit.uni-kl.de#include "sc_nbcommon.inc" 410012027Sjungma@eit.uni-kl.de 410112027Sjungma@eit.uni-kl.de#undef MOD_ON_HELPER 410212027Sjungma@eit.uni-kl.de#undef DIV_ON_HELPER 410312027Sjungma@eit.uni-kl.de#undef MUL_ON_HELPER 410412027Sjungma@eit.uni-kl.de 410512027Sjungma@eit.uni-kl.de#undef OTHER_CLASS_TYPE_SUBREF 410612027Sjungma@eit.uni-kl.de#undef OTHER_CLASS_TYPE 410712027Sjungma@eit.uni-kl.de#undef CLASS_TYPE_SUBREF 410812027Sjungma@eit.uni-kl.de#undef IF_SC_SIGNED 410912027Sjungma@eit.uni-kl.de#undef SC_SIGNED 411012027Sjungma@eit.uni-kl.de 411112027Sjungma@eit.uni-kl.de#undef XOR_HELPER 411212027Sjungma@eit.uni-kl.de#undef OR_HELPER 411312027Sjungma@eit.uni-kl.de#undef AND_HELPER 411412027Sjungma@eit.uni-kl.de#undef MOD_HELPER 411512027Sjungma@eit.uni-kl.de#undef DIV_HELPER 411612027Sjungma@eit.uni-kl.de#undef MUL_HELPER 411712027Sjungma@eit.uni-kl.de#undef SUB_HELPER 411812027Sjungma@eit.uni-kl.de#undef ADD_HELPER 411912027Sjungma@eit.uni-kl.de 412012027Sjungma@eit.uni-kl.de#undef CLASS_TYPE 412112027Sjungma@eit.uni-kl.de#undef CLASS_TYPE_STR 412212027Sjungma@eit.uni-kl.de 412312027Sjungma@eit.uni-kl.de#include "sc_signed_bitref.inc" 412412027Sjungma@eit.uni-kl.de#include "sc_signed_subref.inc" 412512027Sjungma@eit.uni-kl.de 412612027Sjungma@eit.uni-kl.de#undef CONVERT_LONG 412712027Sjungma@eit.uni-kl.de#undef CONVERT_LONG_2 412812027Sjungma@eit.uni-kl.de#undef CONVERT_INT64 412912027Sjungma@eit.uni-kl.de#undef CONVERT_INT64_2 413012027Sjungma@eit.uni-kl.de 413112027Sjungma@eit.uni-kl.de} // namespace sc_dt 413212027Sjungma@eit.uni-kl.de 413312027Sjungma@eit.uni-kl.de 413412027Sjungma@eit.uni-kl.de// End of file. 4135