Asembler x86/Instrukcje/SSSE3/PMULHRSW

PMULHRSW mnoży wektory słów ze znakiem; wyniki mnożenia są zaokrąglane zgodnie z algorytmem:

  • wynikiem mnożenia liczb 16-bitowych jest liczba 32-bitowa,
  • z wyniku brane jest wartość pośrednia - 18 najstarszych bitów (tj. bity 14..31),
  • która następnie zwiększana jest o 1,
  • ostatecznie zapisuje się 16 najstarszych bitów z 18-bitowego wyniku pośredniego.

Np. rozkazowi PMULHRSW xmm1, xmm2 odpowiada:

 for i:=0 to 7 do
   begin
     temp := xmm1[i] * xmm2[i]; { mnożenie 16-bitowych liczb }
     temp := temp SAR 14;       { 18 najstarszych bitów wyniku }
     temp := temp + 1;
     xmm1[i] := temp SAR 2;     { 16 najstarszych bitów temp }
   end;