softfloat: float*_to_int32_round_to_zero: don't assume int32 is 32 bits
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> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
a52d28afb4
commit
b3a6a2e041
@ -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 );
|
||||
|
Loading…
Reference in New Issue
Block a user