58{
61 bool signA;
64 bool signB;
66 bool signZ;
70 int ix;
73
74
75
79
80
87 signZ = signA ^ signB;
88
89
90 if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) {
92 if ( expA == 0x7FFF ) {
93 if ( expB == 0x7FFF ) goto invalid;
94 goto infinity;
95 }
96 goto zero;
97 }
98
99
102 if ( expA == -128 ) {
103 if ( expB == -128 ) goto invalid;
104 goto zero;
105 }
106 if ( expB == -128 ) {
108 goto infinity;
109 }
110
111
112 expZ = expA - expB + 0x3FFE;
114 --expZ;
116 }
117 recip32 =
120 >>30
121 );
122 ix = 3;
123 for (;;) {
125 q = (q64 + 0x80000000)>>32;
126 --ix;
127 if ( ix < 0 ) break;
130 --q;
132 }
133 qs[ix] = q;
134 }
135
136
137 if ( ((q + 1) & 7) < 2 ) {
140 --q;
143 ++q;
145 }
146 if (
149 ) {
150 q |= 1;
151 }
152 }
153
154
157 q64 = ((
uint64_t) qs[0]<<25) + (q64>>32);
159 q64 = ((
uint64_t) qs[1]<<22) + (q64>>32);
161 q64 = ((
uint64_t) qs[2]<<19) + (q64>>32);
165 return;
166
167
168 invalid:
170 return;
171
172
173 infinity:
175 goto uiZ96;
176 zero:
178 uiZ96:
183
184}
void softfloat_raiseFlags(uint_fast8_t flags)
void softfloat_invalidF128M(uint32_t *)
void softfloat_roundPackMToF128M(bool, int32_t, uint32_t *, uint32_t *)
#define packToF128UI96(sign, exp, sig96)
int softfloat_shiftNormSigF128M(const uint32_t *, uint_fast8_t, uint32_t *)
bool softfloat_tryPropagateNaNF128M(const uint32_t *, const uint32_t *, uint32_t *)
#define signF128UI96(a96)
#define indexWordLo(total)
#define indexWord(total, n)
#define indexWordHi(total)
#define softfloat_add128M(aPtr, bPtr, zPtr)
int_fast8_t softfloat_compare128M(const uint32_t *aPtr, const uint32_t *bPtr)
#define softfloat_remStep128MBy32(remPtr, dist, bPtr, q, zPtr)
#define softfloat_sub128M(aPtr, bPtr, zPtr)
uint32_t softfloat_approxRecip32_1(uint32_t a)
@ softfloat_flag_infinite
unsigned __int64 uint64_t