@samitouri / QOSamiQemu / commits / b98004ed00

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 /*