Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Optimallösung gesucht: Little Endian <-> Big Endia

  Alt 6. Mai 2008, 17:39
@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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat