Przejdź do zawartości

Asembler x86/Instrukcje/SSE4/BLENDP

Z Wikibooks, biblioteki wolnych podręczników.

BLENDPS, BLENDPD

[edytuj]

Działają na wektorach — odpowiednio — słów 32- i 64-bitowych. Nadpisują w wektorze docelowym tylko te elementy z wektora źródłowego, dla których odpowiadające im bity w masce bitowe są ustawione. Maska bitowa jest trzecim argumentem rozkazów, 8-bitową stałą natychmiastową i w zależności od długości wektorów obejmuje — odpowiednio — 4 albo 2 najmłodsze bity.

Rozkazowi BLENDPS xmm1, xmm2, imm8 odpowiada:

for i:=0 to 3 do
   if imm8[i] = 1 then { bit ustawiony? }
      xmm1[i] := xmm2[i]


BLENDVPS, BLENDVPD

[edytuj]

Działają na wektorach — odpowiednio — liczb zmiennoprzecinkowych pojedynczej oraz podwójnej precyzji. Wykonują dokładnie to samo działanie, co inne wymienione wcześniej rozkazy BLENDPx, różnica polega na sposobie zapisu maski bitowej. Rozkazy BLENVPx jako domyślny argument przyjmują rejestr XMM0, a o tym, czy dany element ma zostać przepisany, decydują najstarsze bity kolejnych słów XMM0.

Np. rozkazowi BLENDVPS xmm1, xmm2 odpowiada:

 for i:=0 to 3 do
    if (XMM0[i] AND 0x80000000) = 0x80000000 then { najstarszy bit 32-bitowego słowa ustawiony? }
       xmm1[i] := xmm2[i]


PBLENDVB

[edytuj]

Działa na wektorach bajtów. Wykonuje dokładnie to samo działanie, co inne wymienione wcześniej rozkazy BLENDPx, różnica polega na sposobie zapisu maski bitowej. Rozkaz PBLENDVB jako domyślny argument przyjmują rejestr XMM0, a o tym, czy dany element ma zostać przepisany, decydują najstarsze bity kolejnych elementów XMM0.

Rozkazowi PBLENDVB xmm1, xmm2 odpowiada:

for i:=0 to 15 do
    if (XMM0[i] AND 10000000b) = 10000000b then { najstarszy bit ustawiony? }
       xmm1[i] := xmm2[i]


PBLENDW

[edytuj]

działa na wektorach słów 16--bitowych. Nadpisuje w wektorze docelowym tylko te elementy z wektora źródłowego, dla których odpowiadające im bity w masce bitowe są ustawione. Maska bitowa jest trzecim argumentem rozkazów, 8-bitową stałą natychmiastową.

Rozkazowi PBLENDW xmm1, xmm2, imm8 odpowiada:

 for i:=0 to 7 do
    if imm8[i] = 1 then { bit ustawiony? }
       xmm1[i] := xmm2[i]