Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: [ASM / SSE] Vektoroperationen

  Alt 13. Jun 2012, 20:12
Delphi-Quellcode:
function AddVecsSSE(const av1, av2: TTestVec): TTestVec;
{$IF SizeOf(Pointer) = 4}  // {$IFDEF Win32}
asm
  MOVUPS XMM0, DQWORD PTR [EAX] // MOVUPS XMM0, &av1
  MOVUPS XMM1, DQWORD PTR [EDX] // MOVUPS XMM1, &av2
  ADDPS XMM0, XMM1
  MOVUPS DQWORD PTR [ECX], XMM0 // MOVUPS &Result, XMM0
end;
{$ELSE}
begin
  Result.x := av1.x + av2.x;
  Result.y := av1.y + av2.y;
  Result.z := av1.z + av2.z;
  Result.w := av1.w + av2.w;
end;
{$IFEND}
Kompilieren läßt sich zwar auch Folgendes, nur funktionieren tut es nicht.
Delphi-Quellcode:
asm
  MOVUPS XMM0, DQWORD PTR [EAX] // MOVUPS XMM0, &av1
  ADDPS XMM0, DQWORD PTR [EDX] // ADDPS XMM0, &av2
  MOVUPS DQWORD PTR [ECX], XMM0 // MOVUPS &Result, XMM0
end;
Schade auch, daß SSE irgenwie kein Variablen mag.

[edit]
Doch, mag es.
Delphi-Quellcode:
{$IF SizeOf(Pointer) = 4}  // {$IFDEF Win32}
asm
  MOVUPS XMM0, DQWORD PTR [&av1]
  MOVUPS XMM1, DQWORD PTR [&av2]
  ADDPS XMM0, XMM1
  MOVUPS DQWORD PTR [&Result], XMM0
end;
{$ELSE}
Aber bei 32 Bit brauchte ich nie [ ], obwohl, ich bin mir grade nicht sicher, ob damals die Parameter nie ByReference übergeben wurden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Jun 2012 um 20:18 Uhr)
  Mit Zitat antworten Zitat