Набор инструкций | Год | Регистры | Типы операций | Макс. элементов | Число команд | Статус |
---|---|---|---|---|---|---|
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 | Частично |