![]() |
Inline Assembler und automatische Optimierung?
Moin Ihr,
also, wenn man in Delphi eine Assembler-Prozedur/Funktion erstellt, dann wird ja oftmals schon etwas Code vor und nach dem eigenem AssemblerCode ausgeführt, welche der Compiler, unabhängig von {$O-}, dort hinmacht (ein PUSH's und so). Kann man dieses Verhalten irgendwie abstellen, wenn man es nicht brauch, oder muß ich dieses immer selber rückgängig machen, wenn ich sowas nicht gebrauchen kann? Derzeit führe ich einfach die Umkehroperationen aus, um sowas loszuwerden und es funktioniert auch wunderbar, aber ohne diesen zusätzlichen und "unnötigen" Code wäre es mir lieber. [add] Zitat:
|
Re: Inline Assembler und automatische Optimierung?
Zitat:
Delphi-Quellcode:
procedure MitBremborium;
begin // <==== das erzeugt den einleitenden Code asm Add edx, 0 .... end; end; // Das reserviert Wort inline und die Direktive assembler werden aus Gründen der // Abwärtskompatibilität mitgeführt und haben keinerlei Auswirkung auf den Compiler. procedure OhneBremborium; assembler; asm // ohne begin ... end; |
Re: Inline Assembler und automatische Optimierung?
Hallo shmia!
Delphi-Quellcode:
Aaalso, der Compiler erzeugt hier keinen Ein- und Austrittscode mehe, wenn keine Parameter übergeben werden. Aber wie erreiche ich, das meine Prozedur nicht per Call aufgerufen, sondern an entsprechender Stelle in den Programmcode gesetzt wird. In Turbo-Pascal Zeiten ging das mit Inline.
procedure Irgendwas; assembler;
asm ... //Irgendwelcher Code end;
Delphi-Quellcode:
Gibt es dafür in Delphi auch ne Technik. Wenn ja, welche? Irgendwie muß ja der Compiler schließlich wissen, ob ich ein UP aufrufen, oder dessen Code direkt einfügen will.
Procedure Machwas;
Inline($cf/$0a/...); Danke schon jetzt für die Hilfe DelphiSourcer |
Re: Inline Assembler und automatische Optimierung?
Hallo Ihr!
Delphi-Quellcode:
Setzt Delphi nich den Code direkt an der Aufrufsetlle ein mit der Assembler-Direktive. Hab irgendwo gelesen, das das so sein soll?
procedure Irgendwas; assembler;
asm ... //Irgendwelcher Code end; Lernnix |
Re: Inline Assembler und automatische Optimierung?
Nein, explizites Inlining kennt der Delphi-Compiler nicht. Angeblich soll er es gelegentlich aus eigenen Stücken tun, wenn er dazu Lust hat, mir ist so ein gutes Verhalten des Compilers beim Debuggen aber noch nicht untergekommen...
Erst Delphi2005 unterstützt bei Win32-Anwendungen endlich auch Function-Inlining über explizite Direktiven. |
Re: Inline Assembler und automatische Optimierung?
Hallo!
Zitat:
Tschüß schöni |
Re: Inline Assembler und automatische Optimierung?
Zitat:
|
Re: Inline Assembler und automatische Optimierung?
Also, da ich die reinen Assemblerroutinen sind alle beim mir so
Delphi-Quellcode:
aufgebaut.
procedure Irgendwas(vars ...);
asm ... //Irgendwelcher Code end; function Irgendwas(vars ...): type; asm ... //Irgendwelcher Code end; und hier werden die obengenannten Codes automatisch eingebaut, da ja Variablen an die Prozedure übergeben werden. (das hat also nichts mit dem BEGIN/END zu tun) Ich hab zwar auch Prozeduren nach diesem Muster,
Delphi-Quellcode:
aber dort stört mich derartiges nicht.
procedure Irgendwas(vars ...);
var ... begin ... asm ... //Irgendwelcher Code end; ... end. PS: Anfangs hatte ich zwar auch dieses "unnötige" assembler mit eingebaut, aber jetzt nicht mehr.
Delphi-Quellcode:
procedure Irgendwas; assembler;
|
Re: Inline Assembler und automatische Optimierung?
Also, irgendwas stimmt hier nicht, denn nach der OH macht der Compiler immer diese Optimierungen. (hab ich jedenfalls so verstanden)
Hier macht er das nicht,
Delphi-Quellcode:
aber dafür hier (also bei mehr als 4 Byte)
Procedure Irgendwas(Var X: Integer);
ASM ... //Irgendwelcher Code RET End;
Delphi-Quellcode:
Irgendwie muß das doch in den Griff zu bekommen sein?
Procedure Irgendwas(Var X: Int64);
ASM PUSH ESP ... //Irgendwelcher Code POP ESP RET 8 End; Oder gibt es zumindestens 'ne Möglichkeit rauszufinden, ob und welcher Code eingefügt wird? Ich hab ja schon versucht Locals und Params abzufragen aber es gibt ja keine derartigen Variablen/Konstanten... |
Re: Inline Assembler und automatische Optimierung?
So mal ans Anregung: Wenn du es nicht schaffen solltest, alle "unnötigen" Befehle zu elimieren, so könntest du immer noch deine Routinen mit einem Assembler erzuegen und vom Linker miteinbinden lassen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz