Asembler x86/Instrukcje/SSSE3/PALIGNR
PALIGNR łączy dwa 16-bajtowe wektory w jeden, 32-bajtowy, po czy wybiera z niego pewien zakres 16 bajtów i zapisuje w wektorze docelowym. Początek zakresu jest wskazywany przez trzeci argument rozkazu, 8-bitową stałą natychmiastową imm8.
Rozkazowi PALIGNR xmm1, xmm2, imm8 (128-bitowe argumenty, tj. 16-elementowe wektory) odpowiada
{ połączenie wektorów }
{ temp - wektor 32-elementowy }
for i := 0 to 15 do begin
temp[i] := xmm1[i];
temp[i+16] := xmm2[i];
end;
{ wybranie fragmentu }
for i := 0 to 15 do
xmm1[i] := temp[i + imm8];
Np.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ xmm1 = |W |i |k |i |p |e |d |i |a |, | |W |o |l |n |a | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ xmm2 = | |E |n |c |y |k |l |o |p |e |d |i |a | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Wynik działania PALIGNR xmm1, xmm2, 11:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ xmm1 = |W |o |l |n |a | |E |n |c |y |k |l |o |p |e |d | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+