41#include "specialize.h"
55 struct exp32_sig64 normExpSig;
60 struct uint128 y, term;
74 if ( expA == 0x7FFF ) {
75 if ( sigA &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) {
81 if ( ! signA )
return a;
87 if ( ! sigA )
goto zero;
92 if ( ! expA ) expA = 1;
93 if ( ! (sigA &
UINT64_C( 0x8000000000000000 )) ) {
94 if ( ! sigA )
goto zero;
96 expA += normExpSig.exp;
97 sigA = normExpSig.sig;
104 expZ = ((expA - 0x3FFF)>>1) + 0x3FFF;
128 if ( ! (rem.v64 &
UINT64_C( 0x8000000000000000 )) )
break;
134 q = (((rem.v64>>2) * recipSqrt32)>>32) + 2;
136 sigZ = (sigZ<<1) + (q>>25);
140 if ( (q & 0xFFFFFF) <= 2 ) {
148 if ( rem.v64 &
UINT64_C( 0x8000000000000000 ) ) {
149 if ( ! sigZExtra ) --sigZ;
152 if ( rem.v64 | rem.v0 ) sigZExtra |= 1;
171 uZ.s.signExp = uiZ64;
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
struct uint128 softfloat_propagateNaNExtF80UI(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0)
void softfloat_raiseFlags(uint_fast8_t flags)
#define defaultNaNExtF80UI0
#define defaultNaNExtF80UI64
extFloat80_t extF80_sqrt(extFloat80_t a)
#define packToExtF80UI64(sign, exp)
#define expExtF80UI64(a64)
#define signExtF80UI64(a64)
uint32_t softfloat_approxRecipSqrt32_1(unsigned int oddExpA, uint32_t a)
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
struct uint128 softfloat_add128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
struct uint128 softfloat_mul64ByShifted32To128(uint64_t a, uint32_t b)
struct exp32_sig64 softfloat_normSubnormalExtF80Sig(uint_fast64_t sig)
extFloat80_t softfloat_roundPackToExtF80(bool sign, int_fast32_t exp, uint_fast64_t sig, uint_fast64_t sigExtra, uint_fast8_t roundingPrecision)
struct uint128 softfloat_shortShiftLeft128(uint64_t a64, uint64_t a0, uint_fast8_t dist)
struct uint128 softfloat_sub128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
unsigned __int64 uint64_t