diff mbox

[v2,1/2] softfloat: float*_to_int32_round_to_zero: don't assume int32 is 32 bits

Message ID 1333649555-14424-2-git-send-email-peter.maydell@linaro.org
State Accepted
Commit b3a6a2e0417c78ec5491347eb85a7d125a5fefdc
Headers show

Commit Message

Peter Maydell April 5, 2012, 6:12 p.m. UTC
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(-)

Comments

Blue Swirl April 7, 2012, 2:15 p.m. UTC | #1
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 mbox

Patch

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 );