Message ID | 20200327232042.10008-1-richard.henderson@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > All other calls to normalize*Subnormal detect zero input before > the call -- this is the only outlier. This case can happen with > +0.0 + +0.0 = +0.0 or -0.0 + -0.0 = -0.0, so return a zero of > the correct sign. > > Reported-by: Coverity (CID 1421991) > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Queued to for-5.0/random-fixes, thanks. > --- > fpu/softfloat.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fpu/softfloat.c b/fpu/softfloat.c > index 301ce3b537..ae6ba71854 100644 > --- a/fpu/softfloat.c > +++ b/fpu/softfloat.c > @@ -5856,6 +5856,9 @@ static floatx80 addFloatx80Sigs(floatx80 a, floatx80 b, flag zSign, > zSig1 = 0; > zSig0 = aSig + bSig; > if ( aExp == 0 ) { > + if (zSig0 == 0) { > + return packFloatx80(zSign, 0, 0); > + } > normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 ); > goto roundAndPack; > }
diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 301ce3b537..ae6ba71854 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5856,6 +5856,9 @@ static floatx80 addFloatx80Sigs(floatx80 a, floatx80 b, flag zSign, zSig1 = 0; zSig0 = aSig + bSig; if ( aExp == 0 ) { + if (zSig0 == 0) { + return packFloatx80(zSign, 0, 0); + } normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 ); goto roundAndPack; }
All other calls to normalize*Subnormal detect zero input before the call -- this is the only outlier. This case can happen with +0.0 + +0.0 = +0.0 or -0.0 + -0.0 = -0.0, so return a zero of the correct sign. Reported-by: Coverity (CID 1421991) Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- fpu/softfloat.c | 3 +++ 1 file changed, 3 insertions(+)