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