Как стать автором
Обновить

Комментарии 11

А уже все префиксы «заняты», что отбирают у редких команд?
Речь о том, что команду BOUND не стали переносить в 64-битную архитектуру, поэтому место освободилось.
Двубайтных опкодов, до сих пор неиспользованных, предостаточно; а вот однобайтные, как у BOUND — дефицит.
Там не один десяток команд «не стали переносить», но Intel до сих пор успешно выпускает процессоры без поддержки 64-битного режима, так что использовать это они ещё долго не решатся.

P.S. Кстати AMD использует похожую на VEX схему, только у них она называется XOP и начинается с 8f.
Да нет же. AVX3 появится уже в Knights Landing. Вот, посмотрите сюда.

Intel AVX-512 will be first implemented in the future Intel® Xeon Phi™ processor and coprocessor known by the code name Knights Landing


На сколько я знаю, расширение SSE5, в котором появились XOP префиксы, было анонсировано даже раньше, чем AVX с VEX префиксами. Но AVX оказался более гибким и удобным, поэтому AMD оказалось вынужденным поддерживать AVX, тогда как Intel не стал поддерживать SSE5.
Сейчас в системе команд IA-32 больше тысячи инструкций. Однобайтных кодов всего 2^8 = 256, и все они уже давным давно заняты. Поэтому их действительно дефицит.

Например, когда-то байт 0x0f соответствовал инструкции POP CS, которая никогда не использовалась. Его начали использовать как код, соответствующий первому байту двухбайтовых инструкций, тем самым добавив еще 256 возможных кодировок.
INC и DEC все таки использовались, почему их не перенесли, не вкурсе?
Для меня это тоже остаётся загадкой. С другой стороны, альтернативные, более современные варианты INC/DEC, использующие ModRM для кодирования регистра/памяти, остались и в 64-битном режиме и могут использовать тот же REX. 0x40/0x48 способны только регистр адресовать.
Видимо, из-за соотношения cost/benefit: сочли неоправданным тратить 1/16 всего пространства опкодов на пару инструкций, которые используются ну уж не настолько часто.
Мне все-таки кажется, что на это решение повлияло именно присутствие аналогичных и более совершенных инструкций. Тем более, что поддержка старых вариантов INC и DEC осталось во всех режимах, кроме 64-битного.
Скорее всего, чтобы упростить декодер. REX-префиксы расположены плоной группой, достаточно провверить старший nibble, чтобы понять что перед вами REX, а если бы то же самое сотворили с кучей дыр, оставшихся от нереализованных в x86-64 команд, то декодер было бы делать куда сложнее.
Эх, мне больше нравится ISA RISC процессоров — где операторы фиксированной длины. Хотя это и ведет к некоторому разбуханию кода — например, когда надо сделать far jmp
Зарегистрируйтесь на Хабре , чтобы оставить комментарий