[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/4] softfloat: fix floatx80 pseudo-denormal addition / subtr
From: |
Alex Bennée |
Subject: |
Re: [PATCH 2/4] softfloat: fix floatx80 pseudo-denormal addition / subtraction |
Date: |
Fri, 01 May 2020 19:56:55 +0100 |
User-agent: |
mu4e 1.4.1; emacs 28.0.50 |
Joseph Myers <address@hidden> writes:
> The softfloat function addFloatx80Sigs, used for addition of values
> with the same sign and subtraction of values with opposite sign, fails
> to handle the case where the two values both have biased exponent zero
> and there is a carry resulting from adding the significands, which can
> occur if one or both values are pseudo-denormals (biased exponent
> zero, explicit integer bit 1). Add a check for that case, so making
> the results match those seen on x86 hardware for pseudo-denormals.
Hmm running the super detailed test:
fp-test -s -l 2 -r all extF80_add extF80_sub
I don't see any difference between before and after the patch. This
makes me wonder if we are (or rather TestFloat) is missing something in
it's test case.
>
> Signed-off-by: Joseph Myers <address@hidden>
> ---
> fpu/softfloat.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> index ac116c70b8..6094d267b5 100644
> --- a/fpu/softfloat.c
> +++ b/fpu/softfloat.c
> @@ -5866,6 +5866,12 @@ static floatx80 addFloatx80Sigs(floatx80 a, floatx80
> b, flag zSign,
> zSig1 = 0;
> zSig0 = aSig + bSig;
> if ( aExp == 0 ) {
> + if ((aSig | bSig) & UINT64_C(0x8000000000000000) && zSig0 <
> aSig) {
> + /* At least one of the values is a pseudo-denormal,
> + * and there is a carry out of the result. */
> + zExp = 1;
> + goto shiftRight1;
> + }
> if (zSig0 == 0) {
> return packFloatx80(zSign, 0, 0);
> }
> --
> 2.17.1
--
Alex Bennée
- Re: [PATCH 2/4] softfloat: fix floatx80 pseudo-denormal addition / subtraction,
Alex Bennée <=