瀏覽代碼

a proposed fix to the qword_to_float64 problem

git-svn-id: trunk@28318 -
Károly Balogh 11 年之前
父節點
當前提交
3c8b24eead
共有 1 個文件被更改,包括 6 次插入1 次删除
  1. 6 1
      rtl/inc/softfpu.pp

+ 6 - 1
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;
 
 {*