瀏覽代碼

* renamed rol/ror functions into rolbyte/rolword/roldword/rolqword
(and the same for ror), because their operation is very dependent on the
operand size, and it's fairly easy to misjudge the bitwidth of the outcome
of an expression in Pascal if you are not intimately familiar with the
language (or if you don't know the exact types of all involved values in
an expression)

git-svn-id: trunk@12621 -

Jonas Maebe 16 年之前
父節點
當前提交
b912e00440
共有 5 個文件被更改,包括 88 次插入88 次删除
  1. 7 7
      packages/hash/src/md5.pp
  2. 16 16
      rtl/inc/generic.inc
  3. 32 32
      rtl/inc/systemh.inc
  4. 24 24
      tests/test/trox1.pp
  5. 9 9
      tests/test/trox2.pp

+ 7 - 7
packages/hash/src/md5.pp

@@ -236,19 +236,19 @@ procedure MD4Transform(var Context: TMDContext; Buffer: Pointer);
   procedure R1(var a: Cardinal; b,c,d,x: Cardinal; s: Byte);
   // F(x,y,z) = (x and y) or ((not x) and z)
   begin
-    a := rol(dword(a + {F(b,c,d)}((b and c) or ((not b) and d)) + x), s);
+    a := roldword(dword(a + {F(b,c,d)}((b and c) or ((not b) and d)) + x), s);
   end;
 
   procedure R2(var a: Cardinal; b,c,d,x: Cardinal; s: Byte);
   // G(x,y,z) = (x and y) or (x and z) or (y and z);
   begin
-    a := rol(dword(a + {G(b,c,d)}((b and c) or (b and d) or (c and d)) + x + $5A827999), s);
+    a := roldword(dword(a + {G(b,c,d)}((b and c) or (b and d) or (c and d)) + x + $5A827999), s);
   end;
 
   procedure R3(var a: Cardinal; b,c,d,x: Cardinal; s: Byte);
   // H(x,y,z) = x xor y xor z
   begin
-    a := rol(dword(a + {H(b,c,d)}(b xor c xor d) + x + $6ED9EBA1), s);
+    a := roldword(dword(a + {H(b,c,d)}(b xor c xor d) + x + $6ED9EBA1), s);
   end;
 
 var
@@ -292,25 +292,25 @@ procedure MD5Transform(var Context: TMDContext; Buffer: Pointer);
   procedure R1(var a: Cardinal; b,c,d,x: Cardinal; s: Byte; ac: Cardinal);
   // F(x,y,z) = (x and y) or ((not x) and z)
   begin
-    a := b + rol(dword(a + {F(b,c,d)}((b and c) or ((not b) and d)) + x + ac), s);
+    a := b + roldword(dword(a + {F(b,c,d)}((b and c) or ((not b) and d)) + x + ac), s);
   end;
 
   procedure R2(var a: Cardinal; b,c,d,x: Cardinal; s: Byte; ac: Cardinal);
   // G(x,y,z) = (x and z) or (y and (not z))
   begin
-    a := b + rol(dword(a + {G(b,c,d)}((b and d) or (c and (not d))) + x + ac), s);
+    a := b + roldword(dword(a + {G(b,c,d)}((b and d) or (c and (not d))) + x + ac), s);
   end;
 
   procedure R3(var a: Cardinal; b,c,d,x: Cardinal; s: Byte; ac: Cardinal);
   // H(x,y,z) = x xor y xor z;
   begin
-    a := b + rol(dword(a + {H(b,c,d)}(b xor c xor d) + x + ac), s);
+    a := b + roldword(dword(a + {H(b,c,d)}(b xor c xor d) + x + ac), s);
   end;
 
   procedure R4(var a: Cardinal; b,c,d,x: Cardinal; s: Byte; ac: Cardinal);
   // I(x,y,z) = y xor (x or (not z));
   begin
-    a := b + rol(dword(a + {I(b,c,d)}(c xor (b or (not d))) + x + ac), s);
+    a := b + roldword(dword(a + {I(b,c,d)}(c xor (b or (not d))) + x + ac), s);
   end;
 
 var

+ 16 - 16
rtl/inc/generic.inc

@@ -2048,26 +2048,26 @@ end;
 {$ifndef FPC_HAS_INTERNAL_ROX_BYTE}
 {$ifndef FPC_SYSTEM_HAS_ROX_BYTE}
 
-function Ror(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shr 1) or (AValue shl 7);
   end;
   
 
-function Ror(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 7;
     Result:=(AValue shr Dist) or (AValue shl (8-Dist));
   end;
 
 
-function Rol(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shl 1) or (AValue shr 7);
   end;
 
 
-function Rol(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 7;
     Result:=(AValue shl Dist) or (AValue shr (8-Dist));
@@ -2079,26 +2079,26 @@ function Rol(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;
 {$ifndef FPC_HAS_INTERNAL_ROX_WORD}
 {$ifndef FPC_SYSTEM_HAS_ROX_WORD}
 
-function Ror(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shr 1) or (AValue shl 15);
   end;
 
   
-function Ror(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 15;
     Result:=(AValue shr Dist) or (AValue shl (16-Dist));
   end;
 
 
-function Rol(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shl 1) or (AValue shr 15);
   end;
 
 
-function Rol(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 15;
     Result:=(AValue shl Dist) or (AValue shr (16-Dist));
@@ -2110,26 +2110,26 @@ function Rol(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;
 {$ifndef FPC_HAS_INTERNAL_ROX_DWORD}
 {$ifndef FPC_SYSTEM_HAS_ROX_DWORD}
 
-function Ror(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shr 1) or (AValue shl 31);
   end;
 
 
-function Ror(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 31;
     Result:=(AValue shr Dist) or (AValue shl (32-Dist));
   end;
 
 
-function Rol(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shl 1) or (AValue shr 31);
   end;
 
 
-function Rol(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 31;
     Result:=(AValue shl Dist) or (AValue shr (32-Dist));
@@ -2141,26 +2141,26 @@ function Rol(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inlin
 {$ifndef FPC_HAS_INTERNAL_ROX_QWORD}
 {$ifndef FPC_SYSTEM_HAS_ROX_QWORD}
 
-function Ror(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shr 1) or (AValue shl 63);
   end;
 
 
-function Ror(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 63;
     Result:=(AValue shr Dist) or (AValue shl (64-Dist));
   end;
 
 
-function Rol(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Result:=(AValue shl 1) or (AValue shr 63);
   end;
 
 
-function Rol(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
     Dist:=Dist and 63;
     Result:=(AValue shl Dist) or (AValue shr (64-Dist));

+ 32 - 32
rtl/inc/systemh.inc

@@ -640,62 +640,62 @@ function NtoLE(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_ROX}
 
 {$ifdef FPC_HAS_INTERNAL_ROX_BYTE}
-function Ror(Const AValue : Byte): Byte;[internproc:fpc_in_ror_x];
-function Ror(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_ror_x_x];
+function RorByte(Const AValue : Byte): Byte;[internproc:fpc_in_ror_x];
+function RorByte(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_ror_x_x];
 
-function Rol(Const AValue : Byte): Byte;[internproc:fpc_in_rol_x];
-function Rol(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_rol_x_x];
+function RolByte(Const AValue : Byte): Byte;[internproc:fpc_in_rol_x];
+function RolByte(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_rol_x_x];
 {$else FPC_HAS_INTERNAL_ROX_BYTE}
-function Ror(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Ror(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
 
-function Rol(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Rol(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_ROX_BYTE}
 
 
 {$ifdef FPC_HAS_INTERNAL_ROX_WORD}
-function Ror(Const AValue : Word): Word;[internproc:fpc_in_ror_x];
-function Ror(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_ror_x_x];
+function RorWord(Const AValue : Word): Word;[internproc:fpc_in_ror_x];
+function RorWord(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_ror_x_x];
 
-function Rol(Const AValue : Word): Word;[internproc:fpc_in_rol_x];
-function Rol(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_rol_x_x];
+function RolWord(Const AValue : Word): Word;[internproc:fpc_in_rol_x];
+function RolWord(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_rol_x_x];
 {$else FPC_HAS_INTERNAL_ROX_WORD}
-function Ror(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Ror(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
 
-function Rol(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Rol(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_ROX_WORD}
 
 
 {$ifdef FPC_HAS_INTERNAL_ROX_DWORD}
-function Ror(Const AValue : DWord): DWord;[internproc:fpc_in_ror_x];
-function Ror(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_ror_x_x];
+function RorDWord(Const AValue : DWord): DWord;[internproc:fpc_in_ror_x];
+function RorDWord(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_ror_x_x];
 
-function Rol(Const AValue : DWord): DWord;[internproc:fpc_in_rol_x];
-function Rol(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_rol_x_x];
+function RolDWord(Const AValue : DWord): DWord;[internproc:fpc_in_rol_x];
+function RolDWord(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_rol_x_x];
 {$else FPC_HAS_INTERNAL_ROX_DWORD}
-function Ror(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Ror(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
 
-function Rol(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Rol(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_ROX_DWORD}
 
 
 {$ifdef FPC_HAS_INTERNAL_ROX_QWORD}
-function Ror(Const AValue : QWord): QWord;[internproc:fpc_in_ror_x];
-function Ror(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_ror_x_x];
+function RorQWord(Const AValue : QWord): QWord;[internproc:fpc_in_ror_x];
+function RorQWord(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_ror_x_x];
 
-function Rol(Const AValue : QWord): QWord;[internproc:fpc_in_rol_x];
-function Rol(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_rol_x_x];
+function RolQWord(Const AValue : QWord): QWord;[internproc:fpc_in_rol_x];
+function RolQWord(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_rol_x_x];
 {$else FPC_HAS_INTERNAL_ROX_QWORD}
-function Ror(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Ror(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RorQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
 
-function Rol(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
-function Rol(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
+function RolQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
 {$endif FPC_HAS_INTERNAL_ROX_QWORD}
 
 {$ifndef FPUNONE}

+ 24 - 24
tests/test/trox1.pp

@@ -12,65 +12,65 @@ var
 begin
   b1:=1;
   b2:=3;
-  b1:=ror(b1);
-  b1:=ror(b1,2);
-  b1:=ror(b1,b2);
+  b1:=rorbyte(b1);
+  b1:=rorbyte(b1,2);
+  b1:=rorbyte(b1,b2);
   if b1<>4 then
     do_error(1000);
 
   w1:=1;
   b2:=3;
-  w1:=ror(w1);
-  w1:=ror(w1,2);
-  w1:=ror(w1,b2);
+  w1:=rorword(w1);
+  w1:=rorword(w1,2);
+  w1:=rorword(w1,b2);
   if w1<>$400 then
     do_error(1001);
 
   d1:=1;
   b2:=3;
-  d1:=ror(d1);
-  d1:=ror(d1,2);
-  d1:=ror(d1,b2);
+  d1:=rordword(d1);
+  d1:=rordword(d1,2);
+  d1:=rordword(d1,b2);
   if d1<>$4000000 then
     do_error(1002);
 
   q1:=1;
   b2:=3;
-  q1:=ror(q1);
-  q1:=ror(q1,2);
-  q1:=ror(q1,b2);
+  q1:=rorqword(q1);
+  q1:=rorqword(q1,2);
+  q1:=rorqword(q1,b2);
   if q1<>$400000000000000 then
     do_error(1003);
 
   b1:=1;
   b2:=3;
-  b1:=rol(b1);
-  b1:=rol(b1,2);
-  b1:=rol(b1,b2);
+  b1:=rolbyte(b1);
+  b1:=rolbyte(b1,2);
+  b1:=rolbyte(b1,b2);
   if b1<>$40 then
     do_error(2000);
 
   w1:=$8001;
   b2:=3;
-  w1:=rol(w1);
-  w1:=rol(w1,2);
-  w1:=rol(w1,b2);
+  w1:=rolword(w1);
+  w1:=rolword(w1,2);
+  w1:=rolword(w1,b2);
   if w1<>$60 then
     do_error(2001);
 
   d1:=$80000001;
   b2:=3;
-  d1:=rol(d1);
-  d1:=rol(d1,2);
-  d1:=rol(d1,b2);
+  d1:=roldword(d1);
+  d1:=roldword(d1,2);
+  d1:=roldword(d1,b2);
   if d1<>$60 then
     do_error(2002);
 
   q1:=$8000000000000001;
   b2:=3;
-  q1:=rol(q1);
-  q1:=rol(q1,2);
-  q1:=rol(q1,b2);
+  q1:=rolqword(q1);
+  q1:=rolqword(q1,2);
+  q1:=rolqword(q1,b2);
   if q1<>$60 then
     do_error(2003);
 

+ 9 - 9
tests/test/trox2.pp

@@ -13,50 +13,50 @@ var
 begin
   b1:=2;
   b2:=15;
-  b1:=ror(b1,b2);
+  b1:=rorbyte(b1,b2);
   if b1<>4 then
     do_error(1000);
 
   w1:=1;
   b2:=29;
-  w1:=ror(w1,b2);
+  w1:=rorword(w1,b2);
   if w1<>$8 then
     do_error(1001);
 
   d1:=$400;
   b2:=60;
-  d1:=ror(d1,b2);
+  d1:=rordword(d1,b2);
   if d1<>$4000 then
     do_error(1002);
 
   q1:=$80000000000;
   b2:=125;
-  q1:=ror(q1,b2);
+  q1:=rorqword(q1,b2);
   if q1<>$400000000000 then
     do_error(1003);
 
   b1:=$81;
   b2:=14;
-  b1 := rol(b1, b2);
+  b1 := rolbyte(b1, b2);
   if (b1 <> $60) then
     do_error(2000);
 
 
   w1:=$8001;
   b2:=22;
-  w1:=rol(w1,b2);
+  w1:=rolword(w1,b2);
   if w1<>$60 then
     do_error(2001);
 
   d1:=$80000001;
   b2:=38;
-  d1:=rol(d1,b2);
+  d1:=roldword(d1,b2);
   if d1<>$60 then
     do_error(2002);
 
-  q1:=$8000000000000001;
+  q1:=qword($8000000000000001);
   b2:=70;
-  q1:=rol(q1,b2);
+  q1:=rolqword(q1,b2);
   if q1<>$60 then
     do_error(2003);