Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: [ASM] Power-Geheimnisse

  Alt 21. Aug 2007, 11:58
Zitat von sirius:
Wo hast du denn das her?
Aus einer Unit namens "Mathe" oder so ? Turbo Delphi, sollte sich das etwas geändert haben.
Zitat:
Das ist doch viel kürzer (obs schneller ist, weis ich nicht):
Delphi-Quellcode:
function power(x,y:extended):extended;
asm
  FLD TBYTE ptr y
  FLD TBYTE ptr x
  FYL2X
Stimmt, das FLD1 und FMULP hätte ich mir an dieser Stelle sparen und FYL2X (ich liebe diesen Namen) gleich mit x und y füttern können. Mathematik nach 10 Uhr eben . Mit diesen zwei Zeilen weniger wären wir schon bei 4% Vorsprung gegenüber dem Original .
Zitat:
Es basiert eben direkt auf 2^(y*lb(x)). Jetzt ist die Frage, wie lange FYL2X, F2XM1 und FSCALE brauchen.
Es sollte aber schneller sein als exp(y*ln(x)) direkt aus der Unit math.
Jupp, auf Asm-Ebene wird das sicherlich stimmen. Aber im jenem anderen Thread suchten wir ja nach einem möglichst kurzen Power-Hochsprachen-Ersatz ohne Math-Unit. Denn sobald ich dort ein wenig mehr optimieren will, klaue ich doch gleich den Power-Code (nächste Wortspiel ) aus Math mit seinen weiteren Optimierungen (hätte nicht gedacht, dass Power wirklich eine Schleife benutzt).
Zitat:
Zu Frage I:
Schau dir mal an wozu das P hinter FMUL da ist
Zitat:
Multiply ST(i) by ST(0), store result in ST(i), and pop the register stack
Soll heißen, es passiert folgendes:
Delphi-Quellcode:
// ST0, ST1
// a, b
fxch
// b, a
fmulp st(1), st
// b, b * a
// pop ->
// b * a,
Ohne fxch gelange ich am Ende zu ST0 = a * b, wo ist also der Unterschied ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat