Ver código fonte

* overflow checked mul helpers do not need to check all bits either

git-svn-id: trunk@48999 -
florian 4 anos atrás
pai
commit
3072df59ff
1 arquivos alterados com 5 adições e 10 exclusões
  1. 5 10
      rtl/inc/generic.inc

+ 5 - 10
rtl/inc/generic.inc

@@ -1401,14 +1401,13 @@ end;
     function fpc_mul_word(f1,f2 : word;checkoverflow : boolean) : word;[public,alias: 'FPC_MUL_WORD']; compilerproc;
       var
         _f1,bitpos : word;
-        b : byte;
         f1overflowed : boolean;
       begin
         fpc_mul_word:=0;
         bitpos:=1;
         f1overflowed:=false;
 
-        for b:=0 to 15 do
+        while f1<>0 do
           begin
             if (f2 and bitpos)<>0 then
               begin
@@ -1487,14 +1486,13 @@ end;
     function fpc_mul_dword(f1,f2 : dword;checkoverflow : boolean) : dword;[public,alias: 'FPC_MUL_DWORD']; compilerproc;
       var
         _f1,bitpos : dword;
-        b : byte;
         f1overflowed : boolean;
       begin
         fpc_mul_dword:=0;
         bitpos:=1;
         f1overflowed:=false;
 
-        for b:=0 to 31 do
+        while f1<>0 do
           begin
             if (f2 and bitpos)<>0 then
               begin
@@ -1598,14 +1596,13 @@ end;
     function fpc_mul_byte_checkoverflow(f1,f2 : byte) : byte;[public,alias: 'FPC_MUL_BYTE_CHECKOVERFLOW']; compilerproc;
       var
         _f1, bitpos : byte;
-        b : byte;
         f1overflowed : boolean;
       begin
         fpc_mul_byte_checkoverflow := 0;
         bitpos := 1;
         f1overflowed := false;
 
-        for b := 0 to 7 do
+        while f1<>0 do
           begin
             if (f2 and bitpos) <> 0 then
               begin
@@ -1708,14 +1705,13 @@ end;
     function fpc_mul_word_checkoverflow(f1,f2 : word) : word;[public,alias: 'FPC_MUL_WORD_CHECKOVERFLOW']; compilerproc;
       var
         _f1,bitpos : word;
-        b : byte;
         f1overflowed : boolean;
       begin
         fpc_mul_word_checkoverflow:=0;
         bitpos:=1;
         f1overflowed:=false;
 
-        for b:=0 to 15 do
+        while f1<>0 do
           begin
             if (f2 and bitpos)<>0 then
               begin
@@ -1819,14 +1815,13 @@ end;
     function fpc_mul_dword_checkoverflow(f1,f2 : dword) : dword;[public,alias: 'FPC_MUL_DWORD_CHECKOVERFLOW']; compilerproc;
       var
         _f1,bitpos : dword;
-        b : byte;
         f1overflowed : boolean;
       begin
         fpc_mul_dword_checkoverflow:=0;
         bitpos:=1;
         f1overflowed:=false;
 
-        for b:=0 to 31 do
+        while f1<>0 do
           begin
             if (f2 and bitpos)<>0 then
               begin