[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PATCH v2 02/27] fpu/softfloat: Don't set Invalid for
From: |
Peter Maydell |
Subject: |
Re: [Qemu-stable] [PATCH v2 02/27] fpu/softfloat: Don't set Invalid for float-to-int(MAXINT) |
Date: |
Mon, 14 May 2018 11:19:57 +0100 |
On 12 May 2018 at 01:42, Richard Henderson <address@hidden> wrote:
> From: Peter Maydell <address@hidden>
>
> 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>
This is missing your Signed-off-by: line (and a reviewed-by
would be nice too :-))
> ---
> 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
thanks
-- PMM