56{
60 bool signA;
65 uint32_t sig32A, recipSqrt32, sig32Z, qs[3], q;
70
71
72
75
76
80
81
82 if ( rawExpA == 0x7FFF ) {
83 if (
87 ) {
89 return;
90 }
91 if ( ! signA ) goto copyA;
92 goto invalid;
93 }
94
95
97 if ( expA == -128 ) goto copyA;
98 if ( signA ) goto invalid;
99
100
101
102
103
104 expZ = ((expA - 0x3FFF)>>1) + 0x3FFE;
105 expA &= 1;
107 if ( expA ) {
108 if ( ! rawExpA ) {
110 rem64 >>= 1;
111 }
112 sig32A = rem64>>29;
113 } else {
114 sig32A = rem64>>30;
115 }
117 sig32Z = ((
uint64_t) sig32A * recipSqrt32)>>32;
118 if ( expA ) sig32Z >>= 1;
119 qs[2] = sig32Z;
120 rem64 -= (
uint64_t) sig32Z * sig32Z;
123
124
129
130
131
132 for (;;) {
133 x64 = ((
uint64_t) sig32Z<<32) + sig64Z;
138 if ( ! (rem32 & 0x80000000) ) break;
139 --q;
140 sig64Z -= 1<<3;
141 }
142 qs[1] = q;
144
145
147 if ( rem64>>34 ) q += recipSqrt32;
148 sig64Z <<= 1;
149
150
151
152 for (;;) {
153 x64 = sig64Z + (q>>26);
160 if ( ! (rem32 & 0x80000000) ) break;
161 --q;
162 }
163 qs[0] = q;
165
166
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);
178
179
180 if ( (q & 0xF) <= 2 ) {
181 q &= ~3;
193 14,
194 term,
195 q,
197 );
199 if ( rem32 & 0x80000000 ) {
201 } else {
202 if (
205 ) {
207 }
208 }
209 }
211 return;
212
213
214 invalid:
216 return;
217
218
219 copyA:
224
225}
void softfloat_propagateNaNF128M(const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr)
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