Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: [ASM / SSE] Vektoroperationen

  Alt 13. Jun 2012, 19: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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