Message ID | 1333649555-14424-2-git-send-email-peter.maydell@linaro.org |
---|---|
State | Accepted |
Commit | b3a6a2e0417c78ec5491347eb85a7d125a5fefdc |
Headers | show |
On Thu, Apr 5, 2012 at 18:12, Peter Maydell <peter.maydell@linaro.org> wrote: > Code in the float64_to_int32_round_to_zero() function was assuming > that int32 would not be wider than 32 bits; this meant it might > not correctly detect the overflow case. We take the simple approach > of using int32_t. Also fix equivalent issues in the functions > for other float sizes. Thanks, applied both. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > fpu/softfloat.c | 8 ++++---- > 1 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/fpu/softfloat.c b/fpu/softfloat.c > index 81a7d1a..074fbc3 100644 > --- a/fpu/softfloat.c > +++ b/fpu/softfloat.c > @@ -1378,7 +1378,7 @@ int32 float32_to_int32_round_to_zero( float32 a STATUS_PARAM ) > flag aSign; > int16 aExp, shiftCount; > uint32_t aSig; > - int32 z; > + int32_t z; > a = float32_squash_input_denormal(a STATUS_VAR); > > aSig = extractFloat32Frac( a ); > @@ -2762,7 +2762,7 @@ int32 float64_to_int32_round_to_zero( float64 a STATUS_PARAM ) > flag aSign; > int16 aExp, shiftCount; > uint64_t aSig, savedASig; > - int32 z; > + int32_t z; > a = float64_squash_input_denormal(a STATUS_VAR); > > aSig = extractFloat64Frac( a ); > @@ -4248,7 +4248,7 @@ int32 floatx80_to_int32_round_to_zero( floatx80 a STATUS_PARAM ) > flag aSign; > int32 aExp, shiftCount; > uint64_t aSig, savedASig; > - int32 z; > + int32_t z; > > aSig = extractFloatx80Frac( a ); > aExp = extractFloatx80Exp( a ); > @@ -5277,7 +5277,7 @@ int32 float128_to_int32_round_to_zero( float128 a STATUS_PARAM ) > flag aSign; > int32 aExp, shiftCount; > uint64_t aSig0, aSig1, savedASig; > - int32 z; > + int32_t z; > > aSig1 = extractFloat128Frac1( a ); > aSig0 = extractFloat128Frac0( a ); > -- > 1.7.1 > >
diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 81a7d1a..074fbc3 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1378,7 +1378,7 @@ int32 float32_to_int32_round_to_zero( float32 a STATUS_PARAM ) flag aSign; int16 aExp, shiftCount; uint32_t aSig; - int32 z; + int32_t z; a = float32_squash_input_denormal(a STATUS_VAR); aSig = extractFloat32Frac( a ); @@ -2762,7 +2762,7 @@ int32 float64_to_int32_round_to_zero( float64 a STATUS_PARAM ) flag aSign; int16 aExp, shiftCount; uint64_t aSig, savedASig; - int32 z; + int32_t z; a = float64_squash_input_denormal(a STATUS_VAR); aSig = extractFloat64Frac( a ); @@ -4248,7 +4248,7 @@ int32 floatx80_to_int32_round_to_zero( floatx80 a STATUS_PARAM ) flag aSign; int32 aExp, shiftCount; uint64_t aSig, savedASig; - int32 z; + int32_t z; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); @@ -5277,7 +5277,7 @@ int32 float128_to_int32_round_to_zero( float128 a STATUS_PARAM ) flag aSign; int32 aExp, shiftCount; uint64_t aSig0, aSig1, savedASig; - int32 z; + int32_t z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a );
Code in the float64_to_int32_round_to_zero() function was assuming that int32 would not be wider than 32 bits; this meant it might not correctly detect the overflow case. We take the simple approach of using int32_t. Also fix equivalent issues in the functions for other float sizes. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- fpu/softfloat.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)