[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] fpu: Bound increment for scalbn
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] fpu: Bound increment for scalbn |
Date: |
Tue, 17 Apr 2018 10:53:25 +0100 |
On 17 April 2018 at 03:53, Richard Henderson
<address@hidden> wrote:
> Without bounding the increment, we can overflow exp either here
> in scalbn_decomposed or when adding the bias in round_canonical.
> This can result in e.g. underflowing to 0 instead of overflowing
> to infinity.
>
> The old softfloat code did bound the increment.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> fpu/softfloat.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> index ba6e654050..a589f328c9 100644
> --- a/fpu/softfloat.c
> +++ b/fpu/softfloat.c
> @@ -1883,6 +1883,12 @@ static FloatParts scalbn_decomposed(FloatParts a, int
> n, float_status *s)
> return return_nan(a, s);
> }
> if (a.cls == float_class_normal) {
> + /* The largest float type (even though not supported by FloatParts)
> + * is float128, which has a 15 bit exponent. Bounding N to 16 bits
> + * still allows rounding to infinity, without allowing overflow
> + * within the int32_t that backs FloatParts.exp.
> + */
> + n = MIN(MAX(n, -0x10000), 0x10000);
> a.exp += n;
> }
> return a;
> --
Reviewed-by: Peter Maydell <address@hidden>
thanks
-- PMM