60{
67 bool signZ;
70 int shiftDist;
72 int ix;
76
77
78
82
83
89
90
91 if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) {
93 if ( expA == 0x7FFF ) {
94 if ( expB == 0x7FFF ) goto invalid;
95 goto infinity;
96 }
97 goto zero;
98 }
99
100
103 if ( ! expB ) expB = 1;
104 if ( ! (x64 &
UINT64_C( 0x8000000000000000 )) ) {
105 if ( ! x64 ) {
106 if ( ! sigA ) goto invalid;
108 goto infinity;
109 }
111 }
112 if ( ! expA ) expA = 1;
113 if ( ! (sigA &
UINT64_C( 0x8000000000000000 )) ) {
114 if ( ! sigA ) goto zero;
116 }
117
118
119 expZ = expA - expB + 0x3FFF;
120 shiftDist = 29;
121 if ( sigA < x64 ) {
122 --expZ;
123 shiftDist = 30;
124 }
128 x64 >>= 2;
131 ix = 2;
132 for (;;) {
134 q = (x64 + 0x80000000)>>32;
135 --ix;
136 if ( ix < 0 ) break;
139 --q;
141 }
142 qs[ix] = q;
143 }
144
145
146 if ( ((q + 1) & 0x3FFFFF) < 2 ) {
149 --q;
152 ++q;
154 }
155 if (
157 ) {
158 q |= 1;
159 }
160 }
161
162
165 x64 = ((
uint64_t) qs[0]<<6) + (x64>>32);
167 y[
indexWord( 3, 2 )] = (qs[1]<<3) + (x64>>32);
170 return;
171
172
173 invalid:
175 return;
176
177
178 infinity:
180 uiZ0 =
UINT64_C( 0x8000000000000000 );
181 goto uiZ;
182
183
184 zero:
186 uiZ0 = 0;
187 uiZ:
190
191}
void softfloat_raiseFlags(uint_fast8_t flags)
#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 *)
#define signExtF80UI64(a64)
bool softfloat_tryPropagateNaNExtF80M(const struct extFloat80M *, const struct extFloat80M *, struct extFloat80M *)
int softfloat_normExtF80SigM(uint64_t *)
#define indexWordLo(total)
#define indexWord(total, n)
#define indexWordHi(total)
int_fast8_t softfloat_compare96M(const uint32_t *aPtr, const uint32_t *bPtr)
#define softfloat_add96M(aPtr, bPtr, zPtr)
#define softfloat_sub96M(aPtr, bPtr, 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_approxRecip32_1(uint32_t a)
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
@ softfloat_flag_infinite
unsigned __int64 uint64_t