@sirius:
bei mir ist Swap 32 bit (Integer)
nja, aber es ist zumindestens noch eine Funktion ist
Delphi-Quellcode:
w := Swap(w);
// erzeugt aber das selbe Ergebnis wie
ByteSwap(w);
und als Inline ist es besser
aber nee, diesen Code kann man nicht mehr optimieren, (leider geht ja bei
ASM kein Inline)
nur ein & könnte nicht schaden.
Delphi-Quellcode:
procedure SwapBytes(
var X: WideChar);
asm
mov dx, [&X]
xchg
dl, dh
mov [&X], dx
end;
procedure SwapBytes(
var X: UCS4Char);
asm
mov edx, [&X]
bswap edx
mov [&X], edx
end;
// ohne BSWAP für alte CPUs
procedure SwapBytes(
var X: UCS4Char);
asm
mov edx, [&X]
xchr dh,
dl
rol edx, 16
xchg dh,
dl
mov [&X], edx
end;
was du optimieren könntest, wäre mehrere Zeichen umzuwandeln und nicht nur Eines.
aber wie meinst du das?
Zitat:
Kommentiert ist der Code, den Delphi erzeugt.
[add]
@sirius:
Delphi-Quellcode:
function SwapBytes(X: WideChar): WideChar;
asm
xchg al, ah
end;
function SwapBytes(X: UCS4Char): UCS4Char;
asm
bswap eax
end;