bits32
bits32 aSig, bSig, zSig, rem0, rem1, term0, term1;
bits32 aSig, bSig, q, allZero, alternateASig;
INLINE bits32 extractFloat32Frac( float32 a )
bits32 aSig, zSig, rem0, rem1, term0, term1;
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
bits32 aSig0, aSig1, absZ, aSigExtra;
if ( (bits32) ( aSigExtra<<1 ) == 0 ) absZ &= ~1;
bits32 aSig0, aSig1, absZ, aSigExtra;
bits32 aSig0, aSig1, zSig;
bits32 allZero;
normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
bits32 lastBitMask, roundBitsMask;
if ( (bits32) ( z.low<<1 ) == 0 ) z.high &= ~1;
if ( ( ( (bits32) ( a.high<<1 ) ) | a.low ) == 0 ) return a;
bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;
INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;
bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;
bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
bits32 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;
bits32 allZero, alternateASig0, alternateASig1, sigMean1;
static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
bits32 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;
bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
INLINE bits32 extractFloat64Frac1( float64 a )
return (bits32)(FLOAT64_DEMANGLE(a) & LIT64(0x00000000FFFFFFFF));
INLINE bits32 extractFloat64Frac0( float64 a )
return (bits32)((FLOAT64_DEMANGLE(a) >> 32) & 0x000FFFFF);
bits32 aSig0,
bits32 aSig1,
bits32 *zSig0Ptr,
bits32 *zSig1Ptr
packFloat64( flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )
flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1, bits32 zSig2 )
flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )
bits32 zSig2;
bits32 absA;
bits32 zSig0, zSig1;
bits32 aSig, aSigExtra;
if ( (bits32) ( aSigExtra<<1 ) == 0 ) z &= ~1;
bits32 aSig;
if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
bits32 aSig, zSig0, zSig1;
bits32 lastBitMask, roundBitsMask;
if ( (bits32) ( a<<1 ) == 0 ) return a;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig, zSig0, zSig1;
if ( 0x7FFD <= (bits32) zExp ) {
if ( a & (bits32) 0x80000000 )
bits32 aSig;
bits32 aSig;
if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 lastBitMask, roundBitsMask;
if ( (bits32) ( a<<1 ) == 0 ) return a;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig;
bits32 zSig;
zSig = (bits32)zSig64;
bits32 aSig, bSig, zSig;
zSig = (bits32)((((bits64) aSig) << 32) / bSig);
bits32 aSig, bSig;
bits32 q;
bits32 alternateASig;
bits32 aSig, zSig;
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
INLINE bits32 extractFloat32Frac( float32 a )
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
bits32 zSig;
zSig = (bits32)aSig;
normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;
static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
&& ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)<<1 )
|| ( ( ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)
&& ( ( ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)
&& ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)<<1 )
|| ( ( ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)<<1
&& ( ( ( (bits16) ( ((bits32)( a.high | b.high )>>X80SHIFT)<<1 )
bits32 zSig;
zSig = (bits32)aSig0;
zExp = (int32) ( (bits32)(aExp - 0x3FFF) >> 1) + 0x3FFE;
zSig0 = estimateSqrt32((int16)aExp, (bits32)(aSig0>>17));
bits32 aSig;
z.high = (bits32)( ( ( (bits32) zSign )<<15 ) + zExp )<<X80SHIFT;
if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
typedef !!!bits32 float32;
void writeHex_bits32( bits32, FILE * );
static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
bits32 absAHigh;
void writeHex_bits32( bits32 a, FILE *stream )
INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )
bits32 z;
bits32 aHigh, aLow, bHigh, bLow;
static bits32 estimateSqrt32( int16 aExp, bits32 a )
bits32 z;
if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );
return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 );
static int8 countLeadingZeros32( bits32 a )
return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );
if ( (bits32) ( a<<1 ) < (bits32) ( b<<1 ) ) return b;
if ( (bits32) ( b<<1 ) < (bits32) ( a<<1 ) ) return a;
return ( 0xFF000000 < (bits32) ( a<<1 ) );
bits32 aSig;
bits32 aSig;
if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 aSig;
bits32 lastBitMask, roundBitsMask;
if ( (bits32) ( a<<1 ) == 0 ) return a;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig;
bits32 zSig;
bits32 aSig, bSig, zSig;
bits32 aSig, bSig;
bits32 q;
bits32 alternateASig;
bits32 aSig, zSig;
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
INLINE bits32 extractFloat32Frac( float32 a )
bits32 zSig;
normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;
static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
bits32 zSig;
bits32 aSig;
if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
if ( 0x7FFD <= (bits32) zExp ) {