[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/16] fpu/softfloat: Don't set Invalid for float-to-
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 02/16] fpu/softfloat: Don't set Invalid for float-to-int(MAXINT) |
Date: |
Tue, 15 May 2018 15:06:53 +0100 |
In float-to-integer conversion, if the floating point input
converts exactly to the largest or smallest integer that
fits in to the result type, this is not an overflow.
In this situation we were producing the correct result value,
but were incorrectly setting the Invalid flag.
For example for Arm A64, "FCVTAS w0, d0" on an input of
0x41dfffffffc00000 should produce 0x7fffffff and set no flags.
Fix the boundary case to take the right half of the if()
statements.
This fixes a regression from 2.11 introduced by the softfloat
refactoring.
Cc: address@hidden
Fixes: ab52f973a50
Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Message-id: address@hidden
---
fpu/softfloat.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index b39c0c6fbb..bc0f52fa54 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1368,14 +1368,14 @@ static int64_t round_to_int_and_pack(FloatParts in, int
rmode,
r = UINT64_MAX;
}
if (p.sign) {
- if (r < -(uint64_t) min) {
+ if (r <= -(uint64_t) min) {
return -r;
} else {
s->float_exception_flags = orig_flags | float_flag_invalid;
return min;
}
} else {
- if (r < max) {
+ if (r <= max) {
return r;
} else {
s->float_exception_flags = orig_flags | float_flag_invalid;
--
2.17.0
- [Qemu-devel] [PULL 04/16] target/arm: Implement FMOV (general) for fp16, (continued)
- [Qemu-devel] [PULL 04/16] target/arm: Implement FMOV (general) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 07/16] target/arm: Implement FCVT (scalar, fixed-point) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 06/16] target/arm: Implement FCVT (scalar, integer) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 03/16] target/arm: Fix fp_status_f16 tininess before rounding, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 12/16] target/arm: Implement FCSEL for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 01/16] fpu/softfloat: int_to_float ensure r fully initialised, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 11/16] target/arm: Implement FCMP for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 10/16] target/arm: Implement FP data-processing (3 source) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 08/16] target/arm: Introduce and use read_fp_hreg, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 09/16] target/arm: Implement FP data-processing (2 source) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 02/16] fpu/softfloat: Don't set Invalid for float-to-int(MAXINT),
Peter Maydell <=
- [Qemu-devel] [PULL 05/16] target/arm: Early exit after unallocated_encoding in disas_fp_int_conv, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 13/16] target/arm: Implement FMOV (immediate) for fp16, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 16/16] tcg: Optionally log FPU state in TCG -d cpu logging, Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 15/16] sdcard: Correct CRC16 offset in sd_function_switch(), Peter Maydell, 2018/05/15
- [Qemu-devel] [PULL 14/16] target/arm: Fix sqrt_f16 exception raising, Peter Maydell, 2018/05/15
- Re: [Qemu-devel] [PULL 00/16] target-arm queue, Peter Maydell, 2018/05/15