Archiv verlassen und diese Seite im Standarddesign anzeigen : Quersumme von SSE-Register
Matti
2004-06-30, 11:10:28
ich will alle 4 Floats in einem SSE-Register addieren. Bei 3dnow gibts ja einen Befehl dafür, bei SSE aber nicht. Klar könnte man das auch so machen:
1. xmm0->xmm1
2. xmm1 um 32 Bit verschieben
3. xmm0+xmm1
4. xmm1 um 32 Bit verschieben
5. xmm0+xmm1
6. xmm1 um 32 Bit verschieben
7. xmm0+xmm1
Dann steht die Summe in xmm0. Ist jetzt die Frage, ob man das vielleicht auch effektiver machen könnte...
Matti
2004-06-30, 13:01:42
zu allem Übel habe ich jetzt noch festgestellt, daß Shift-Operationen mit xmm-Registern erst ab SSE2 möglich sind. Wie kann man die Quersumme mit SSE1 berechnen???
Demirug
2004-06-30, 13:53:01
Schuffeln könnte helfen. Aber der SSE Experte ist Zecki.
Wenn du was findest wohl mit Shuffle oder Unpack.
Mit nem UNPCKHPS von reg1 und reg1 nach reg2 und nem add der beiden hast du hinten schon a+c und b+d stehen.
Zum Weiterüberlegen bin zu faul ;)
Aber so dürfte das irgendwie ohne teuren Shift gehen.
Allerdings weiss ich die kosten für ein unpack nicht und die Tabelle liegt irgendwie grad nid hier rum :(
Matti
2004-06-30, 14:42:52
ist zwar OT, aber:
wo kann man eine Befehls-Beschreibung aller SSE-Befehle her bekommen? ...ich hab bis jetzt nur eine Liste, wo ASM-Befehl und die deutsche Übersetzung drinsteht, aber in einigen Fällen brauche ich eben auch eine kurze Beschreibung und vor allem die Syntax (welche Operationen sind mit 1 und welche mit 2 Registern).
zeckensack
2004-06-30, 15:13:32
;xmm0:= d | c | b | a
XORPS xmm1,xmm1 ;lösch0rn (wegen den ungenutzen hohen Bits)
MOVHLPS xmm1,xmm0 ;xmm1:= 0 | 0 | d | c
ADDPS xmm0,xmm0 ;xmm0:= d | c | d+b | c+a
MOVSS xmm1,xmm0 ;xmm1:= 0 | 0 | d | c+a
SHUFPS xmm0,xmm0,1 ;xmm0:= c+a | c+a| c+a | d+b
ADDSS xmm1,xmm0 ;xmm1:= 0 | 0 | d | c+a+d+b
MOVSS dword [hinfort_damit],xmm1
Als Dokumentation empfehle ich die Arbeit des NASM-Projekts (http://sourceforge.net/projects/nasm). Dieses Paket (http://prdownloads.sourceforge.net/nasm/nasm-0.98.38-xdoc.zip?download) enthält unter anderem eine Kurzreferenz zum kompletten Befehlssatz, im HTML-Format.
Für Detailfragen wirst du dieses Monster-PDF von Intel (http://www.intel.com/design/pentiumii/manuals/243191.htm) bemühen müssen.
Matti
2004-06-30, 16:17:27
Original geschrieben von zeckensack
Dieses Paket (http://prdownloads.sourceforge.net/nasm/nasm-0.98.38-xdoc.zip?download) enthält unter anderem eine Kurzreferenz zum kompletten Befehlssatz, im HTML-Format.
Danke! Genau sowas habe ich gesucht :)
...und den Code werde ich dann mal ausprobieren...
micki
2004-07-02, 09:47:23
wenn ich mich nicht irre, geht das in SSE3 mit einem Befehl *hehe*
MfG
micki
zeckensack
2004-07-02, 11:47:56
Original geschrieben von micki
wenn ich mich nicht irre, geht das in SSE3 mit einem Befehl *hehe*
MfG
micki Ja (http://www.forum-3dcenter.org/vbulletin/showthread.php?threadid=123719).
Auf einem K6-2 kann man das so lösen:;mm0:= b | a
;mm1:= d | c
PFACC mm0,mm1 ;mm0:= d+c | b+a
PFACC mm0,mm0 ;mm0:= b+a+d+c | b+a+d+c
MOVD dword [hinfort_damit],mm0Intel ist eben ein bisserl rückständig ;)
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.