Clinfowiki
Supplemental Streaming SIMD Extension 3 (SSSE3) — позначення, яке було дане Intel четвертому розширенню системи команд. Попереднє мало позначення SSE3, і Intel додала ще один символ 'S' замість збільшення номера версії. Часто до початку використання офіційного позначення SSSE3 ці команди називались SSE4. Також їх називали кодовими іменами Tejas New Instructions (TNI) та Merom New Instructions (MNI) за назвами процесорів, у яких Intel збиралась підтримувати ці нові команди. З’явившись у Intel Core Microarchitecture, SSSE3 доступне у серіях процесорів Xeon 5100 (версії для серверів та робочих станцій), а також у процесорах Intel Core 2 (версії для ноутбуків та робочих станцій) та Intel Atom.
Новими в SSSE3, у порівнянні з SSE3 є 16 команд, які працюють з упакованими цілими. Кожна з них може працювати і з 64-бітними (MMX), і з 128-бітними (XMM) регістрами, тому Intel у своїх матеріалах посилається на 32 нові команди.
Нові інструкції
Робота зі знаком
- PABSB, PABSW, PABSD — (Packed Absolute Value {Bytes/Words/DWords})
- Вхід — { A0, A1… }
- Вихід — { A0 * sign(A0), A1 * sign (A1)… }
Кожне поле результату є абсолютна величина відповідного поля з src1. Фактично це ті ж операції PSIGNB, PSIGNH, PSIGNW, у яких обидва аргументи один і той же регістр.
- PSIGNB, PSIGNW, PSIGND — (Packed Sign {Bytes/Words/DWords})
- Вхід — { A0, A1… }, { B0, B1… }
- Вихід — { A0 * sign(B0), A1 * sign (B1)… }
Кожне поле результату є добуток поля з src1 на {-1,0,1} в залежності від знака відповідного поля в src2 (множення на 0, коли поле в src2 дорівнює нулю).
Зсуви
- PALIGNR — (Packed Align Right)
- Вхід — { A0, A1 }, { B0, B1 }, imm8
- Вихід — { B1_B0_A1_A0 >> (imm8 * 8) }
Два регістра операнда розглядаються як одне беззнакове значення подвоєної розмірності, з якого виймається 64-/128-бітне значення починаючи з байта, вказаного у безпосередньому аргументі-константі команди.
Перемішування байтів
- PSHUFB — (Packed Shuffle Bytes)
- Вхід — { A0, A1, A2,.. A7/A15 }, { B0, B1, B2,.. B7/B15 }
- Вихід — { [AB0 AB1 AB2 …] }
Перестановка байтів, кожен байт результату є деякий байт з першого аргументу, який визначається за відповідним байтом другого аргументу (якщо байт від’ємний, то в байт результату записується нуль, у іншому випадку використовуються молодші 3 або 4 біта як номер байта у першому аргументі).
Множення
- PMULHRSW — (Packed Multiply High with Round and Scale)
- Вхід — { A0, A1… }, { B0, B1… }
- Вихід — { A0 * B0, A1 * B1… }
Аргументи A і B розглядаються як вектори 16-битных знакових чисел з фіксованою комою, представлених у діапазоні [-1,+1) (тобто 0x4000 — це 0.5, а 0xa000 — це −0.75 і т. д.), які множать одне на друге з коректним округленням.
- PMADDUBSW — (Multiply and Add Packed Signed and Unsigned Bytes)
- Вхід — { A0, A1, A2, A3,.. }, { B0, B1, B2, B3,.. }
- Вихід — { (A0*B0+A1*B1), (A2*B2+A3*B3), … }
Виконується побайтове перемноження векторів A і B, проміжні 16-бітні результати попарно складається між собою з насиченням і видаються як результат.
Горизонтальні складання/віднімання цілих
- PHSUBW, PHSUBD — (Packed Horizontal Subtract (16-ти- або 32-хбітні поля))
- Вхід — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- Вихід — { A0-A1 A2-A3 … B0-B1 B2-B3 …}
Горизонтальне віднімання цілих 16-/32-битных полів.
- PHSUBSW — (Packed Horizontal Subtract and Saturate Words (16-бітні поля))
- Вхід — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- Вихід — { A0-A1 A2-A3 B0-B1 B2-B3 }
Горизонтальне віднімання цілих 16-битных полів з насиченням.
- PHADDW, PHADDD — (Packed Horizontal Add (16-ти- або 32-хбітні поля))
- Вхід — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- Вихід — { A0+A1 A2+A3 … B0+B1 B2+B3 …}
Горизонтальне складання цілих 16-/32-битных полів.
- PHADDSW — (Packed Horizontal Add and Saturate Words (16-бітні поля))
- Вхід — { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
- Вихід — { 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
- Pentium Dual-Core
- Celeron (Celeron 4xx, ядро Conroe-L)
- Celeron Dual-Core
- Celeron M 500 Series
- Intel Atom
- AMD:
- Bobcat (E-240, E-350, C-30, C-50)
- Bulldozer
- Athlon 64 x2
- VIA:
- Nano
Література
- Опис системи команд, де описані інструкції SSSE3 [Архівовано 24 січня 2009 у Wayback Machine.]
- Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B[недоступне посилання з лютого 2019]