Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Ein bisschen InlineAssembler hilfe :)

  Alt 17. Nov 2009, 21:11
Delphi macht etwa das daraus
Delphi-Quellcode:
00461AF3 EB1F jmp @@Loop
@@Start:
// Unit1.pas.32: Zahl:= Zahl +1/n;
00461AF5 D905381B4600 fld 1
00461AFB DC3424 fdiv &n
00461AFE DC442408 fadd &Zahl
00461B02 DD5C2408 fstp &Zahl
00461B06 9B wait
// Unit1.pas.33: n:= n+1;
00461B07 DD0424 fld &n
00461B0A D805381B4600 fadd 1
00461B10 DD1C24 fstp &n
00461B13 9B wait
@@Loop:
// Unit1.pas.30: while Zahl < i do
00461B18 DB442410 fild &i
00461B1C DC5C2408 fcomp &Zahl
00461B20 9B wait
00461B21 DFE0 fstsw ax
00461B23 9E sahf
00461B24 77CF jnbe @@Start
Eine Optimierung, welche mir einfällt ... kann man das n denn nicht auch als Integer auslegen?
Delphi-Quellcode:
// Unit1.pas.33: n:= n+1;
00461B07 DD0424 fld &n
00461B0A D805381B4600 fadd 1
00461B10 DD1C24 fstp &n
00461B13 9B wait
Hier würde ja alles in einen winzigen Befehl (INC &i) reinpassen und das dan auch noch sofort und ohne warten auf die FPU.

Mit der ASM-Programmierung der Fließkommaeinheit kenn ich mich nicht grade aus, aber vielleicht kann man da ja die Zahl gleich da drinne lassen und nicht immer rein- und wieder rauskopieren.
Wenn man das n als Integer hätte, dann würde in der FPU ja nur vorranging mit Zahl gerechnet, wärend n, zusammen mit i womöglich sogar nur in den Registern rumgammeln könnte.


PS: wir hatten hier schon ein paar Mal, daß die hochoptimierten (Versuche von Menschen) ASM-Codes wesentlich langsamer oder wenigstens/zumindestens genauso schnell waren, wie die optimierten Delphi-Codes aus 'nem Pascal-Compiler.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat