[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/20] softfloat: fix floatx80 handling of NaN
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH 01/20] softfloat: fix floatx80 handling of NaN |
Date: |
Mon, 18 Apr 2011 22:59:53 +0200 |
The floatx80 format uses an explicit bit that should be taken into account
when converting to and from commonNaN format.
When converting to commonNaN, the explicit bit should be removed if it is
a 1, and a default NaN should be used if it is 0.
When converting from commonNan, the explicit bit should be added.
Signed-off-by: Aurelien Jarno <address@hidden>
---
fpu/softfloat-specialize.h | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index b110187..fb2b5b4 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -603,9 +603,15 @@ static commonNaNT floatx80ToCommonNaN( floatx80 a
STATUS_PARAM)
commonNaNT z;
if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid
STATUS_VAR);
- z.sign = a.high>>15;
- z.low = 0;
- z.high = a.low;
+ if ( a.low >> 63 ) {
+ z.sign = a.high >> 15;
+ z.low = 0;
+ z.high = a.low << 1;
+ } else {
+ z.sign = floatx80_default_nan_high >> 15;
+ z.low = 0;
+ z.high = floatx80_default_nan_low << 1;
+ }
return z;
}
@@ -624,10 +630,11 @@ static floatx80 commonNaNToFloatx80( commonNaNT a
STATUS_PARAM)
return z;
}
- if (a.high)
- z.low = a.high;
- else
+ if (a.high) {
+ z.low = LIT64( 0x8000000000000000 ) | a.high >> 1;
+ } else {
z.low = floatx80_default_nan_low;
+ }
z.high = ( ( (uint16_t) a.sign )<<15 ) | 0x7FFF;
return z;
}
--
1.7.2.3
- [Qemu-devel] [PATCH 02/20] softfloat: fix floatx80_is_infinity(), (continued)
- [Qemu-devel] [PATCH 02/20] softfloat: fix floatx80_is_infinity(), Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 03/20] softfloat: add floatx80 constants, Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 11/20] target-i386: fix helper_flbd_ST0() wrt softfloat, Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 05/20] softfloat-native: add a few constant values, Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 01/20] softfloat: fix floatx80 handling of NaN,
Aurelien Jarno <=
- [Qemu-devel] [PATCH 16/20] target-i386: add CPU86_LDouble <-> double conversion functions, Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 04/20] softfloat: add pi constants, Aurelien Jarno, 2011/04/18
- [Qemu-devel] [PATCH 07/20] softfloat: fix float*_scalnb() corner cases, Aurelien Jarno, 2011/04/18