Hallo,
wenn man die Funktion von kupferstecher mit Ausgabe des Assemblers kompiliert kommt doch schon der gleiche passende Assembler-Code raus.
Reicht da nicht ein simples
inline um dann genau so schnell zu sein?
Unter 64-Bit linux fpc -O3 -al -Xs kompiliert:
Code: Alles auswählen
function rech(i, j: Integer): Integer;
begin
Result:= i+j;
Result:= Result - $40;
if Result <= 0
then Result:= 0
else
if Result > $FF
then Result:= $FF;
end;
Asmstyle ATT ist das, vermute ich:
Code: Alles auswählen
.Lc1:
# Var $result located in register eax
# Var i located in register edi
# Var j located in register esi
# [ErdoesNumb.pas]
# [44] begin
# [45] Result:= i+j;
leal (%edi,%esi),%eax
# Var $result located in register eax
# [46] Result:= Result - $40;
subl $64,%eax
# Var $result located in register eax
# [48] if Result <= 0
testl %eax,%eax
jnle .Lj6
# [49] then Result:= 0
xorl %eax,%eax
ret
.Lj6:
# [51] if Result > $FF
cmpl $255,%eax
jng .Lj9
# [52] then Result:= $FF;
movl $255,%eax
.Lj9:
# [54] end;
ret
Gruß Horst