Forum: Object-Pascal / Delphi-Language
Delphi
by Amateurprofi,
17. Jul 2006
Ja, himitsu,
schneller geht's wohl kaum - aber kürzer (und m.E. eleganter, weil kein Register benötigt wird)
z.B. and dword ,$7FFFFFFF
oder and word ,$7FFF
oder and byte ,$7F
oder btr dword ,31
oder btr word ,15
wobei a jeweils für die Adresse steht
Forum: Object-Pascal / Delphi-Language
Delphi
by Amateurprofi,
17. Jul 2006
Ja, viele Wege führen nach Rom, aber nicht alle sind gleich gut oder gleich schnell.
Das IF und besonders die Multiplikation kosten einiges an Performance. Das dürfte auch der Grund sein, warum das ABS() so umgesetzt wird wie oben dargestellt. Das siehr zwar etwas umständlich aus, vermeidet aber die mit einem Vergleich verbundene bedingte Verzweigung.
Forum: Object-Pascal / Delphi-Language
Delphi
by Amateurprofi,
17. Jul 2006
@himitsu:
so ganz stimmt das nicht.
bei mir wird z.B. a:=Abs(a); so umgesetzt
bei Integerwerten
mov eax,
cdq // wenn a negativ dann sind in edx alle Bits=1, sonst alle=0
xor eax,edx
sub eax,edx
mov , eax