Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: Rotate in Delphi-Language?

  Alt 28. Okt 2014, 13:41
Und dann kann Delphi nicht die "Variablen" verschieben, was dann eh kranken Code erzeugt (umkopieren der Variablen in Register/Stack), wenn es geinlined wird.

Siehe Beispiel in #1: Für EAX und DL werden die Parameter (übergebenen) Variablen ja nicht an den stellen ersetzt, sondern vorher dort reinkopiert und nachher das Result wieder zurück.

OK, man könnte das ja auch so schreiben, wenn Delphi nicht intelligent genug ist rauszubekommen was welcher Parameter ist.
Delphi-Quellcode:
function ROL(Value: Integer; Count: Byte): Integer; inline;
asm
  ROL &Value, &Count
end;
Aber nun sind ja Value und Result ja im selben Register und schon weiß Delphi nicht mehr wo das Result hin ist.
Delphi-Quellcode:
function ROL(Value: Integer; Count: Byte): Integer; inline;
asm
  MOV &Result, &Value
  ROL &Result, &Count
end;
Und schon hat man wieder einen blöden Code.



Zitat:
Du weißt in der inline-Methode nicht welche Register in der aufrufenden Methode noch gebraucht werden
Das weiß man auch in der Funktion nicht, aber es gibt ja Regeln welche Register man immer sichern/wiederherstellen muß.
Entweder es behandelt die Register während des Inline-Codes so, als wären sie wie beim CALL belegt oder es sichert (PUSH/POP) sich die entsprechenden Register.
Und da es ein SinglePassCompiler ist, müsste Delphi immer alles sichern, da es vorher noch nicht weiß welche Register in der Prozedur verwendet werden. [edit] halt nee, das wurde vorher kompiliert und man müsste es sich nur merken.
$2B or not $2B

Geändert von himitsu (28. Okt 2014 um 13:50 Uhr)
  Mit Zitat antworten Zitat