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 <[email protected]>
Signed-off-by: Blue Swirl <[email protected]>
flag aSign;
int16 aExp, shiftCount;
uint32_t aSig;
flag aSign;
int16 aExp, shiftCount;
uint32_t aSig;
a = float32_squash_input_denormal(a STATUS_VAR);
aSig = extractFloat32Frac( a );
a = float32_squash_input_denormal(a STATUS_VAR);
aSig = extractFloat32Frac( a );
flag aSign;
int16 aExp, shiftCount;
uint64_t aSig, savedASig;
flag aSign;
int16 aExp, shiftCount;
uint64_t aSig, savedASig;
a = float64_squash_input_denormal(a STATUS_VAR);
aSig = extractFloat64Frac( a );
a = float64_squash_input_denormal(a STATUS_VAR);
aSig = extractFloat64Frac( a );
flag aSign;
int32 aExp, shiftCount;
uint64_t aSig, savedASig;
flag aSign;
int32 aExp, shiftCount;
uint64_t aSig, savedASig;
aSig = extractFloatx80Frac( a );
aExp = extractFloatx80Exp( a );
aSig = extractFloatx80Frac( a );
aExp = extractFloatx80Exp( a );
flag aSign;
int32 aExp, shiftCount;
uint64_t aSig0, aSig1, savedASig;
flag aSign;
int32 aExp, shiftCount;
uint64_t aSig0, aSig1, savedASig;
aSig1 = extractFloat128Frac1( a );
aSig0 = extractFloat128Frac0( a );
aSig1 = extractFloat128Frac1( a );
aSig0 = extractFloat128Frac0( a );