41#include "specialize.h"
44#ifdef SOFTFLOAT_FAST_INT64
63 uint32_t rem96[3], sig32A, recipSqrt32, sig32Z, q;
65 uint32_t rem32, term[4], rem[4], extSigZ[3];
79 if ( expA == 0x7FFF ) {
80 if ( rem64 &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) {
84 if ( signUI64 )
goto invalid;
85 rem64 =
UINT64_C( 0x8000000000000000 );
90 if ( ! expA ) expA = 1;
91 if ( ! (rem64 &
UINT64_C( 0x8000000000000000 )) ) {
98 if ( signUI64 )
goto invalid;
101 expZ = ((expA - 0x3FFF)>>1) + 0x3FFF;
106 sig32Z = ((
uint64_t) sig32A * recipSqrt32)>>32;
107 if ( expA ) sig32Z >>= 1;
122 x64 = ((
uint64_t) sig32Z<<32) + sig64Z;
128 if ( ! (rem32 & 0x80000000) )
break;
136 if ( rem64>>34 ) q += recipSqrt32;
139 x64 = (sig64Z<<1) + (x64>>32);
144 if ( (q & 0xFFFFFF) <= 2 ) {
147 x64 = sig64Z + (q>>27);
155 if ( q & 0x80000000 ) {
void softfloat_propagateNaNExtF80M(const struct extFloat80M *aSPtr, const struct extFloat80M *bSPtr, struct extFloat80M *zSPtr)
extFloat80_t extF80_sqrt(extFloat80_t a)
void extF80M_sqrt(const extFloat80_t *aPtr, extFloat80_t *zPtr)
#define packToExtF80UI64(sign, exp)
#define expExtF80UI64(a64)
void softfloat_invalidExtF80M(struct extFloat80M *)
void softfloat_roundPackMToExtF80M(bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M *)
int softfloat_normExtF80SigM(uint64_t *)
#define indexMultiwordHi(total, n)
#define indexWordLo(total)
#define indexWord(total, n)
#define indexWordHi(total)
#define softfloat_sub1X96M(zPtr)
#define softfloat_remStep128MBy32(remPtr, dist, bPtr, q, zPtr)
#define softfloat_remStep96MBy32(remPtr, dist, bPtr, q, zPtr)
void softfloat_shortShiftLeft64To96M(uint64_t a, uint_fast8_t dist, uint32_t *zPtr)
uint32_t softfloat_approxRecipSqrt32_1(unsigned int oddExpA, uint32_t a)
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
unsigned __int64 uint64_t