Asembler x86/Instrukcje/SSE4/DPPS

Działa na dwóch wektorach liczb zmiennoprzecinkowych pojedynczej precyzji (każdy po 4 liczby), obliczając iloczyn skalarny dla wybranych elementów argumentu źródłowego. W argumencie docelowym na wskazanych pozycjach zapisywany jest albo wynik, albo wartość 0.

Trzeci argument rozkazu, 8-bitowa stała natychmiastowa, przechowuje dwie maski bitowe:

  • na bitach 4..7 maskę określającą które elementy wchodzą w skład iloczynu skalarnego,
  • na bitach 0..3 maskę określającą które elementy docelowego maja zostać wyzerowane, a które zawierać wynik.

Rozkaz DPPS xmm1, xmm2, imm8 wykonuje:

{ obliczenie iloczynu skalarnego wybranych elementów }
dot := 0.0
for i:= 0 to 3 do
   if imm8[i+4] = 1 then
      dot := dot + (xmm1[i] * xmm2[i])
 
{ zapisanie wyników }
for i:= 0 to 3 do
   if imm8[i] = 1 then
     xmm1[i] := dot
   else
     xmm1[i] := 0.0