41#include "specialize.h"
44#ifdef SOFTFLOAT_FAST_INT64
65 uint32_t sig32A, recipSqrt32, sig32Z, qs[3], q;
82 if ( rawExpA == 0x7FFF ) {
91 if ( ! signA )
goto copyA;
97 if ( expA == -128 )
goto copyA;
98 if ( signA )
goto invalid;
104 expZ = ((expA - 0x3FFF)>>1) + 0x3FFE;
117 sig32Z = ((
uint64_t) sig32A * recipSqrt32)>>32;
118 if ( expA ) sig32Z >>= 1;
120 rem64 -= (
uint64_t) sig32Z * sig32Z;
133 x64 = ((
uint64_t) sig32Z<<32) + sig64Z;
138 if ( ! (rem32 & 0x80000000) )
break;
147 if ( rem64>>34 ) q += recipSqrt32;
153 x64 = sig64Z + (q>>26);
160 if ( ! (rem32 & 0x80000000) )
break;
168 if ( rem64>>34 ) q += recipSqrt32;
171 x64 = ((
uint64_t) qs[0]<<24) + (x64>>32);
173 x64 = ((
uint64_t) qs[1]<<21) + (x64>>32);
175 x64 = ((
uint64_t) qs[2]<<18) + (x64>>32);
180 if ( (q & 0xF) <= 2 ) {
199 if ( rem32 & 0x80000000 ) {
void softfloat_propagateNaNF128M(const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr)
float128_t f128_sqrt(float128_t a)
void f128M_sqrt(const float128_t *aPtr, float128_t *zPtr)
void softfloat_invalidF128M(uint32_t *)
#define fracF128UI96(a96)
void softfloat_roundPackMToF128M(bool, int32_t, uint32_t *, uint32_t *)
int softfloat_shiftNormSigF128M(const uint32_t *, uint_fast8_t, uint32_t *)
#define signF128UI96(a96)
#define indexMultiwordHi(total, n)
#define indexMultiwordLo(total, n)
#define indexWordLo(total)
#define indexWord(total, n)
#define indexWordHi(total)
#define softfloat_sub1X160M(zPtr)
#define softfloat_remStep128MBy32(remPtr, dist, bPtr, q, zPtr)
#define softfloat_sub160M(aPtr, bPtr, zPtr)
#define softfloat_remStep160MBy32(remPtr, dist, bPtr, q, zPtr)
uint32_t softfloat_approxRecipSqrt32_1(unsigned int oddExpA, uint32_t a)
#define softfloat_shortShiftRight128M(aPtr, dist, zPtr)
unsigned __int64 uint64_t