diff options
author | Philippe Mathieu-Daudé <philmd@linaro.org> | 2025-02-11 17:15:26 +0100 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2025-03-06 15:46:18 +0100 |
commit | 35487a6dc0e53b998217b0963d10c18e84c5bb28 (patch) | |
tree | ba390049f7caaa949d8cb8fad5a13e5338378556 | |
parent | 2101c85aeab4236c7b569bcf4ccaaecf318c231d (diff) | |
download | qemu-35487a6dc0e53b998217b0963d10c18e84c5bb28.zip qemu-35487a6dc0e53b998217b0963d10c18e84c5bb28.tar.gz qemu-35487a6dc0e53b998217b0963d10c18e84c5bb28.tar.bz2 |
target/alpha: Do not mix exception flags and FPCR bits
get_float_exception_flags() returns exception flags,
which are distinct from the FPCR bits used as error code.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250211162604.83446-1-philmd@linaro.org>
-rw-r--r-- | target/alpha/fpu_helper.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c index f810a9b..6aefb9b 100644 --- a/target/alpha/fpu_helper.c +++ b/target/alpha/fpu_helper.c @@ -455,29 +455,28 @@ static uint64_t do_cvttq(CPUAlphaState *env, uint64_t a, int roundmode) { float64 fa; int64_t ret; - uint32_t exc; + uint32_t exc = 0; + int flags; fa = t_to_float64(a); ret = float64_to_int64_modulo(fa, roundmode, &FP_STATUS); - exc = get_float_exception_flags(&FP_STATUS); - if (unlikely(exc)) { + flags = get_float_exception_flags(&FP_STATUS); + if (unlikely(flags)) { set_float_exception_flags(0, &FP_STATUS); /* We need to massage the resulting exceptions. */ - if (exc & float_flag_invalid_cvti) { + if (flags & float_flag_invalid_cvti) { /* Overflow, either normal or infinity. */ if (float64_is_infinity(fa)) { exc = FPCR_INV; } else { exc = FPCR_IOV | FPCR_INE; } - } else if (exc & float_flag_invalid) { + } else if (flags & float_flag_invalid) { exc = FPCR_INV; - } else if (exc & float_flag_inexact) { + } else if (flags & float_flag_inexact) { exc = FPCR_INE; - } else { - exc = 0; } } env->error_code = exc; |