[ASM] Float negieren

[Moepi]1

Lt. Commander
Registriert
Jan. 2002
Beiträge
1.233
Um besser SIMD nutzen zu können, müsste ich in einem der XMM Register die beiden unteren Floats negieren, also das Vorzeichen ändern.
Wenn es um Integers ginge, könnte man ja mit Bitmasken was machen, aber bei Floats geht das nicht so leicht.

Daher meine Frage an Euch:
Kenn jemand eine effiziente Art, einen Float zu negieren? Optimalerweise natürlich etwas, das ich in den XMM Registern machen kann. Aber auch ein Ansatz in der FPU wär mir recht. Auf jeden Fall soll nicht auf ne Multiplikation mit -1 zurückgegriffen werden...
 
Moin,
ja z.B. 0 - die Zahl :-)
aber alternativ solltest du mal bei Intel nach folgender PDF suchen "IA-32 Intel® Architecture Software Developer’s Manual"
 
ag3nt schrieb:
aber alternativ solltest du mal bei Intel nach folgender PDF suchen "IA-32 Intel® Architecture Software Developer’s Manual"

Was glaubst Du was meine Lektüre ist? Und zwar alle 5 Teile davon :D



/Edit: Des Rätsels Lösung findet sich im Optimierungshandbuch von AMD. Die gesuchte Bitmaske ist 0x80000000:
Code:
int *signmask = (int*)malloc(2*sizeof(int));
signmask[0] = 0x80000000;
signmask[1] = 0x80000000;
__asm{
  mov    xmm7,[signmask]
  ...
  xorps  xmm1,xmm7
  ...
}

Der Opteron braucht für den XORPS nur 3 Cycles, während eine Multiplikation via MULPS 5 Cycles bräuchte.
 
Zuletzt bearbeitet:
Zurück
Oben