diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2024-12-08 08:54:41 -0600 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2024-12-24 08:32:15 -0800 |
| commit | 72330260cdb42015ae72096bae37e6fdaf361737 (patch) | |
| tree | f3c8630c01f40826946e62988a3be996ee5c1cf2 | |
| parent | 6a243913aa46f3d60ce36c7a826562c6e40b64d7 (diff) | |
| download | focaccia-qemu-72330260cdb42015ae72096bae37e6fdaf361737.tar.gz focaccia-qemu-72330260cdb42015ae72096bae37e6fdaf361737.zip | |
softfloat: Add float_round_nearest_even_max
This rounding mode is used by Hexagon. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
| -rw-r--r-- | fpu/softfloat-parts.c.inc | 3 | ||||
| -rw-r--r-- | include/fpu/softfloat-types.h | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index a724f317c5..37d046cfe9 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -241,6 +241,9 @@ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s, int exp, flags = 0; switch (s->float_rounding_mode) { + case float_round_nearest_even_max: + overflow_norm = true; + /* fall through */ case float_round_nearest_even: if (N > 64 && frac_lsb == 0) { inc = ((p->frac_hi & 1) || (p->frac_lo & round_mask) != frac_lsbm1 diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index 79ca44dcc3..9d37cdfaa8 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -140,6 +140,8 @@ typedef enum __attribute__((__packed__)) { float_round_to_odd = 5, /* Not an IEEE rounding mode: round to closest odd, overflow to inf */ float_round_to_odd_inf = 6, + /* Not an IEEE rounding mode: round to nearest even, overflow to max */ + float_round_nearest_even_max = 7, } FloatRoundMode; /* |