Lines Matching +full:1 +full:b
50 return mant | 1ULL << 52; in float64_getmant()
68 return exp + 1; in float64_getexp()
70 return -1; in float64_getexp()
80 return exp + 1; in float32_getexp()
82 return -1; in float32_getexp()
93 static Int128 int128_sub_borrow(Int128 a, Int128 b, int borrow) in int128_sub_borrow() argument
95 Int128 ret = int128_sub(a, b); in int128_sub_borrow()
124 a.mant = int128_lshift(a.mant, 1); in accum_norm_left()
145 a.guard = (int128_getlo(a.mant) >> 63) & 1; in accum_norm_right()
146 a.round = (int128_getlo(a.mant) >> 62) & 1; in accum_norm_right()
155 a.guard = int128_getlo(a.mant) & 1; in accum_norm_right()
156 a.mant = int128_rshift(a.mant, 1); in accum_norm_right()
166 static Accum accum_add(Accum a, Accum b);
168 static Accum accum_sub(Accum a, Accum b, int negate) in accum_sub() argument
174 if (a.sign != b.sign) { in accum_sub()
175 b.sign = !b.sign; in accum_sub()
176 return accum_add(a, b); in accum_sub()
178 if (b.exp > a.exp) { in accum_sub()
180 return accum_sub(b, a, !negate); in accum_sub()
182 if ((b.exp == a.exp) && (int128_gt(b.mant, a.mant))) { in accum_sub()
184 return accum_sub(b, a, !negate); in accum_sub()
187 while (a.exp > b.exp) { in accum_sub()
189 if (int128_gethi(a.mant) & (1ULL << 62)) { in accum_sub()
197 while (a.exp > b.exp) { in accum_sub()
198 /* Try to normalize exponents: grow b exponent and shrink mantissa */ in accum_sub()
200 b = accum_norm_right(b, a.exp - b.exp); in accum_sub()
203 if ((int128_gt(b.mant, a.mant))) { in accum_sub()
204 return accum_sub(b, a, !negate); in accum_sub()
210 assert(!int128_gt(b.mant, a.mant)); in accum_sub()
211 borrow = (b.round << 2) | (b.guard << 1) | b.sticky; in accum_sub()
212 ret.mant = int128_sub_borrow(a.mant, b.mant, (borrow != 0)); in accum_sub()
214 ret.guard = (borrow >> 2) & 1; in accum_sub()
215 ret.round = (borrow >> 1) & 1; in accum_sub()
216 ret.sticky = (borrow >> 0) & 1; in accum_sub()
223 static Accum accum_add(Accum a, Accum b) in accum_add() argument
227 if (a.sign != b.sign) { in accum_add()
228 b.sign = !b.sign; in accum_add()
229 return accum_sub(a, b, 0); in accum_add()
231 if (b.exp > a.exp) { in accum_add()
233 return accum_add(b, a); in accum_add()
235 if ((b.exp == a.exp) && int128_gt(b.mant, a.mant)) { in accum_add()
237 return accum_add(b, a); in accum_add()
240 while (a.exp > b.exp) { in accum_add()
242 if (int128_gethi(a.mant) & (1ULL << 62)) { in accum_add()
250 while (a.exp > b.exp) { in accum_add()
251 /* Try to normalize exponents: grow b exponent and shrink mantissa */ in accum_add()
253 b = accum_norm_right(b, a.exp - b.exp); in accum_add()
257 if (int128_gt(b.mant, a.mant)) { in accum_add()
258 return accum_add(b, a); in accum_add()
262 assert(!int128_gt(b.mant, a.mant)); in accum_add()
263 ret.mant = int128_add(a.mant, b.mant); in accum_add()
264 ret.guard = b.guard; in accum_add()
265 ret.round = b.round; in accum_add()
266 ret.sticky = b.sticky; in accum_add()
320 return zero_float64(1); in accum_round_float64()
328 * That means that we want DF_MANTBITS+1 bits, or 0x000000000000FF_FFFF in accum_round_float64()
333 ((int128_getlo(a.mant) >> (DF_MANTBITS + 1)) != 0)) { in accum_round_float64()
334 a = accum_norm_right(a, 1); in accum_round_float64()
340 * shifted out lots of bits from B, or if we had no shift / 1 shift sticky in accum_round_float64()
343 while ((int128_getlo(a.mant) & (1ULL << DF_MANTBITS)) == 0) { in accum_round_float64()
352 a = accum_norm_right(a, 1 - a.exp); in accum_round_float64()
381 /* round up if guard is 1, down if guard is zero */ in accum_round_float64()
396 if ((int128_getlo(a.mant) >> (DF_MANTBITS + 1)) != 0) { in accum_round_float64()
397 a = accum_norm_right(a, 1); in accum_round_float64()
425 if (ret & (1ULL << DF_MANTBITS)) { in accum_round_float64()
429 assert(a.exp == 1); in accum_round_float64()
432 ret = deposit64(ret, 63, 1, a.sign); in accum_round_float64()
436 float64 internal_mpyhh(float64 a, float64 b, in internal_mpyhh() argument
445 sticky = accumulated & 1; in internal_mpyhh()
446 accumulated >>= 1; in internal_mpyhh()
451 return float64_mul(a, b, fp_status); in internal_mpyhh()
453 if (float64_is_zero(b) || in internal_mpyhh()
454 float64_is_any_nan(b) || in internal_mpyhh()
455 float64_is_infinity(b)) { in internal_mpyhh()
456 return float64_mul(a, b, fp_status); in internal_mpyhh()
460 prod = fGETUWORD(1, float64_getmant(a)) * fGETUWORD(1, float64_getmant(b)); in internal_mpyhh()
462 x.exp = float64_getexp(a) + float64_getexp(b) - DF_BIAS - 20; in internal_mpyhh()
463 if (!float64_is_normal(a) || !float64_is_normal(b)) { in internal_mpyhh()
465 x.sticky = 1; in internal_mpyhh()
469 b_sign = float64_is_neg(b); in internal_mpyhh()