HADDPD, HSUBPD Rozkazy działają na wektorach liczb zmiennoprzecinkowych podwójnej precyzji. Rozkaz HADDPD dodaje do siebie sąsiednie elementy wektorów, natomiast HSUBPD odejmuje. Instrukcja HADDPD xmm1, xmm2 wykonuje:
temp := xmm1 + xmm1 temp := xmm2 + xmm2 xmm1 := temp
natomiast HSUBPD xmm1, xmm2:
temp := xmm1 - xmm1 temp := xmm2 - xmm2 xmm1 := temp
MOVSLDUP, MOVSHDUP Rozkazy działają na wektorze liczb zmiennoprzecinkowych pojedynczej precyzji; rozkaz MOVSLDUP powiela elementy o parzystych indeksach, MOVHLDUP – o nieparzystych. Instrukcja MOVSLDUP xmm1, xmm2 wykonuje:
xmm1 := xmm2 xmm1 := xmm2 xmm1 := xmm2 xmm1 := xmm2
natomiast MOVSHDUP xmm1, xmm2:
xmm1 := xmm2 xmm1 := xmm2 xmm1 := xmm2 xmm1 := xmm2
Np. 3 2 1 0 +-----+-----+-----+-----+ xmm2 = | d | c | b | a | +-----+-----+-----+-----+
Wynik MOVSLDUP:
+-----+-----+-----+-----+ xmm1 = | c | c | a | a | +-----+-----+-----+-----+
Wynik MOVSHDUP:
+-----+-----+-----+-----+ xmm1 = | d | d | b | b | +-----+-----+-----+-----+
MOVDDUP Argumentem rozkazu jest liczba zmiennoprzecinkowa podwójnej precyzji, która w rejestrze XMM jest powielana, tj.