| Набор инструкций | Год | Регистры | Типы операций | Макс. элементов | Число команд | Статус | 
|---|---|---|---|---|---|---|
| MMX | 1997 | 8×64-бит | Целочисленные | 8×8-бит или 2×32-бит | 57 | устарел | 
| 3DNow! | 1998 | 8×64-бит | FP32 | 2×32-бит | 21 | удалён | 
| SSE | 1999 | 8/16×128-бит | FP32 | 4×32-бит | 70 | активен | 
| SSE2 | 2000 | 8/16×128-бит | FP64, целочисленные | 2×64-бит, 16×8-бит | 144 | активен | 
| SSE3 | 2004 | 8/16×128-бит | FP, x87 | 4×32-бит | 13 | активен | 
| SSSE3 | 2006 | 8/16×128-бит | Целочисленные | 16×8-бит | 32 | активен | 
| SSE4.1 | 2007 | 8/16×128-бит | FP, целочисленные | 4×32-бит | 47 | активен | 
| SSE4.2 | 2008 | 8/16×128-бит | Строковые, CRC, popcnt | 16 байт | 7 | активен | 
| SSE4a | 2007 | 8/16×128-бит | Целочисленные | — | 4 | удалён | 
| AVX | 2011 | 16×256-бит | FP32/FP64 | 8×32-бит, 4×64-бит | 32 | активен | 
| AVX2 | 2013 | 16×256-бит | FP и целочисленные | 32×8-бит | 256 | активен | 
| FMA3 | 2013 | 16×128/256-бит | FP | 4×64-бит, 8×32-бит | 16 | активен | 
| FMA4 | 2011 | 16×128/256-бит | FP | 4×64-бит, 8×32-бит | 41 | удалён | 
| XOP | 2011 | 16×128/256-бит | Целочисленные | 16×8-бит | 40 | удалён | 
| F16C | 2012 | 16×128/256-бит | FP16 <-> FP32 | 8×16-бит | 2 | активен | 
| AVX-512 | 2016 | 32×512-бит + маски | FP, целочисленные, маски | 64×8-бит | 500 | частично активен | 
| AMX | 2023 | 8×8192-бит тайлы | INT8, BF16 | матрицы 16×64 | 10 | ограниченно активен | 
| AVX10 | 2024 | 32×512-бит | FP8, FP16, FP32, INT | 512-бит | 50 | в разработке | 
Общее количество всех команд во всех этих расширениях — 1342 инструкции!
При этом очень много дублирования / переизобретения функционала. Если бы не обратная совместимость — можно было бы половину удалить (MMX/MMX2, например, точно бы удалить).
От комментариев воздержусь, оставлю эту привилегию читателю ))
При этом SIMD на RiscV очень хвалят, как очень продуманный, минималистичный, при этом мощный и выразительный: https://www.youtube.com/watch?v=lwIBp6cc-HY
PS: Другие наборы команд, которые можно было бы удалить из x86, которые не удаляют из за обратной совместимости (в частости, наборы команд для 16/32-битного режима):
| Категория | Примеры | Примерное число инструкций | Причина устаревания | Удаляемо? | 
|---|---|---|---|---|
| MMX | paddb, emms | 57 | Вытеснен SSE2, не используется | Да | 
| 3DNow! | pfadd, pfrcp | 21 | Удалён из CPU AMD | Да | 
| Сегментация | lds, les, lfs, lgs, arpl | ~15 | Не используется в x86-64 | Да | 
| Task switching | ltr, str, call far, ret far | ~10 | ОС используют программный планировщик | Да | 
| BCD/строковые устаревшие | daa, das, aam, aad, into | ~15 | Не используются компиляторами | Да | 
| ESC/WAIT | wait, esc | ~5 | Для старых FPU, неактуально | Да | 
| XLAT и подобные | xlat | 1 | Устарела, почти не применяется | Да | 
| Loop-prefixed | loop, loope, loopne | 3 | Медленнее обычных jmp/cmp | Частично | 
| BOUND | bound | 1 | Никем не используется | Да | 
| 16-битные только | pushaw, popaw, jcxz | ~8 | Только real/protected mode; не используются в x86-64 | Да | 
| 32-битные только | pushad, popad, jecxz | ~8 | Недоступны в x86-64; заменены другими средствами | Да | 
| Старые far-call инструкции | call far ptr, jmp far ptr | ~4 | Только 16/32-битный сегментный код | Да | 
| INT xx (кроме 0x80/0x3) | int 0x21, int 0x13 | много | BIOS/DOS, неактуальны | Да (в usermode) | 
| IN/OUT инструкции | in al, dx / out dx, al | ~6 | Только для доступа к портам; не применяются в usermode | Частично | 
Комментарии (7)
 - Salabar28.05.2025 11:40- У Риск В минималистичный симд, потому что он состоит из необходимого минимума. Как только у производителей появятся настоящие клиенты, образуется столько расширений, что их в одной статье не перечислишь. 
 - Sun-ami28.05.2025 11:40- Как это можно удалить x87 FPU, если команд для работы с 80-битным форматом больше ни в одном наборе нет?  - mpa4b28.05.2025 11:40- х87 даже синусы считает неточно, попробуйте посчитать sin(M_PI) при помощи SSE(2) и при помощи х87. - А если вам не хватает 53 бит мантиссы, попробуйте для начала https://en.wikipedia.org/wiki/Double-double_(arithmetic)#Double-double_arithmetic  - 0serg28.05.2025 11:40- Тригонометрические функции это не то что «даже» считается неточно, это единственное что там реализовано не идеально. Но даже эта проблема имеет нулевую практическую значимость и скорее является косяком документации которая гарантировала максимальную ошибку в относительных единицах тогда как реальная реализация fsin обеспечивает ее в абсолютной величине. Ну как бы да, формально нехорошо что величина синуса равная 1e-18 считается для некоторых значений с абсолютной погрешностью 1e-23 а не 1e-30 что формально обещает стандарт ( конкретные значения взяты с потолка чтобы показать принцип). Влияет это на хоть что то? Сомневаюсь. В любом случае в sse и даже в avx вплоть до avx-512 специальных инструкций для подсчета синуса аналогичных fsin просто нету, а любой алгоритм реализованный на обычных инструкциях даст лучшие результаты при использовании long double. 
 
 
 
           
 

0serg
Ну это не полностью разные команды все-таки а разные вариации одних и тех же команд. FMA например это все по сути одна команда. Различия только в знаках (a*b+c, a*b-c, -a*b+c) и типах операндов (fp32, fp64, fp32 packed,....)․ Там декодер по сути достает эту одну команду и пару бит в виде "флагов" управляющих ею. Кроме того не все эти инструкции поддерживаются. Например FMA4 и FMA3 взаимно исключающие (разные реализации одного и того же). AVX512 вообще прям by design состоит из нескольких поднаборов инструкций которые могут поддерживаться не полностью. Наконец в списке инструкции частично "продублированы" - например FMA является частью AVX2․ Так что не все так плохо, да.