SSSE3 (англ. Supplemental Streaming SIMD Extensions 3) — это обозначение, данное Intel четвёртому расширению системы команд. Предыдущее имело обозначение SSE3, и Intel добавил ещё один символ "S" вместо того, чтобы увеличить номер расширения, возможно, потому, что они посчитали SSSE3 простым дополнением к SSE3.
Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды.
SSSE3 был представлен 26 июня 2006 года вместе с процессорами Xeon с кодовым именем Woodcrest.
Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-битными (MMX), так и с 128-битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды.
Новые инструкции
Работа со знаком
PABSB, PABSW, PABSD — (Packed Absolute Value {Bytes/Words/DWords}) Input — { A0, A1… } Output — { A0 * sign(A0), A1 * sign (A1)… } Каждое поле результата есть абсолютная величина соответствующего поля из src1. Фактически это те же операции PSIGNB, PSIGNH, PSIGNW, у которых оба аргумента один и тот же регистр.
PSIGNB, PSIGNW, PSIGND — (Packed Sign {Bytes/Words/DWords}) Input — { A0, A1… }, { B0, B1… } Output — { A0 * sign(B0), A1 * sign (B1)… } Каждое поле результата есть произведение поля из src1 на {-1,0,1} в зависимости от знака соответствующего поля в src2 (умножение на 0, когда поле в src2 равно нулю).
Сдвиги
PALIGNR — (Packed Align Right) Input — { A0, A1 }, { B0, B1 }, imm8 Output — { B1_B0_A1_A0 >> (imm8 * 8) } Два регистра операнда рассматривается как одно беззнаковое промежуточное значение удвоенной размерности, из которого извлекается 64-/128-битное значение начиная с байта, указанного в непосредственном аргументе-константе команды.
Перемешивание байт
PSHUFB — (Packed Shuffle Bytes) Input — { A0, A1, A2,.. A7/A15 }, { B0, B1, B2,.. B7/B15 } Output — { [AB0 AB1 AB2 …] } Перестановка байт, каждый байт результата есть некоторый байт из первого аргумента, определяемый по соответствующему байту из второго аргумента (если байт отрицательный, то в байт результат прописывается ноль, иначе используются младшие 3 или 4 бита как номер байта в первом аргументе).
Умножения
PMULHRSW — (Packed Multiply High with Round and Scale) Input — { A0, A1… }, { B0, B1… } Output — { A0 * B0, A1 * B1… } Аргументы A и B рассматриваются как вектора 16-битных знаковых чисел с фиксированной запятой представленных в диапазоне [-1,+1) (то есть 0x4000 это 0.5, а 0xa000 это −0.75 и т. д.), которые перемножаются друг с другом с корректным округлением.
PMADDUBSW — (Multiply and Add Packed Signed and Unsigned Bytes) Input — { A0, A1, A2, A3,.. }, { B0, B1, B2, B3,.. } Output — { (A0*B0+A1*B1), (A2*B2+A3*B3), … } Производится побайтное перемножение векторов A и B, промежуточные 16-битные результаты попарно складываются между собой с насыщением и выдаются как результат.
Горизонтальные сложения/вычитания целых
PHSUBW, PHSUBD — (Packed Horizontal Subtract (16- или 32-битные поля)) Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Output — { A0-A1 A2-A3 … B0-B1 B2-B3 …} Горизонтальное вычитание целых 16/32-битных полей.
PHSUBSW — (Packed Horizontal Subtract and Saturate Words (16-битные поля)) Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Output — { A0-A1 A2-A3 B0-B1 B2-B3 } Горизонтальное вычитание целых 16-битных полей с насыщением.
PHADDW, PHADDD — (Packed Horizontal Add (16- или 32-битные поля)) Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …} Горизонтальное сложение целых 16/32-битных полей.
PHADDSW — (Packed Horizontal Add and Saturate Words (16-битные поля)) Input — { A0, A1, A2, A3 }, { B0, B1, B2, B3 } Output — { A0+A1 A2+A3 … B0+B1 B2+B3 …} Горизонтальное сложение целых 16-битных полей с насыщением.
Процессоры, поддерживающие SSSE3 Intel: Xeon 5100 Series Xeon 5300 Series Xeon 3000 Series Xeon E3 Xeon E5 Xeon E7 Core 2 Duo Core 2 Quad Core 2 Extreme Core i3 Core i5 Core i7 Core i9 Pentium Dual-Core (на ноутбуках начиная с ядра Merom) Celeron (Celeron 4xx, ядро Conroe-L) Celeron Dual-Core Celeron M 500 Series Atom AMD: Основанные на Bobcat (E-240, E-350, C-30, C-50) Основанные на Jaguar Основанные на Puma Основанные на Bulldozer (FX, Opteron) Основанные на Piledriver (FX, A10, A8, A6, A4, Opteron) Основанные на Zen Основанные на Zen+ Основанные на Zen 2 Основанные на Zen 3 Основанные на Zen 4 VIA: Nano
Литература Спецификация на Core 2 Mobile Доклад Intel, признающий существование SSSE3 и описывающий SSE4 Описание системы команд, где расписаны SSSE3 инструкции Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B
Категория:Инструкции x86 Категория:Расширения архитектуры x86