58{
63 bool signRem;
67 uint32_t rem2[5], *altRemPtr, *newRemPtr, wordMeanRem;
68
69
70
74
75
79
80
81 if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) {
83 if ( expA == 0x7FFF ) goto invalid;
84 goto copyA;
85 }
86
87
88 if ( expA < expB - 1 ) goto copyA;
89
90
92 if ( expB == -128 ) goto invalid;
95 if ( expA == -128 ) goto copyA;
97
98
99 expDiff = expA - expB;
100 if ( expDiff < 1 ) {
101 if ( expDiff < -1 ) goto copyA;
102 if ( expDiff ) {
103 --expB;
105 q = 0;
106 } else {
109 }
110 } else {
111 recip32 =
114 >>30
115 );
116 expDiff -= 30;
117 for (;;) {
119 if ( expDiff < 0 ) break;
120 q = (q64 + 0x80000000)>>32;
124 }
125 expDiff -= 29;
126 }
127
128
129
130 q = (
uint32_t) (q64>>32)>>(~expDiff & 31);
135 goto selectRem;
136 }
137 }
138
139
141 do {
142 ++q;
143 newRemPtr = altRemPtr;
145 altRemPtr = remPtr;
146 remPtr = newRemPtr;
147 }
while ( ! (remPtr[
indexWordHi( 4 )] & 0x80000000) );
148 selectRem:
151 if (
152 (wordMeanRem & 0x80000000)
153 || (! wordMeanRem && (q & 1) && ! x[
indexWord( 4, 0 )]
155 ) {
156 remPtr = altRemPtr;
157 }
159 signRem = ! signRem;
161 }
165 return;
166
167
168 invalid:
170 return;
171
172
173 copyA:
178
179}
void softfloat_invalidF128M(uint32_t *)
void softfloat_normRoundPackMToF128M(bool, int32_t, uint32_t *, uint32_t *)
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 indexMultiwordLo(total, n)
#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)
#define softfloat_negX128M(zPtr)
unsigned __int64 uint64_t