From 0b14835608274efd614e3a224e533f74f6c7e82c Mon Sep 17 00:00:00 2001 From: kieron Date: Fri, 10 Jul 2020 17:13:57 +0000 Subject: [PATCH] Rol & Ror git-svn-id: https://spexeah.com:8443/svn/Asuro@933 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- src/include/util.pas | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/include/util.pas b/src/include/util.pas index 781314dd..e8f7741d 100644 --- a/src/include/util.pas +++ b/src/include/util.pas @@ -485,6 +485,52 @@ begin getTSC:= (hi SHL 32) OR lo; end; +function RolDWord(AValue : uint32; Dist : uint8) : uint32; +var + result : uint32; + i : uint8; + +begin + result:= AValue; + asm + PUSH EAX + end; + for i:=0 to Dist-1 do begin + asm + MOV EAX, result + ROL result, 1 + MOV result, EAX + end; + end; + asm + POP EAX + end; + RolDWord:= result; +end; + +function RorDWord(AValue : uint32; Dist : uint8) : uint32; +var + result : uint32; + i : uint8; + +begin + result:= AValue; + asm + PUSH EAX + end; + for i:=0 to Dist-1 do begin + asm + MOV EAX, result + ROR result, 1 + MOV result, EAX + end; + end; + asm + POP EAX + end; + RorDWord:= result; +end; + procedure BSOD(fault : pchar; info : pchar); var trace : pchar;