[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] linux-user: Fix incorrect NaN detection in
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] linux-user: Fix incorrect NaN detection in ARM nwfpe emulation |
Date: |
Fri, 7 Jan 2011 16:29:10 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
On Thu, Jan 06, 2011 at 06:34:44PM +0000, Peter Maydell wrote:
> The code in the linux-user ARM nwfpe emulation was incorrectly
> checking only for quiet NaNs when it should have been checking
> for any kind of NaN. This is probably because the code in
> question was taken from the Linux kernel, whose copy of the
> softfloat library had been modified so that float*_is_nan()
> returned true for all NaNs, not just quiet ones. The qemu
> equivalent function is float*_is_any_nan(), so use that.
> NB that this code is really obsolete since nobody uses FPE
> for actual arithmetic now; this is just cleanup following
> the recent renaming of the NaN related functions.
>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> linux-user/arm/nwfpe/fpa11_cprt.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)
Acked-by: Aurelien Jarno <address@hidden>
> diff --git a/linux-user/arm/nwfpe/fpa11_cprt.c
> b/linux-user/arm/nwfpe/fpa11_cprt.c
> index 0e61b58..be54e95 100644
> --- a/linux-user/arm/nwfpe/fpa11_cprt.c
> +++ b/linux-user/arm/nwfpe/fpa11_cprt.c
> @@ -199,21 +199,21 @@ static unsigned int PerformComparison(const unsigned
> int opcode)
> {
> case typeSingle:
> //printk("single.\n");
> - if (float32_is_quiet_nan(fpa11->fpreg[Fn].fSingle))
> + if (float32_is_any_nan(fpa11->fpreg[Fn].fSingle))
> goto unordered;
> rFn = float32_to_floatx80(fpa11->fpreg[Fn].fSingle,
> &fpa11->fp_status);
> break;
>
> case typeDouble:
> //printk("double.\n");
> - if (float64_is_quiet_nan(fpa11->fpreg[Fn].fDouble))
> + if (float64_is_any_nan(fpa11->fpreg[Fn].fDouble))
> goto unordered;
> rFn = float64_to_floatx80(fpa11->fpreg[Fn].fDouble,
> &fpa11->fp_status);
> break;
>
> case typeExtended:
> //printk("extended.\n");
> - if (floatx80_is_quiet_nan(fpa11->fpreg[Fn].fExtended))
> + if (floatx80_is_any_nan(fpa11->fpreg[Fn].fExtended))
> goto unordered;
> rFn = fpa11->fpreg[Fn].fExtended;
> break;
> @@ -225,7 +225,7 @@ static unsigned int PerformComparison(const unsigned int
> opcode)
> {
> //printk("Fm is a constant: #%d.\n",Fm);
> rFm = getExtendedConstant(Fm);
> - if (floatx80_is_quiet_nan(rFm))
> + if (floatx80_is_any_nan(rFm))
> goto unordered;
> }
> else
> @@ -235,21 +235,21 @@ static unsigned int PerformComparison(const unsigned
> int opcode)
> {
> case typeSingle:
> //printk("single.\n");
> - if (float32_is_quiet_nan(fpa11->fpreg[Fm].fSingle))
> + if (float32_is_any_nan(fpa11->fpreg[Fm].fSingle))
> goto unordered;
> rFm = float32_to_floatx80(fpa11->fpreg[Fm].fSingle,
> &fpa11->fp_status);
> break;
>
> case typeDouble:
> //printk("double.\n");
> - if (float64_is_quiet_nan(fpa11->fpreg[Fm].fDouble))
> + if (float64_is_any_nan(fpa11->fpreg[Fm].fDouble))
> goto unordered;
> rFm = float64_to_floatx80(fpa11->fpreg[Fm].fDouble,
> &fpa11->fp_status);
> break;
>
> case typeExtended:
> //printk("extended.\n");
> - if (floatx80_is_quiet_nan(fpa11->fpreg[Fm].fExtended))
> + if (floatx80_is_any_nan(fpa11->fpreg[Fm].fExtended))
> goto unordered;
> rFm = fpa11->fpreg[Fm].fExtended;
> break;
> --
> 1.6.3.3
>
>
>
--
Aurelien Jarno GPG: 1024D/F1BCDB73
address@hidden http://www.aurel32.net