|
Набор инструкций |
Год |
Регистры |
Типы операций |
Макс. элементов |
Число команд |
Статус |
|---|---|---|---|---|---|---|
|
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-битного режима):
|
Категория |
Примеры |
Примерное число инструкций |
Причина устаревания |
Удаляемо? |
|---|---|---|---|---|
|
x87 FPU |
fsin, fyl2x, fpatan |
~100 |
Устарели, заменены SSE/AVX |
Можно удалить |
|
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 |
Частично |
ссылка на оригинал статьи https://habr.com/ru/articles/913586/
Добавить комментарий