2. Pascal version does not match assembler version. Had to fix it.
//Result := X + Counter + $87654321;
Result:=Result + X + $87654321;
Result:=Result xor y;
3. Assembler functions can be unified to work under win64,win32, linux 64, linux 32
function Checksum_LEA(const Input, X, Y: LongWord): LongWord; assembler; nostackframe;
asm
@Loop2:
LEA Input, [Input + X + $87654321]
XOR Input, y
DEC y
JNZ @Loop2
MOV EAX, Input
end;
4. My results. Ryzen 2700x
Pascal control case: 0.7 ns/call 0.0710
Using LEA instruction: 0.7 ns/call 0.0700
Using ADD instructions: 0.7 ns/call 0.0710
Even thou results are equal, i was able to add 4 independent ADD instructions around LEA while results didn't chance, but only 2 around ADD.
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel