fpu: Return struct from parts{64,128}_pick_nan
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Richard Henderson committed
Apr 25, 2026 at 23:19 UTC
bf6efdb9443665d6deda5212966ff20776b1a0af
2 files changed
+20
-16
fpu/softfloat-parts.c.inc
+16
-12
@@ -37,11 +37,11 @@ static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
37
return *a;
38
}
39
40
-static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
41
- float_status *s)
40
+static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b,
41
+ float_status *s)
42
{
43
bool have_snan = false;
44
- FloatPartsN *ret;
44
+ const FloatPartsN *ret;
45
int cmp;
46
47
if (is_snan(a->cls) || is_snan(b->cls)) {
@@ -50,8 +50,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
50
}
51
52
if (s->default_nan_mode) {
53
- *a = partsN(default_nan)(s);
54
- return a;
53
+ return partsN(default_nan)(s);
54
}
55
56
switch (s->float_2nan_prop_rule) {
@@ -110,9 +109,9 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
109
}
110
111
if (is_snan(ret->cls)) {
113
- *ret = partsN(silence_nan)(ret, s);
112
+ return partsN(silence_nan)(ret, s);
113
}
115
- return ret;
114
+ return *ret;
115
}
116
117
static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
@@ -605,7 +604,8 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, FloatPartsN *b,
604
return b;
605
606
p_nan:
608
- return partsN(pick_nan)(a, b, s);
607
+ *a = partsN(pick_nan)(a, b, s);
608
+ return a;
609
}
610
611
/*
@@ -647,7 +647,8 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPartsN *b,
647
}
648
649
if (unlikely(ab_mask & float_cmask_anynan)) {
650
- return partsN(pick_nan)(a, b, s);
650
+ *a = partsN(pick_nan)(a, b, s);
651
+ return a;
652
}
653
654
/* Multiply by 0 or Inf */
@@ -833,7 +834,8 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPartsN *b,
834
835
/* All the NaN cases */
836
if (unlikely(ab_mask & float_cmask_anynan)) {
836
- return partsN(pick_nan)(a, b, s);
837
+ *a = partsN(pick_nan)(a, b, s);
838
+ return a;
839
}
840
841
if ((ab_mask & float_cmask_denormal) && b->cls != float_class_zero) {
@@ -891,7 +893,8 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, FloatPartsN *b,
893
894
/* All the NaN cases */
895
if (unlikely(ab_mask & float_cmask_anynan)) {
894
- return partsN(pick_nan)(a, b, s);
896
+ *a = partsN(pick_nan)(a, b, s);
897
+ return a;
898
}
899
900
/* Inf % N; N % 0 */
@@ -1514,7 +1517,8 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, FloatPartsN *b,
1517
return is_nan(a->cls) ? b : a;
1518
}
1519
1517
- return partsN(pick_nan)(a, b, s);
1520
+ *a = partsN(pick_nan)(a, b, s);
1521
+ return a;
1522
}
1523
1524
if (ab_mask & float_cmask_denormal) {
fpu/softfloat.c
+4
-4
@@ -4765,15 +4765,15 @@ void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr,
4765
4766
floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status)
4767
{
4768
- FloatParts128 pa, pb, *pr;
4768
+ FloatParts128 pa, pb;
4769
4770
if (!floatx80_unpack_canonical(&pa, a, status) ||
4771
!floatx80_unpack_canonical(&pb, b, status)) {
4772
return floatx80_default_nan(status);
4773
}
4774
4775
- pr = parts128_pick_nan(&pa, &pb, status);
4776
- return floatx80_round_pack_canonical(pr, status);
4775
+ pa = parts128_pick_nan(&pa, &pb, status);
4776
+ return floatx80_round_pack_canonical(&pa, status);
4777
}
4778
4779
/*----------------------------------------------------------------------------
@@ -5120,7 +5120,7 @@ static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b,
5120
{
5121
/* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */
5122
if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) {
5123
- *r = *parts64_pick_nan(a, b, status);
5123
+ *r = parts64_pick_nan(a, b, status);
5124
*n = *r;
5125
*cc = 1;
5126
} else if (a->cls == float_class_inf || b->cls == float_class_zero) {