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 нові команди.

Нові інструкції

[ред. | ред. код]

Робота зі знаком

[ред. | ред. код]

Кожне поле результату є абсолютна величина відповідного поля з src1. Фактично це ті ж операції PSIGNB, PSIGNH, PSIGNW, у яких обидва аргументи один і той же регістр.

Кожне поле результату є добуток поля з src1 на {-1,0,1} в залежності від знака відповідного поля в src2 (множення на 0, коли поле в src2 дорівнює нулю).

Зсуви

[ред. | ред. код]

Два регістра операнда розглядаються як одне беззнакове значення подвоєної розмірності, з якого виймається 64-/128-бітне значення починаючи з байта, вказаного у безпосередньому аргументі-константі команди.

Перемішування байтів

[ред. | ред. код]

Перестановка байтів, кожен байт результату є деякий байт з першого аргументу, який визначається за відповідним байтом другого аргументу (якщо байт від’ємний, то в байт результату записується нуль, у іншому випадку використовуються молодші 3 або 4 біта як номер байта у першому аргументі).

Множення

[ред. | ред. код]

Аргументи A і B розглядаються як вектори 16-битных знакових чисел з фіксованою комою, представлених у діапазоні [-1,+1) (тобто 0x4000 — це 0.5, а 0xa000 — це −0.75 і т. д.), які множать одне на друге з коректним округленням.

Виконується побайтове перемноження векторів A і B, проміжні 16-бітні результати попарно складається між собою з насиченням і видаються як результат.

Горизонтальні складання/віднімання цілих

[ред. | ред. код]

Горизонтальне віднімання цілих 16-/32-битных полів.

Горизонтальне віднімання цілих 16-битных полів з насиченням.

Горизонтальне складання цілих 16-/32-битных полів.

Горизонтальне складання цілих 16-битных полів з насиченням.

Процесори, які підтримують SSSE3

[ред. | ред. код]

Література

[ред. | ред. код]