Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Inline und Asmblock unter TD2006: Problem (https://www.delphipraxis.net/78406-inline-und-asmblock-unter-td2006-problem.html)

Go2EITS 4. Okt 2006 14:58


Inline und Asmblock unter TD2006: Problem
 
Wie löst Ihr das INLINE Problem mit Assemblerroutinen.

Ich möchte eine Routine
Delphi-Quellcode:
Procedure X;INLINE;
asm
//...CODE
end;
In TD2006 einfügen. Dies wird aber leider mit einer fehlermeldung honoriert: "Inline Function darf keinen Asmblock haben." In der System Unit konnte ich die Pos mit einem INLINE versehen. Aber ob die überhaupt mitcompiliert wird?

Habt Ihr schon einen "Trick"? :gruebel:
2x die Eingabe bei der DP abgestürzt. Daher nur noch meine "Kurzfassung."

Balu der Bär 4. Okt 2006 14:59

Re: Asmblock unter TD2006 Problem
 
Ähm lass einfach das INLINE weg? :gruebel:

Go2EITS 4. Okt 2006 15:02

Re: Asmblock unter TD2006 Problem
 
Das Inline bringt doch ordentlich Geschwindigkeit. Es fällen doch umfangreiche Sicherungen weg.
Oder willst Du damit sagen das reine Asm code "geinlinet" wird?

Ultimator 4. Okt 2006 15:17

Re: Asmblock unter TD2006 Problem
 
Was meinst du damit, dass umfangreiche Sicherungen wegfallen?
Inline bedeutet, dass nicht jedesmal zu dem Code gesprungen wird, wenn er aufgerufen wird, sondern dass der Code überall dahin kopiert wird, wo er verwendet wird.

Go2EITS 4. Okt 2006 15:25

Re: Asmblock unter TD2006 Problem
 
Es fallen bei Inline die umfangreichen Registersicherungen weg, die bei Aufrufen von Proceduren Geschwindigkeit kosten. Daher gibt es ja bei "INLINE" keine "Procedurenssprünge" mehr.

Dax 4. Okt 2006 15:51

Re: Asmblock unter TD2006 Problem
 
Bei inline-Methoden kopiert der Compiler den nötigen Maschinencode dorthin, wo normalerweise der Aufruf stünde. Assemblercode hat dort nix zu suchen, weil du da mit 100% Wahrscheinlichkeit mehr Schaden anrichten würdest als du Nutzen daraus ziehen könntest.

Darum: Assembler nur ohne inline. Oder kein Assembler.

Go2EITS 4. Okt 2006 16:13

Re: Asmblock unter TD2006 Problem
 
Bin gespannt was Pos aus der Systemunit im Vergleich zu der aus FastCode Projekt unter TD2006 macht.
Unter D7 war 50% bis 70% Steigerung drin. Allein die AnsiStrAtPos aus der DP ist genial. Ist ein Ersatz zu Uppercase und Pos. Da muss ich noch mal testen, ob sich der Einbau von Fastcodes unter DP sich wirklich noch lohnt.

Balu der Bär 4. Okt 2006 16:20

Re: Asmblock unter TD2006 Problem
 
Zitat:

Zitat von Delphi Hilfe
Das reservierte Wort inline und die Direktive assembler werden aus Gründen der Abwärtskompatibilität beibehalten. Sie haben keine Auswirkungen auf den Compiler.

:gruebel:

DGL-luke 4. Okt 2006 16:26

Re: Asmblock unter TD2006 Problem
 
lol?!

also die Direktive inline wurde mit D2005 eingeführt. Und sorgt dafür, dass der Compiler, wann immer es irgendwie möglich ist, ein inlining vornimmt. vielleicht macht er das ja jetzt schon selbstständig und "braucht" die Direktive nicht mehr.

Go2EITS 4. Okt 2006 16:53

Re: Asmblock unter TD2006 Problem
 
Also:
Pos aus FastCode (die schnellste Version) ist ca. 10% schneller als die Pos aus TD2006 Unit System.
Uppercase aus FastCode (auch hier die schnellste Version verwendet) ist 20% langsamer als das Uppercase aus der TD2006 UNIT.
Ich glaubte, das mit Inline noch etwas rauszuholen sei. Da bin ich wohl im Irrtum. Es reicht auch so.

Interssant wird es, meiner Meinung nach, wenn man Uppercase und Pos durch eine Assblerprocedure ersetzt. Aber ich glaube, dass eine gute Procedure ohnen ASM, die beides zusammenfasst, kaum langsamer sein wird. Der Compiler optimiert zu optimal.

Dax 4. Okt 2006 16:55

Re: Asmblock unter TD2006 Problem
 
Zitat:

Zitat von DGL-luke
also die Direktive inline wurde mit D2005 eingeführt. Und sorgt dafür, dass der Compiler, wann immer es irgendwie möglich ist, ein inlining vornimmt. vielleicht macht er das ja jetzt schon selbstständig und "braucht" die Direktive nicht mehr.

Nope. Das gab's schon unter Turbo Pascal, damals um dem Compiler zu sagen, das er einen asm-Block (oder mehrere) zu erwarten hat ;)

Balu der Bär 4. Okt 2006 17:01

Re: Inline und Asmblock unter TD2006: Problem
 
Zitat:

Zitat von dsdt.info - Interview über Delphi 2005
Eine signifikante Neuerung, die diese Woche zum ersten Mal auf der BorCon bekanntgegeben wurde, ist die Compiler-Unterstützung für "Inline-Aufrufe". Der Delphi Diamondback Compiler unterstützt jetzt inline Funktions- und Prozeduraufrufe; das bedeutet, der Funktionsrumpf wird direkt an die auzurufende Stelle kopiert, um die Mehrarbeit für den Funktonsaufruf und den Rückgabewert bei kleinen Funtionen zu vermeiden. Man kennzeichnet die gewünschte Funktion einfach mit der neuen Compiler-Direktive "inline;" (Anstelle einer Aufrufkonvention), und der Compiler überprüft die Verwendung der Direktive an den Aufrufstellen. Abhängig vom Kontext, insbesondere der Komplexität des Aufrufs und Auslastung der Register, kann es auch sein, dass der Compiler entscheidet, die Direktive nicht zu verwenden.

Ihr verwirrt mich immer mehr. :mrgreen:

xaromz 4. Okt 2006 17:23

Re: Inline und Asmblock unter TD2006: Problem
 
Hallo,
Zitat:

Zitat von Balu der Bär
Ihr verwirrt mich immer mehr. :mrgreen:

Ist eigentlich ganz einfach: Früher gab es die Direktive "inline", um Inline-Assembler zu markieren. Seit D2005 bedeutet "inline", dass die so markierte Funktion dort, wo es sinnvoll/möglich ist, direkt in den Quellcode compiliert wird, statt eines Aufrufs der Funktion.
Borland hat also eine überholte Direktive einfach neu definiert.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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