[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [6102] Correctly normalize values and handle zero inputs to
From: |
Paul Brook |
Subject: |
[Qemu-devel] [6102] Correctly normalize values and handle zero inputs to scalbn functions. |
Date: |
Fri, 19 Dec 2008 12:59:29 +0000 |
Revision: 6102
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6102
Author: pbrook
Date: 2008-12-19 12:59:28 +0000 (Fri, 19 Dec 2008)
Log Message:
-----------
Correctly normalize values and handle zero inputs to scalbn functions.
Signed-off-by: Paul Brook <address@hidden>
Modified Paths:
--------------
trunk/fpu/softfloat.c
Modified: trunk/fpu/softfloat.c
===================================================================
--- trunk/fpu/softfloat.c 2008-12-19 12:57:18 UTC (rev 6101)
+++ trunk/fpu/softfloat.c 2008-12-19 12:59:28 UTC (rev 6102)
@@ -5479,8 +5479,14 @@
if ( aExp == 0xFF ) {
return a;
}
- aExp += n;
- return roundAndPackFloat32( aSign, aExp, aSig STATUS_VAR );
+ if ( aExp != 0 )
+ aSig |= 0x00800000;
+ else if ( aSig == 0 )
+ return a;
+
+ aExp += n - 1;
+ aSig <<= 7;
+ return normalizeRoundAndPackFloat32( aSign, aExp, aSig STATUS_VAR );
}
float64 float64_scalbn( float64 a, int n STATUS_PARAM )
@@ -5496,8 +5502,14 @@
if ( aExp == 0x7FF ) {
return a;
}
- aExp += n;
- return roundAndPackFloat64( aSign, aExp, aSig STATUS_VAR );
+ if ( aExp != 0 )
+ aSig |= LIT64( 0x0010000000000000 );
+ else if ( aSig == 0 )
+ return a;
+
+ aExp += n - 1;
+ aSig <<= 10;
+ return normalizeRoundAndPackFloat64( aSign, aExp, aSig STATUS_VAR );
}
#ifdef FLOATX80
@@ -5514,9 +5526,12 @@
if ( aExp == 0x7FF ) {
return a;
}
+ if (aExp == 0 && aSig == 0)
+ return a;
+
aExp += n;
- return roundAndPackFloatx80( STATUS(floatx80_rounding_precision),
- aSign, aExp, aSig, 0 STATUS_VAR );
+ return normalizeRoundAndPackFloatx80( STATUS(floatx80_rounding_precision),
+ aSign, aExp, aSig, 0 STATUS_VAR );
}
#endif
@@ -5534,8 +5549,14 @@
if ( aExp == 0x7FFF ) {
return a;
}
- aExp += n;
- return roundAndPackFloat128( aSign, aExp, aSig0, aSig1, 0 STATUS_VAR );
+ if ( aExp != 0 )
+ aSig0 |= LIT64( 0x0001000000000000 );
+ else if ( aSig0 == 0 && aSig1 == 0 )
+ return a;
+ aExp += n - 1;
+ return normalizeRoundAndPackFloat128( aSign, aExp, aSig0, aSig1
+ STATUS_VAR );
+
}
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [6102] Correctly normalize values and handle zero inputs to scalbn functions.,
Paul Brook <=