X-Git-Url: https://ginac.de/CLN/cln.git//cln.git?a=blobdiff_plain;f=src%2Fbase%2Fcl_low.h;h=2aba0b0dd28daae78c5440d4c24e673356bf6af9;hb=1bf866178f2ccea16ae2f6cfc977279d42b17a00;hp=d146f2788f668db56b2db6c3f2754d45c67e207e;hpb=795eaad1187ec695cfbff001c89091c1da453334;p=cln.git diff --git a/src/base/cl_low.h b/src/base/cl_low.h index d146f27..2aba0b0 100644 --- a/src/base/cl_low.h +++ b/src/base/cl_low.h @@ -133,7 +133,7 @@ inline uint32 mulu16 (uint16 arg1, uint16 arg2) ); return _prod; } -#elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(NO_ASM) inline uint32 mulu16 (uint16 arg1, uint16 arg2) { register uint16 _hi; @@ -187,7 +187,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) ); return _prod; } -#elif defined(__sparc__) +#elif defined(__sparc__) && !defined(NO_ASM) extern "C" uint32 mulu32_unchecked (uint32 x, uint32 y); // extern in Assembler #else // Wir können dafür auch die Bibliotheksroutine des C-Compilers nehmen: @@ -244,7 +244,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) ); \ hi_zuweisung (uint32)_hi; lo_zuweisung (uint32)_lo; \ }) -#elif defined(__GNUC__) && defined(__sparc__) +#elif defined(__GNUC__) && defined(__sparc__) && !defined(NO_ASM) #define mulu32(x,y,hi_zuweisung,lo_zuweisung) \ ({ lo_zuweisung mulu32_(x,y); /* extern in Assembler */ \ {var register uint32 _hi __asm__("%g1"); \ @@ -256,7 +256,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) {var register uint32 _hi __asm__("%r1"/*"%a2"*/); \ hi_zuweisung _hi; \ }}) -#elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(NO_ASM) #define mulu32(x,y,hi_zuweisung,lo_zuweisung) \ ({ var register uint32 _hi; \ var register uint32 _lo; \ @@ -295,7 +295,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) #else #define mulu32(x,y,hi_zuweisung,lo_zuweisung) \ { lo_zuweisung mulu32_(x,y); hi_zuweisung mulu32_high; } - #if defined(__m68k__) || defined(__sparc__) || defined(__sparc64__) || defined(__arm__) || (defined(__i386__) && !defined(WATCOM) && !defined(MICROSOFT)) || defined(__mips__) || defined(__hppa__) + #if (defined(__m68k__) || defined(__sparc__) || defined(__sparc64__) || defined(__arm__) || (defined(__i386__) && !defined(WATCOM) && !defined(MICROSOFT)) || defined(__x86_64__) || defined(__mips__) || defined(__hppa__)) && !defined(NO_ASM) // mulu32_ extern in Assembler #if defined(__sparc__) || defined(__sparc64__) extern "C" uint32 _get_g1 (void); @@ -344,12 +344,22 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) hi_zuweisung _hi; \ lo_zuweisung _lo; \ }) -#elif defined(__GNUC__) && defined(__sparc64__) +#elif defined(__GNUC__) && defined(__sparc64__) && !defined(NO_ASM) #define mulu64(x,y,hi_zuweisung,lo_zuweisung) \ ({ lo_zuweisung mulu64_(x,y); /* extern in Assembler */ \ {var register uint64 _hi __asm__("%g2"); \ hi_zuweisung _hi; \ }}) +#elif defined(__GNUC__) && defined(__x86_64__) && !defined(NO_ASM) + #define mulu64(x,y,hi_zuweisung,lo_zuweisung) \ + ({ var register uint64 _hi; \ + var register uint64 _lo; \ + __asm__("mulq %2" \ + : "=d" /* %rdx */ (_hi), "=a" /* %rax */ (_lo) \ + : "g" ((uint64)(x)), "1" /* %rax */ ((uint64)(y)) \ + ); \ + hi_zuweisung _hi; lo_zuweisung _lo; \ + }) #else #define mulu64(x,y,hi_zuweisung,lo_zuweisung) \ { lo_zuweisung mulu64_(x,y); hi_zuweisung mulu64_high; } @@ -415,7 +425,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung (uint16)__q; \ r_zuweisung (uint16)__r; \ }) -#elif defined(__GNUC__) && (defined(__sparc__) || defined(__sparc64__)) +#elif defined(__GNUC__) && (defined(__sparc__) || defined(__sparc64__)) && !defined(NO_ASM) #define divu_3216_1616(x,y,q_zuweisung,r_zuweisung) \ ({ var uint32 __qr = divu_3216_1616_(x,y); /* extern in Assembler */\ q_zuweisung low16(__qr); \ @@ -432,7 +442,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung low16(__qr); \ r_zuweisung high16(__qr); \ }) -#elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(NO_ASM) #define divu_3216_1616(x,y,q_zuweisung,r_zuweisung) \ ({var uint32 __x = (x); \ var uint16 __y = (y); \ @@ -459,13 +469,13 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung __q; \ r_zuweisung (__x - __q * __y); \ }) -#elif defined(__sparc__) || defined(__sparc64__) +#elif (defined(__sparc__) || defined(__sparc64__)) && !defined(NO_ASM) #define divu_3216_1616(x,y,q_zuweisung,r_zuweisung) \ { var uint32 __qr = divu_3216_1616_(x,y); /* extern in Assembler */ \ q_zuweisung low16(__qr); \ r_zuweisung high16(__qr); \ } -#elif defined(__arm__) +#elif defined(__arm__) && !defined(NO_ASM) #define divu_3216_1616(x,y,q_zuweisung,r_zuweisung) \ { q_zuweisung divu_3216_1616_(x,y); /* extern in Assembler */ \ r_zuweisung divu_16_rest; \ @@ -504,7 +514,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung (uint32)__q; \ r_zuweisung (uint16)__r; \ }) -#elif defined(__sparc__) || defined(__sparc64__) || defined(__i386__) +#elif defined(__sparc__) || defined(__sparc64__) || defined(__i386__) || defined(__x86_64__) #define divu_3216_3216 divu_3232_3232 #else // Methode: (beta = 2^16) @@ -554,7 +564,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung (uint32)__q; \ r_zuweisung (uint32)__r; \ }) -#elif defined(__sparc__) || defined(__sparc64__) || defined(__i386__) +#elif defined(__sparc__) || defined(__sparc64__) || defined(__i386__) || defined(__x86_64__) #define divu_3232_3232(x,y,q_zuweisung,r_zuweisung) \ divu_6432_3232(0,x,y,q_zuweisung,r_zuweisung) #define divu_3232_3232_(x,y) divu_6432_3232_(0,x,y) @@ -666,7 +676,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) q_zuweisung (uint32)__q; \ r_zuweisung (uint32)__r; \ }) -#elif defined(__GNUC__) && (defined(__sparc__) || defined(__sparc64__)) +#elif defined(__GNUC__) && (defined(__sparc__) || defined(__sparc64__)) && !defined(NO_ASM) #define divu_6432_3232(xhi,xlo,y,q_zuweisung,r_zuweisung) \ ({ var uint32 _q = divu_6432_3232_(xhi,xlo,y); /* extern in Assembler */\ var register uint32 _r __asm__("%g1"); \ @@ -678,7 +688,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) var register uint32 _r __asm__("%r1"/*"%a2"*/); \ q_zuweisung _q; r_zuweisung _r; \ }) -#elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(NO_ASM) #define divu_6432_3232(xhi,xlo,y,q_zuweisung,r_zuweisung) \ ({var uint32 __xhi = (xhi); \ var uint32 __xlo = (xlo); \ @@ -723,7 +733,7 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) #else #define divu_6432_3232(xhi,xlo,y,q_zuweisung,r_zuweisung) \ { q_zuweisung divu_6432_3232_(xhi,xlo,y); r_zuweisung divu_32_rest; } - #if defined(__m68k__) || defined(__sparc__) || defined(__sparc64__) || defined(__arm__) || (defined(__i386__) && !defined(WATCOM) && !defined(MICROSOFT)) || defined(__hppa__) + #if (defined(__m68k__) || defined(__sparc__) || defined(__sparc64__) || defined(__arm__) || (defined(__i386__) && !defined(WATCOM) && !defined(MICROSOFT)) || defined(__x86_64__) || defined(__hppa__)) && !defined(NO_ASM) // divu_6432_3232_ extern in Assembler #if defined(__sparc__) || defined(__sparc64__) extern "C" uint32 _get_g1 (void); @@ -790,9 +800,28 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // < x = q*y+r extern "C" uint64 divu_12864_6464_ (uint64 xhi, uint64 xlo, uint64 y); // -> Quotient q extern "C" uint64 divu_64_rest; // -> Rest r +#if defined(__GNUC__) && defined(__x86_64__) && !defined(NO_ASM) + #define divu_12864_6464(xhi,xlo,y,q_zuweisung,r_zuweisung) \ + ({var uint64 __xhi = (xhi); \ + var uint64 __xlo = (xlo); \ + var uint64 __y = (y); \ + var uint64 __q; \ + var uint64 __r; \ + __asm__ __volatile__ ( \ + "divq %4" \ + : "=a" /* %rax */ (__q), "=d" /* %rdx */ (__r) \ + : "1" /* %rdx */ (__xhi), "0" /* %rax */ (__xlo), "rm" (__y) \ + ); \ + q_zuweisung __q; \ + r_zuweisung __r; \ + }) + #define divu_12864_64364_(xhi,xlo,y) \ + ({var uint64 ___q; divu_12864_6464(xhi,xlo,y,___q=,); ___q; }) +#else #define divu_12864_6464(xhi,xlo,y,q_zuweisung,r_zuweisung) \ { q_zuweisung divu_12864_6464_(xhi,xlo,y); r_zuweisung divu_64_rest; } #define NEED_FUNCTION_divu_12864_6464_ +#endif #endif /* HAVE_FAST_LONGLONG */ @@ -1031,9 +1060,9 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // < size: >0, <=8, mit 2^(size-1) <= digit < 2^size #if defined(__GNUC__) && defined(__m68k__) && !defined(NO_ASM) #define integerlength8(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("bfffo %1{#0:#8},%0" : "=d" (zero_counter) : "dm" ((uint8)(digit)) ); \ - size_zuweisung (8-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("bfffo %1{#0:#8},%0" : "=d" (_zero_counter) : "dm" ((uint8)(digit)) ); \ + size_zuweisung (8-_zero_counter); \ } #elif defined(__sparc__) && !defined(__sparc64__) #define integerlength8(digit,size_zuweisung) \ @@ -1043,16 +1072,16 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) integerlength16((uint16)(digit),size_zuweisung) #else #define integerlength8(digit,size_zuweisung) \ - { var uintC bitsize = 1; \ - var uintL x8 = (uint8)(digit); \ - /* x8 hat höchstens 8 Bits. */\ - if (x8 >= bit(4)) { x8 = x8>>4; bitsize += 4; } \ - /* x8 hat höchstens 4 Bits. */\ - if (x8 >= bit(2)) { x8 = x8>>2; bitsize += 2; } \ - /* x8 hat höchstens 2 Bits. */\ - if (x8 >= bit(1)) { /* x8 = x8>>1; */ bitsize += 1; } \ - /* x8 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ - size_zuweisung bitsize; \ + { var uintC _bitsize = 1; \ + var uintL _x8 = (uint8)(digit); \ + /* _x8 hat höchstens 8 Bits. */\ + if (_x8 >= bit(4)) { _x8 = _x8>>4; _bitsize += 4; } \ + /* _x8 hat höchstens 4 Bits. */\ + if (_x8 >= bit(2)) { _x8 = _x8>>2; _bitsize += 2; } \ + /* _x8 hat höchstens 2 Bits. */\ + if (_x8 >= bit(1)) { /* _x8 = _x8>>1; */ _bitsize += 1; } \ + /* _x8 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ + size_zuweisung _bitsize; \ } #endif @@ -1063,40 +1092,40 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // < size: >0, <=16, mit 2^(size-1) <= digit < 2^size #if defined(__GNUC__) && defined(__m68k__) && !defined(NO_ASM) #define integerlength16(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("bfffo %1{#0:#16},%0" : "=d" (zero_counter) : "dm" ((uint16)(digit)) ); \ - size_zuweisung (16-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("bfffo %1{#0:#16},%0" : "=d" (_zero_counter) : "dm" ((uint16)(digit)) ); \ + size_zuweisung (16-_zero_counter); \ } #elif defined(__sparc__) && !defined(__sparc64__) #define integerlength16(digit,size_zuweisung) \ integerlength32((uint32)(digit),size_zuweisung) // siehe unten #elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) #define integerlength16(digit,size_zuweisung) \ - { var uintW one_position; /* Position der führenden 1 */\ - __asm__("bsrw %1,%0" : "=r" (one_position) : "r" ((uint16)(digit)) ); \ - size_zuweisung (1+one_position); \ + { var uintW _one_position; /* Position der führenden 1 */\ + __asm__("bsrw %1,%0" : "=r" (_one_position) : "r" ((uint16)(digit)) ); \ + size_zuweisung (1+_one_position); \ } // Die weiteren kommen von gcc/longlong.h : #elif defined(__GNUC__) && defined(__ibm032__) && !defined(NO_ASM) // RT/ROMP #define integerlength16(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("clz %0,%1" : "=r" (zero_counter) : "r" ((uint32)(digit)) ); \ - size_zuweisung (16-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("clz %0,%1" : "=r" (_zero_counter) : "r" ((uint32)(digit)) ); \ + size_zuweisung (16-_zero_counter); \ } #else #define integerlength16(digit,size_zuweisung) \ - { var uintC bitsize = 1; \ - var uintWL x16 = (uint16)(digit); \ - /* x16 hat höchstens 16 Bits. */\ - if (x16 >= bit(8)) { x16 = x16>>8; bitsize += 8; } \ - /* x16 hat höchstens 8 Bits. */\ - if (x16 >= bit(4)) { x16 = x16>>4; bitsize += 4; } \ - /* x16 hat höchstens 4 Bits. */\ - if (x16 >= bit(2)) { x16 = x16>>2; bitsize += 2; } \ - /* x16 hat höchstens 2 Bits. */\ - if (x16 >= bit(1)) { /* x16 = x16>>1; */ bitsize += 1; } \ - /* x16 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ - size_zuweisung bitsize; \ + { var uintC _bitsize = 1; \ + var uintWL _x16 = (uint16)(digit); \ + /* _x16 hat höchstens 16 Bits. */\ + if (_x16 >= bit(8)) { _x16 = _x16>>8; _bitsize += 8; } \ + /* _x16 hat höchstens 8 Bits. */\ + if (_x16 >= bit(4)) { _x16 = _x16>>4; _bitsize += 4; } \ + /* _x16 hat höchstens 4 Bits. */\ + if (_x16 >= bit(2)) { _x16 = _x16>>2; _bitsize += 2; } \ + /* _x16 hat höchstens 2 Bits. */\ + if (_x16 >= bit(1)) { /* _x16 = _x16>>1; */ _bitsize += 1; } \ + /* _x16 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ + size_zuweisung _bitsize; \ } #endif @@ -1107,9 +1136,9 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // < size: >0, <=32, mit 2^(size-1) <= digit < 2^size #if defined(__GNUC__) && defined(__m68k__) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("bfffo %1{#0:#32},%0" : "=d" (zero_counter) : "dm" ((uint32)(digit)) ); \ - size_zuweisung (32-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("bfffo %1{#0:#32},%0" : "=d" (_zero_counter) : "dm" ((uint32)(digit)) ); \ + size_zuweisung (32-_zero_counter); \ } #elif defined(__sparc__) && !defined(__sparc64__) && defined(FAST_DOUBLE) #define integerlength32(digit,size_zuweisung) \ @@ -1126,9 +1155,9 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) } #elif defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ - { var uintL one_position; /* Position der führenden 1 */\ - __asm__("bsrl %1,%0" : "=r" (one_position) : "rm" ((uint32)(digit)) ); \ - size_zuweisung (1+one_position); \ + { var uintL _one_position; /* Position der führenden 1 */\ + __asm__("bsrl %1,%0" : "=r" (_one_position) : "rm" ((uint32)(digit)) ); \ + size_zuweisung (1+_one_position); \ } #elif defined(__hppa__) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ @@ -1137,62 +1166,62 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // Die weiteren kommen von gcc/longlong.h : #elif defined(__GNUC__) && (defined(__a29k__) || defined(___AM29K__)) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("clz %0,%1" : "=r" (zero_counter) : "r" ((uint32)(digit)) ); \ - size_zuweisung (32-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("clz %0,%1" : "=r" (_zero_counter) : "r" ((uint32)(digit)) ); \ + size_zuweisung (32-_zero_counter); \ } #elif defined(__GNUC__) && defined(__gmicro__) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("bsch/1 %1,%0" : "=g" (zero_counter) : "g" ((uint32)(digit)) ); \ - size_zuweisung (32-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("bsch/1 %1,%0" : "=g" (_zero_counter) : "g" ((uint32)(digit)) ); \ + size_zuweisung (32-_zero_counter); \ } #elif defined(__GNUC__) && defined(__rs6000__) && !defined(NO_ASM) #ifdef _AIX // old assembler syntax #define integerlength32(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("cntlz %0,%1" : "=r" (zero_counter) : "r" ((uint32)(digit)) ); \ - size_zuweisung (32-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("cntlz %0,%1" : "=r" (_zero_counter) : "r" ((uint32)(digit)) ); \ + size_zuweisung (32-_zero_counter); \ } #else // new assembler syntax #define integerlength32(digit,size_zuweisung) \ - { var uintL zero_counter; /* zählt die führenden Nullbits in digit */\ - __asm__("cntlzw %0,%1" : "=r" (zero_counter) : "r" ((uint32)(digit)) ); \ - size_zuweisung (32-zero_counter); \ + { var uintL _zero_counter; /* zählt die führenden Nullbits in digit */\ + __asm__("cntlzw %0,%1" : "=r" (_zero_counter) : "r" ((uint32)(digit)) ); \ + size_zuweisung (32-_zero_counter); \ } #endif #elif defined(__GNUC__) && defined(__m88k__) && !defined(NO_ASM) #define integerlength32(digit,size_zuweisung) \ - { var uintL one_position; /* Position der führenden 1 */\ - __asm__("ff1 %0,%1" : "=r" (one_position) : "r" ((uint32)(digit)) ); \ - size_zuweisung (1+one_position); \ + { var uintL _one_position; /* Position der führenden 1 */\ + __asm__("ff1 %0,%1" : "=r" (_one_position) : "r" ((uint32)(digit)) ); \ + size_zuweisung (1+_one_position); \ } #elif defined(__GNUC__) && defined(__ibm032__) && !defined(NO_ASM) // RT/ROMP #define integerlength32(digit,size_zuweisung) \ - { var uintL x32 = (uint32)(digit); \ - if (x32 >= bit(16)) \ - { integerlength16(x32>>16,size_zuweisung 16 + ); } \ + { var uintL _x32 = (uint32)(digit); \ + if (_x32 >= bit(16)) \ + { integerlength16(_x32>>16,size_zuweisung 16 + ); } \ else \ - { integerlength16(x32,size_zuweisung); } \ + { integerlength16(_x32,size_zuweisung); } \ } #else #define integerlength32(digit,size_zuweisung) \ - { var uintC bitsize = 1; \ - var uintL x32 = (uint32)(digit); \ - /* x32 hat höchstens 32 Bits. */\ - if (x32 >= bit(16)) { x32 = x32>>16; bitsize += 16; } \ - /* x32 hat höchstens 16 Bits. */\ - if (x32 >= bit(8)) { x32 = x32>>8; bitsize += 8; } \ - /* x32 hat höchstens 8 Bits. */\ - if (x32 >= bit(4)) { x32 = x32>>4; bitsize += 4; } \ - /* x32 hat höchstens 4 Bits. */\ - if (x32 >= bit(2)) { x32 = x32>>2; bitsize += 2; } \ - /* x32 hat höchstens 2 Bits. */\ - if (x32 >= bit(1)) { /* x32 = x32>>1; */ bitsize += 1; } \ - /* x32 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ - size_zuweisung bitsize; \ + { var uintC _bitsize = 1; \ + var uintL _x32 = (uint32)(digit); \ + /* _x32 hat höchstens 32 Bits. */\ + if (_x32 >= bit(16)) { _x32 = _x32>>16; _bitsize += 16; } \ + /* _x32 hat höchstens 16 Bits. */\ + if (_x32 >= bit(8)) { _x32 = _x32>>8; _bitsize += 8; } \ + /* _x32 hat höchstens 8 Bits. */\ + if (_x32 >= bit(4)) { _x32 = _x32>>4; _bitsize += 4; } \ + /* _x32 hat höchstens 4 Bits. */\ + if (_x32 >= bit(2)) { _x32 = _x32>>2; _bitsize += 2; } \ + /* _x32 hat höchstens 2 Bits. */\ + if (_x32 >= bit(1)) { /* _x32 = _x32>>1; */ _bitsize += 1; } \ + /* _x32 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ + size_zuweisung _bitsize; \ } #endif @@ -1202,22 +1231,22 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // > digit: ein uint64 >0 // < size: >0, <=64, mit 2^(size-1) <= digit < 2^size #define integerlength64(digit,size_zuweisung) \ - { var uintC bitsize = 1; \ - var uint64 x64 = (uint64)(digit); \ - /* x64 hat höchstens 64 Bits. */\ - if (x64 >= bit(32)) { x64 = x64>>32; bitsize += 32; } \ - /* x64 hat höchstens 32 Bits. */\ - if (x64 >= bit(16)) { x64 = x64>>16; bitsize += 16; } \ - /* x64 hat höchstens 16 Bits. */\ - if (x64 >= bit(8)) { x64 = x64>>8; bitsize += 8; } \ - /* x64 hat höchstens 8 Bits. */\ - if (x64 >= bit(4)) { x64 = x64>>4; bitsize += 4; } \ - /* x64 hat höchstens 4 Bits. */\ - if (x64 >= bit(2)) { x64 = x64>>2; bitsize += 2; } \ - /* x64 hat höchstens 2 Bits. */\ - if (x64 >= bit(1)) { /* x64 = x64>>1; */ bitsize += 1; } \ - /* x64 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ - size_zuweisung bitsize; \ + { var uintC _bitsize = 1; \ + var uint64 _x64 = (uint64)(digit); \ + /* _x64 hat höchstens 64 Bits. */\ + if (_x64 >= bit(32)) { _x64 = _x64>>32; _bitsize += 32; } \ + /* _x64 hat höchstens 32 Bits. */\ + if (_x64 >= bit(16)) { _x64 = _x64>>16; _bitsize += 16; } \ + /* _x64 hat höchstens 16 Bits. */\ + if (_x64 >= bit(8)) { _x64 = _x64>>8; _bitsize += 8; } \ + /* _x64 hat höchstens 8 Bits. */\ + if (_x64 >= bit(4)) { _x64 = _x64>>4; _bitsize += 4; } \ + /* _x64 hat höchstens 4 Bits. */\ + if (_x64 >= bit(2)) { _x64 = _x64>>2; _bitsize += 2; } \ + /* _x64 hat höchstens 2 Bits. */\ + if (_x64 >= bit(1)) { /* _x64 = _x64>>1; */ _bitsize += 1; } \ + /* _x64 hat höchstens 1 Bit. Dieses Bit muß gesetzt sein. */\ + size_zuweisung _bitsize; \ } // Hintere Nullbits eines 32-Bit-Wortes zählen: @@ -1227,9 +1256,9 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2) // < count: >=0, <32, mit 2^count | digit, digit/2^count ungerade #if defined(__GNUC__) && defined(__i386__) && !defined(NO_ASM) #define ord2_32(digit,count_zuweisung) \ - { var uintL one_position; /* Position der letzten 1 */\ - __asm__("bsfl %1,%0" : "=r" (one_position) : "rm" ((uint32)(digit)) ); \ - count_zuweisung one_position; \ + { var uintL _one_position; /* Position der letzten 1 */\ + __asm__("bsfl %1,%0" : "=r" (_one_position) : "rm" ((uint32)(digit)) ); \ + count_zuweisung _one_position; \ } #define FAST_ORD2 #elif defined(__sparc__) && !defined(__sparc64__)