fpu: Return struct from parts{64,128}_return_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:08 UTC
343b2067222da07a507a7f42a4be216e3f10af8e
2 files changed
+15
-14
fpu/softfloat-parts.c.inc
+8
-7
@@ -15,25 +15,26 @@
15
* indicated otherwise.
16
*/
17
18
-static void partsN(return_nan)(FloatPartsN *a, float_status *s)
18
+static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
19
{
20
switch (a->cls) {
21
case float_class_snan:
22
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
23
if (s->default_nan_mode) {
24
- *a = partsN(default_nan)(s);
24
+ return partsN(default_nan)(s);
25
} else {
26
- *a = partsN(silence_nan)(a, s);
26
+ return partsN(silence_nan)(a, s);
27
}
28
break;
29
case float_class_qnan:
30
if (s->default_nan_mode) {
31
- *a = partsN(default_nan)(s);
31
+ return partsN(default_nan)(s);
32
}
33
break;
34
default:
35
g_assert_not_reached();
36
}
37
+ return *a;
38
}
39
40
static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
@@ -941,7 +942,7 @@ static void partsN(sqrt)(FloatPartsN *a, float_status *status,
942
break;
943
case float_class_snan:
944
case float_class_qnan:
944
- partsN(return_nan)(a, status);
945
+ *a = partsN(return_nan)(a, status);
946
return;
947
case float_class_zero:
948
return;
@@ -1263,7 +1264,7 @@ static void partsN(round_to_int)(FloatPartsN *a, FloatRoundMode rmode,
1264
switch (a->cls) {
1265
case float_class_qnan:
1266
case float_class_snan:
1266
- partsN(return_nan)(a, s);
1267
+ *a = partsN(return_nan)(a, s);
1268
break;
1269
case float_class_zero:
1270
case float_class_inf:
@@ -1656,7 +1657,7 @@ static void partsN(scalbn)(FloatPartsN *a, int n, float_status *s)
1657
switch (a->cls) {
1658
case float_class_snan:
1659
case float_class_qnan:
1659
- partsN(return_nan)(a, s);
1660
+ *a = partsN(return_nan)(a, s);
1661
break;
1662
case float_class_zero:
1663
case float_class_inf:
fpu/softfloat.c
+7
-7
@@ -2378,7 +2378,7 @@ static void parts_float_to_e5m2(FloatParts64 *a, float_status *s, bool saturate)
2378
switch (a->cls) {
2379
case float_class_snan:
2380
case float_class_qnan:
2381
- parts64_return_nan(a, s);
2381
+ *a = parts64_return_nan(a, s);
2382
break;
2383
2384
case float_class_inf:
@@ -2405,7 +2405,7 @@ static void parts_float_to_e5m2(FloatParts64 *a, float_status *s, bool saturate)
2405
static void parts64_float_to_float(FloatParts64 *a, float_status *s)
2406
{
2407
if (is_nan(a->cls)) {
2408
- parts64_return_nan(a, s);
2408
+ *a = parts64_return_nan(a, s);
2409
}
2410
if (a->cls == float_class_denormal) {
2411
float_raise(float_flag_input_denormal_used, s);
@@ -2415,7 +2415,7 @@ static void parts64_float_to_float(FloatParts64 *a, float_status *s)
2415
static void parts128_float_to_float(FloatParts128 *a, float_status *s)
2416
{
2417
if (is_nan(a->cls)) {
2418
- parts128_return_nan(a, s);
2418
+ *a = parts128_return_nan(a, s);
2419
}
2420
if (a->cls == float_class_denormal) {
2421
float_raise(float_flag_input_denormal_used, s);
@@ -2441,7 +2441,7 @@ static FloatParts64 parts128_to_parts64(FloatParts128 *b, float_status *s)
2441
case float_class_qnan:
2442
/* Discard the low bits of the NaN. */
2443
r.frac = b->frac_hi;
2444
- parts64_return_nan(&r, s);
2444
+ r = parts64_return_nan(&r, s);
2445
break;
2446
default:
2447
break;
@@ -2461,7 +2461,7 @@ static FloatParts128 parts64_to_parts128(FloatParts64 *b, float_status *s)
2461
switch (r.cls) {
2462
case float_class_qnan:
2463
case float_class_snan:
2464
- parts128_return_nan(&r, s);
2464
+ r = parts128_return_nan(&r, s);
2465
break;
2466
case float_class_denormal:
2467
float_raise(float_flag_input_denormal_used, s);
@@ -4458,7 +4458,7 @@ static void parts64_log2(FloatParts64 *a, float_status *s, const FloatFmt *fmt)
4458
break;
4459
case float_class_snan:
4460
case float_class_qnan:
4461
- parts64_return_nan(a, s);
4461
+ *a = parts64_return_nan(a, s);
4462
return;
4463
case float_class_zero:
4464
float_raise(float_flag_divbyzero, s);
@@ -5067,7 +5067,7 @@ float32 float32_exp2(float32 a, float_status *status)
5067
break;
5068
case float_class_snan:
5069
case float_class_qnan:
5070
- parts64_return_nan(&xp, status);
5070
+ xp = parts64_return_nan(&xp, status);
5071
return float32_round_pack_canonical(&xp, status);
5072
case float_class_inf:
5073
return xp.sign ? float32_zero : a;