Przejdź do zawartości

Asembler x86/Instrukcje/SSSE3/PMADDUBSW

Z Wikibooks, biblioteki wolnych podręczników.

PMADDUBSW wykonuje mnożenie dwóch wektorów bajtów, traktując bajty z wektora docelowego jako liczby bez znaku, natomiast ze źródłowego - ze znakiem; wynikiem pośrednim jest wektor 16-bitowych liczb ze znakiem. Następnie sąsiednie elementy tego wektora są do siebie dodawane (jak w rozkazie PHADDSW, a wyniki nasycane - w przykładzie ostatniemu działaniu odpowiada psuedofunkcja Sat.

Np. rozkazowi PMADDUBSW xmm1, xmm2 odpowiada:

 { wektor pośredni }
 for i:=0 to 15 do
   temp[i] := xmm1[i] * xmm2[i];
 
 { sumowanie }
 for i:=0 to 8 do
    xmm1[i] := Sat(temp[2*i] + temp[2*i+1]);