@samitouri / QOSamiQemu / commits / 87ab6f0ae8

fpu: Use get_floatx80_behaviour everywhere

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Richard Henderson committed May 1, 2026 at 16:29 UTC 87ab6f0ae86aaf66d2f97565c5782be4b1c06649
4 files changed +10 -8
fpu/softfloat-parts.c.inc
+2 -2
@@ -213,7 +213,7 @@ static void partsN(canonicalize)(FloatPartsN *p, float_status *status,
213 * how we uncanonicalize results.
214 */
215 bool has_pseudo_denormals = fmt->has_explicit_bit &&
216 - (status->floatx80_behaviour & floatx80_pseudo_denormal_valid);
216 + (get_floatx80_behaviour(status) & floatx80_pseudo_denormal_valid);
217
218 if (unlikely(p->exp == 0)) {
219 if (likely(fracN(eqz)(p))) {
@@ -420,7 +420,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s,
420 } else {
421 bool is_tiny = s->tininess_before_rounding || exp < 0;
422 bool has_pseudo_denormals = fmt->has_explicit_bit &&
423 - (s->floatx80_behaviour & floatx80_pseudo_denormal_valid);
423 + (get_floatx80_behaviour(s) & floatx80_pseudo_denormal_valid);
424
425 if (!is_tiny) {
426 FloatPartsN discard;
fpu/softfloat-specialize.c.inc
+1 -1
@@ -221,7 +221,7 @@ floatx80 floatx80_default_inf(bool zSign, float_status *status)
221 * Whether the Integer bit is set in the default Infinity is
222 * target dependent.
223 */
224 - bool z = status->floatx80_behaviour & floatx80_default_inf_int_bit_is_zero;
224 + bool z = get_floatx80_behaviour(status) & floatx80_default_inf_int_bit_is_zero;
225 return packFloatx80(zSign, 0x7fff, z ? 0 : (1ULL << 63));
226 }
227
fpu/softfloat.c
+1 -1
@@ -1578,7 +1578,7 @@ floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s)
1578
1579 case float_class_inf:
1580 /* x86 and m68k differ in the setting of the integer bit. */
1581 - frac = s->floatx80_behaviour & floatx80_default_inf_int_bit_is_zero ?
1581 + frac = get_floatx80_behaviour(s) & floatx80_default_inf_int_bit_is_zero ?
1582 0 : (1ULL << 63);
1583 exp = fmt->exp_max;
1584 break;
include/fpu/softfloat.h
+6 -4
@@ -1018,7 +1018,7 @@ static inline bool floatx80_is_infinity(floatx80 a, float_status *status)
1018 bool intbit = a.low >> 63;
1019
1020 if (!intbit &&
1021 - !(status->floatx80_behaviour & floatx80_pseudo_inf_valid)) {
1021 + !(get_floatx80_behaviour(status) & floatx80_pseudo_inf_valid)) {
1022 return false;
1023 }
1024 return (a.high & 0x7fff) == 0x7fff && !(a.low << 1);
@@ -1112,6 +1112,8 @@ static inline bool floatx80_unordered_quiet(floatx80 a, floatx80 b,
1112 *----------------------------------------------------------------------------*/
1113 static inline bool floatx80_invalid_encoding(floatx80 a, float_status *s)
1114 {
1115 + FloatX80Behaviour rule = get_floatx80_behaviour(s);
1116 +
1117 if ((a.low >> 63) || (a.high & 0x7fff) == 0) {
1118 /* Anything with the Integer bit set or the exponent 0 is valid */
1119 return false;
@@ -1119,12 +1121,12 @@ static inline bool floatx80_invalid_encoding(floatx80 a, float_status *s)
1121
1122 if ((a.high & 0x7fff) == 0x7fff) {
1123 if (a.low) {
1122 - return !(s->floatx80_behaviour & floatx80_pseudo_nan_valid);
1124 + return !(rule & floatx80_pseudo_nan_valid);
1125 } else {
1124 - return !(s->floatx80_behaviour & floatx80_pseudo_inf_valid);
1126 + return !(rule & floatx80_pseudo_inf_valid);
1127 }
1128 } else {
1127 - return !(s->floatx80_behaviour & floatx80_unnormal_valid);
1129 + return !(rule & floatx80_unnormal_valid);
1130 }
1131 }
1132