Commit 8d6c92b6b18a95e079d340db117c77f0e01b71f1
1 parent
ce9ede84
softfloat-native: improve correctness of floatXX_is_neg()
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6059 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
9 additions
and
3 deletions
fpu/softfloat-native.h
| @@ -265,7 +265,9 @@ INLINE float32 float32_is_infinity(float32 a) | @@ -265,7 +265,9 @@ INLINE float32 float32_is_infinity(float32 a) | ||
| 265 | 265 | ||
| 266 | INLINE float32 float32_is_neg(float32 a) | 266 | INLINE float32 float32_is_neg(float32 a) |
| 267 | { | 267 | { |
| 268 | - return a < 0.0; | 268 | + float32u u; |
| 269 | + u.f = a; | ||
| 270 | + return u.i >> 31; | ||
| 269 | } | 271 | } |
| 270 | 272 | ||
| 271 | INLINE float32 float32_is_zero(float32 a) | 273 | INLINE float32 float32_is_zero(float32 a) |
| @@ -372,7 +374,9 @@ INLINE float64 float64_is_infinity(float64 a) | @@ -372,7 +374,9 @@ INLINE float64 float64_is_infinity(float64 a) | ||
| 372 | 374 | ||
| 373 | INLINE float64 float64_is_neg(float64 a) | 375 | INLINE float64 float64_is_neg(float64 a) |
| 374 | { | 376 | { |
| 375 | - return a < 0.0; | 377 | + float64u u; |
| 378 | + u.f = a; | ||
| 379 | + return u.i >> 63; | ||
| 376 | } | 380 | } |
| 377 | 381 | ||
| 378 | INLINE float64 float64_is_zero(float64 a) | 382 | INLINE float64 float64_is_zero(float64 a) |
| @@ -474,7 +478,9 @@ INLINE floatx80 floatx80_is_infinity(floatx80 a) | @@ -474,7 +478,9 @@ INLINE floatx80 floatx80_is_infinity(floatx80 a) | ||
| 474 | 478 | ||
| 475 | INLINE floatx80 floatx80_is_neg(floatx80 a) | 479 | INLINE floatx80 floatx80_is_neg(floatx80 a) |
| 476 | { | 480 | { |
| 477 | - return a < 0.0; | 481 | + floatx80u u; |
| 482 | + u.f = a; | ||
| 483 | + return u.i.high >> 15; | ||
| 478 | } | 484 | } |
| 479 | 485 | ||
| 480 | INLINE floatx80 floatx80_is_zero(floatx80 a) | 486 | INLINE floatx80 floatx80_is_zero(floatx80 a) |