Asembler x86/Instrukcje/SSSE3/PMULHRSW
Wygląd
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;