diff options
author | Alex Bennée <alex.bennee@linaro.org> | 2018-04-13 15:03:34 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-04-16 10:10:31 +0100 |
commit | 801bc56336a127d9b351b3a2cc0336e4d0cb2686 (patch) | |
tree | a3dcc00133cb05105e8223da4e676bbe85e885bf /fpu | |
parent | 6245327a367292b354489c54e965646823023919 (diff) |
fpu/softfloat: raise float_invalid for NaN/Inf in round_to_int_and_pack
The re-factor broke the raising of INVALID when NaN/Inf is passed to
the float_to_int conversion functions. round_to_uint_and_pack got this
right for NaN but also missed out the Inf handling.
Fixes https://bugs.launchpad.net/qemu/+bug/1759264
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Tested-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20180413140334.26622-3-alex.bennee@linaro.org
Cc: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'fpu')
-rw-r--r-- | fpu/softfloat.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 9b99aa6ec8..fb8663f59e 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1344,8 +1344,10 @@ static int64_t round_to_int_and_pack(FloatParts in, int rmode, case float_class_qnan: case float_class_dnan: case float_class_msnan: + s->float_exception_flags = orig_flags | float_flag_invalid; return max; case float_class_inf: + s->float_exception_flags = orig_flags | float_flag_invalid; return p.sign ? min : max; case float_class_zero: return 0; @@ -1437,6 +1439,7 @@ static uint64_t round_to_uint_and_pack(FloatParts in, int rmode, uint64_t max, s->float_exception_flags = orig_flags | float_flag_invalid; return max; case float_class_inf: + s->float_exception_flags = orig_flags | float_flag_invalid; return p.sign ? 0 : max; case float_class_zero: return 0; |