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