return *a;
}
-static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
- float_status *s)
+static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b,
+ float_status *s)
{
bool have_snan = false;
- FloatPartsN *ret;
+ const FloatPartsN *ret;
int cmp;
if (is_snan(a->cls) || is_snan(b->cls)) {
}
if (s->default_nan_mode) {
- *a = partsN(default_nan)(s);
- return a;
+ return partsN(default_nan)(s);
}
switch (s->float_2nan_prop_rule) {
}
if (is_snan(ret->cls)) {
- *ret = partsN(silence_nan)(ret, s);
+ return partsN(silence_nan)(ret, s);
}
- return ret;
+ return *ret;
}
static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
return b;
p_nan:
- return partsN(pick_nan)(a, b, s);
+ *a = partsN(pick_nan)(a, b, s);
+ return a;
}
/*
}
if (unlikely(ab_mask & float_cmask_anynan)) {
- return partsN(pick_nan)(a, b, s);
+ *a = partsN(pick_nan)(a, b, s);
+ return a;
}
/* Multiply by 0 or Inf */
/* All the NaN cases */
if (unlikely(ab_mask & float_cmask_anynan)) {
- return partsN(pick_nan)(a, b, s);
+ *a = partsN(pick_nan)(a, b, s);
+ return a;
}
if ((ab_mask & float_cmask_denormal) && b->cls != float_class_zero) {
/* All the NaN cases */
if (unlikely(ab_mask & float_cmask_anynan)) {
- return partsN(pick_nan)(a, b, s);
+ *a = partsN(pick_nan)(a, b, s);
+ return a;
}
/* Inf % N; N % 0 */
return is_nan(a->cls) ? b : a;
}
- return partsN(pick_nan)(a, b, s);
+ *a = partsN(pick_nan)(a, b, s);
+ return a;
}
if (ab_mask & float_cmask_denormal) {
floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status)
{
- FloatParts128 pa, pb, *pr;
+ FloatParts128 pa, pb;
if (!floatx80_unpack_canonical(&pa, a, status) ||
!floatx80_unpack_canonical(&pb, b, status)) {
return floatx80_default_nan(status);
}
- pr = parts128_pick_nan(&pa, &pb, status);
- return floatx80_round_pack_canonical(pr, status);
+ pa = parts128_pick_nan(&pa, &pb, status);
+ return floatx80_round_pack_canonical(&pa, status);
}
/*----------------------------------------------------------------------------
{
/* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */
if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) {
- *r = *parts64_pick_nan(a, b, status);
+ *r = parts64_pick_nan(a, b, status);
*n = *r;
*cc = 1;
} else if (a->cls == float_class_inf || b->cls == float_class_zero) {