From 3c8b24eeadff5ddc5fc331a3b541a1cec76b3307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Balogh?= Date: Wed, 6 Aug 2014 15:14:52 +0000 Subject: [PATCH] a proposed fix to the qword_to_float64 problem git-svn-id: trunk@28318 - --- rtl/inc/softfpu.pp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rtl/inc/softfpu.pp b/rtl/inc/softfpu.pp index 120109969c..14567b6082 100644 --- a/rtl/inc/softfpu.pp +++ b/rtl/inc/softfpu.pp @@ -2868,6 +2868,8 @@ point value corresponding to the abstract input. This routine is just like `roundAndPackFloat64' except that `zSig' does not have to be normalized. Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' floating-point exponent. +-- +additionally the Pascal version should support Bit 63 set in 'zSig' ---------------------------------------------------------------------------- *} @@ -2876,7 +2878,10 @@ function normalizeRoundAndPackFloat64(zSign: flag; zExp: int16; zSig: bits64): f shiftCount: int8; begin shiftCount := countLeadingZeros64( zSig ) - 1; - result := roundAndPackFloat64( zSign, zExp - shiftCount, zSig shl shiftCount); + if ( shiftCount <= 0) then + result := roundAndPackFloat64( zSign, zExp - shiftCount, zSig shr (-shiftCount)) + else + result := roundAndPackFloat64( zSign, zExp - shiftCount, zSig shl shiftCount); end; {*