Дополнительные расширения SIMD для потоковой передачи 3 (SSSE3 или SSE3S ) - это SIMD набор инструкций, созданный Intel и являющийся четвертой версией технологии SSE.
SSSE3 был впервые представлен с процессорами Intel на основе микроархитектуры Core 26 июня 2006 года с процессорами Woodcrest Xeon.
SSSE3 упоминается под кодовыми именами Tejas New Instructions (TNI) или Merom New Instructions (MNI) для первых разработок процессоров, предназначенных для его поддержки.
SSSE3 содержит 16 новых дискретных инструкций. Каждая инструкция может воздействовать на 64-битные регистры MMX или 128-битные XMM. Поэтому в материалах Intel упоминаются 32 новые инструкции. В их число входят:
В таблице ниже satsw (X) (читается как «насыщение до знакового слова») принимает целое число X со знаком и преобразует его в -32768, если оно меньше -32768, в +32767 если он больше 32767, и в противном случае оставляет его без изменений. Как правило, для архитектуры Intel байты составляют 8 бит, слова - 16 бит, а двойные слова - 32 бита; «регистр» относится к векторному регистру MMX или XMM.
PSIGNB, PSIGNW, PSIGND | Packed Sign | Отменяет элементы регистра байтов, слов или двойных слов, если знак соответствующих элементов другого регистра отрицательный. |
---|---|---|
PABSB, PABSW, PABSD | Упакованное абсолютное значение | Заполните элементы регистра байтов, слов или двойных слов абсолютными значениями элементов другого регистра |
PALIGNR | Packed Align Right | берет два регистра, объединяет их значения и извлекает секцию длины регистра из смещения, заданного непосредственным значением, закодированным в инструкции. |
PSHUFB | Packed Shuffle Bytes | принимает регистры байтов A = [a 0a1a2...] и B = [b 0b1b2...] и заменяет A на [a b0ab1ab2...]; за исключением того, что он заменяет i-ю запись на 0, если установлен верхний бит b i. |
PMULHRSW | Packed Multiply High with Round and Scale | обрабатывает 16-битные слова в регистрах A и B как 16-битные числа со знаком с фиксированной точкой в диапазоне от -1,00000000 до +0,99996948... (например, 0x4000 обрабатывается как +0,5, а 0xA000 как -0,75), и умножьте их вместе с правильным округлением. |
PMADDUBSW | Умножение и сложение упакованных байтов со знаком и без знака | Возьмите байты в регистрах A и B, умножьте их вместе, сложите пары, выполните насыщение со знаком и сохраните. Т.е. [a0 a1 a2…] pmaddubsw [b0 b1 b2…] = [satsw (a0b0 + a1b1) satsw (a2b2 + a3b3)…] |
PHSUBW, PHSUBD | Упакованное горизонтальное вычитание (слова или двойные слова) | принимает регистры A = [a0 a1 a2…] и B = [b0 b1 b2…] и выводит [a0 − a1 a2 − a3… b0 − b1 b2 − b3…] |
PHSUBSW | Упакованные слова горизонтального вычитания и насыщения | как PHSUBW, но выводят [satsw (a0-a1) satsw (a2-a3)… satsw (b0-b1) satsw (b2-b3)…] |
PHADDW, PHADDD | Упакованное горизонтальное сложение (слова или двойные слова) | принимает регистры A = [a0 a1 a2…] и B = [b0 b1 b2…] и выводит [a0 + a1 a2 + a3… b0 + b1 b2 + b3…] |
PHADDSW | Упакованные слова горизонтального добавления и насыщения | как PHADDW, но выводит [satsw (a0 + a1) satsw (a2 + a3) … Satsw (b0 + b1) satsw (b2 + b3)…] |