fpu: Simplify 0 +/- N case in parts_addsub
Consolidate the tests for zero and anynorm. Add comments for a few cases. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Richard Henderson committed
Apr 26, 2026 at 17:26 UTC
b98004ed000424bb8ee2e27408c6cef2510e828b
1 file changed
+6
-8
fpu/softfloat-parts.c.inc
+6
-8
@@ -556,6 +556,7 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig,
556
}
557
558
if (ab_mask == float_cmask_zero) {
559
+ /* 0 - 0 */
560
a.sign = s->float_rounding_mode == float_round_down;
561
return a;
562
}
@@ -581,23 +582,20 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig,
582
}
583
584
if (ab_mask == float_cmask_zero) {
585
+ /* 0 + 0 */
586
return a;
587
}
588
589
if (ab_mask & float_cmask_inf) {
590
+ /* N + Inf or Inf + N */
591
a.cls = float_class_inf;
592
return a;
593
}
594
}
595
593
- if (b.cls == float_class_zero) {
594
- g_assert(is_anynorm(a.cls));
595
- return a;
596
- }
597
-
598
- g_assert(a.cls == float_class_zero);
599
- g_assert(is_anynorm(b.cls));
600
- return b;
596
+ /* 0 +/- N or N +/- 0 */
597
+ assert((ab_mask & float_cmask_zero) && (ab_mask & float_cmask_anynorm));
598
+ return b.cls == float_class_zero ? a : b;
599
}
600
601
/*