Список инструкций x86, выпуск которых прекращен
Часть серии о |
списки инструкций x86 |
---|
|
Инструкции, которые в какой-то момент присутствовали в качестве документированных инструкций в одном или нескольких процессорах x86 , но серия процессоров, содержащая эти инструкции, снята с производства или заменена, без каких-либо известных планов по повторному представлению инструкций.
Интел инструкции
[ редактировать ]i386 инструкции
[ редактировать ]Следующие инструкции были представлены в Intel 80386, но позже прекращены:
Инструкция | Код операции | Описание | Возможная судьба |
---|---|---|---|
XBTS r, r/m |
0F A6 /r |
Извлечь битовую строку | Снят с производства, начиная с версии B1 модели 80386.
Коды операций кратко повторно используются для Коды операций позже повторно использовались для VIA PadLock . |
IBTS r/m, r |
0F A7 /r |
Вставить битовую строку | |
MOV r32,TRx |
0F 24 /r |
Переместить из тестового реестра | Присутствует в Intel 386 и 486 — отсутствует в Intel Pentium или любых более поздних процессорах Intel (за исключением того, что они присутствуют в Quark X1000 на базе i486 ). Присутствует во всех процессорах Cyrix . |
MOV TRx,r32 |
0F 26 /r |
Перейти в тестовый реестр |
Итаниум инструкции
[ редактировать ]Эти инструкции присутствуют только в режиме работы x86 ранних процессоров Intel Itanium с аппаратной поддержкой x86. Эта поддержка была добавлена в «Мерседе» и удалена в «Монтесито», заменена программной эмуляцией .
Инструкция | Код операции | Описание |
---|---|---|
JMPE r/m16 JMPE r/m32
|
0F 00 /6
|
Перейти к набору инструкций Intel Itanium. [ 1 ] |
JMPE disp16/32
|
0F B8 rel16/32
|
MPX-инструкции
[ редактировать ]Эти инструкции были представлены в Intel Core «Skylake» процессорах 6-го поколения. Последним поколением процессоров, поддерживавшим их, были процессоры Core 9-го поколения Coffee Lake .
Intel MPX добавляет 4 новых регистра, от BND0 до BND3, каждый из которых содержит пару адресов. MPX также определяет таблицу границ как двухуровневую структуру данных каталога/таблицы в памяти, которая содержит наборы верхних/нижних границ.
Инструкция | Код операции [ а ] | Описание |
---|---|---|
BNDMK b, m
|
F3 0F 1B /r [ б ]
|
Сделайте нижнюю и верхнюю границу из выражения адреса памяти.
Нижняя граница определяется базовой составляющей адреса, верхняя граница — 1-секундным дополнением адреса в целом. |
BNDCL b, r/m
|
F3 0F 1A /r
|
Проверьте адрес по нижней границе.
|
BNDCU b, r/m
|
F2 0F 1A /r
|
Проверьте адрес по верхней границе в форме дополнения до 1. |
BNDCN b, r/m
|
F2 0F 1B /r
|
Проверьте адрес по верхней границе. |
BMDMOV b, b/m
|
66 0F 1A /r
|
Переместить пару границ памяти в/из памяти или между регистрами границ. |
BNDMOV b/m, b
|
66 0F 1B /r
| |
BNDLDX b,mib
|
NP 0F 1A /r [ с ]
|
Загрузите границы из таблицы границ, используя преобразование адресов с помощью выражения адресации дочернего уровня mib. [ д ] |
BNDSTX mib,b
|
NP 0F 1B /r [ с ]
|
Сохраните границы в таблице границ, используя преобразование адресов с использованием выражения дочерней адресации mib. [ д ] |
BND
|
F2
|
Префикс инструкции, используемый с определенными инструкциями ветвления. [ и ] чтобы указать, что они не должны очищать регистры границ. |
- ^ Для всех инструкций MPX 16-битная адресация запрещена — это фактически приводит к тому, что префикс переопределения размера адреса
67h
обязателен в 16-битном режиме и запрещен в 32-битном режиме. В 64-битном режиме67h
префикс игнорируется для инструкций MPX — размер адреса всегда 64-битный. Такое поведение уникально для инструкций MPX. - ^ Для
BNDMK
в 64-битном режиме адресация относительно RIP не разрешена и приведет к ошибке #UD. - ^ Перейти обратно: а б The
BNDLDX
иBNDSTX
инструкции требуют режимов адресации памяти, которые используют байт SIB; режимы адресации, отличные от SIB, вызывают #UD. - ^ Перейти обратно: а б The
BNDLDX
иBNDSTX
инструкции создают исключение #BR, если запись каталога границ недействительна (что предотвращает преобразование адресов). - ^ Инструкции ветвления, которые могут принять
BND
префикс - это ближайшие формыJMP
(коды операцийE9
иFF /4
),CALL
(коды операцийE8
иFF /2
),RET
(коды операцийC2
иC3
), а также краткие/близкие формыJcc
инструкции (коды операций70..7F
и0F 80..8F
). Если бит конфигурации BNDPRESERVE не установлен, то выполнение любой из этих инструкций ветвления безBND
префикс очистит все четыре регистра границ. (Другие инструкции ветвления — например, дальние прыжки, короткие прыжки (EB
),LOOP
,IRET
и т. д. — не очищать регистры границ независимо от того,F2h
префикс присутствует или нет.)
Аппаратная блокировка
[ редактировать ]Функция Hardware Lock Elision Intel TSX помечена в Intel SDM как удаленная с 2019 года. [ 2 ] Эта функция имела форму двух префиксов инструкций: XACQUIRE
и XRELEASE
, которые могут быть прикреплены к атомам/хранилищам памяти, чтобы исключить блокировку памяти, которую они представляют.
Префикс инструкции | Код операции | Описание |
---|---|---|
XACQUIRE
|
F2
|
Префикс инструкции, обозначающий начало устранения аппаратной блокировки, используется только с атомарными инструкциями памяти (для других инструкций F2 префикс может иметь и другие значения). При использовании с такими инструкциями может начать транзакцию вместо выполнения атомарной операции с памятью.
|
XRELEASE
|
F3
|
Префикс инструкции, обозначающий окончание устранения аппаратной блокировки, используется только с инструкциями атомарной памяти/сохранения (для других инструкций F3 префикс может иметь и другие значения). При использовании с такими инструкциями во время устранения аппаратной блокировки соответствующая транзакция будет завершена вместо выполнения сохранения/атомарного выполнения.
|
Инструкции VP2Intersect
[ редактировать ]Инструкции VP2INTERSECT (подмножество AVX-512) были представлены в Tiger Lake (мобильные процессоры Core 11-го поколения), но никогда официально не поддерживались ни на каких других процессорах Intel — теперь они считаются устаревшими. [ 3 ] и указаны в Intel SDM как удаленные с 2023 года. [ 2 ]
С июля 2024 года инструкции VP2INTERSECT были повторно представлены в процессорах AMD Zen 5 . [ 4 ]
Инструкция | Код операции | Описание |
---|---|---|
VP2INTERSECTD k1+1, xmm2, xmm3/m128/m32bcst VP2INTERSECTD k1+1, ymm2, ymm3/m256/m32bcst VP2INTERSECTD k1+1, zmm2, zmm3/m512/m32bcst
|
EVEX.NDS.F2.0F38.W0 68 /r
|
Сохраните в четной/нечетной паре регистров маски индикаторы местоположений совпадений значений между 32-битными полосами в двух аргументах векторного источника. |
VP2INTERSECTQ k1+1, xmm2, xmm3/m128/m64bcst VP2INTERSECTQ k1+1, ymm2, ymm3/m256/m64bcst VP2INTERSECTQ k1+1, zmm2, zmm3/m512/m64bcst
|
EVEX.NDS.F2.0F38.W1 68 /r
|
Сохраните в четной/нечетной паре регистров маски индикаторы местоположений совпадений значений между 64-битными полосами в двух аргументах векторного источника. |
Инструкции, специфичные для процессоров Xeon Phi
[ редактировать ]Инструкция «Рыцарский уголок»
[ редактировать ] первого поколения Процессоры Xeon Phi под кодовым названием «Knights Corner» (KNC) поддерживали большое количество инструкций, которых нет ни в одном более позднем процессоре x86. Ссылка на инструкцию доступна [ 5 ] − уникальные для KNC инструкции/коды операций имеют префиксы VEX и MVEX (за исключением KMOV
, KNOT
и KORTEST
инструкции — они сохраняются с теми же кодами операций и функциями, что и AVX-512, но с добавлением буквы «W» к именам их инструкций).
Большинство этих уникальных инструкций KNC похожи, но не идентичны инструкциям AVX-512 — более поздние процессоры Xeon Phi заменили эти инструкции на AVX-512.
В ранних версиях AVX-512 не использовались кодировки инструкций, используемые префиксом MVEX KNC, однако с появлением Intel APX ( Advanced Performance Extensions ) в 2023 году некоторые старые кодировки инструкций KNC MVEX были повторно использованы для новых кодировок APX. Например, и KNC, и APX принимают кодировку инструкций. 62 F1 79 48 6F 04 C1
как действительный, но придают ему разные значения:
- КНК:
VMOVDQA32 zmm0, k0, xmmword ptr [rcx+rax*8]{uint8}
- векторная загрузка с преобразованием данных - АПХ:
VMOVDQA32 zmm0, [rcx+r16*8]
- векторная нагрузка с использованием одного из новых расширенных георадаров APX в качестве масштабированного индекса.
Инструкции «Рыцарский десант» и «Рыцарская мельница».
[ редактировать ]Некоторые инструкции AVX-512 в Xeon Phi «Knights Landing» и более поздних моделях относятся к подмножествам AVX-512 «AVX512ER», «AVX512_4FMAPS», «AVX512PF» и «AVX512_4VNNIW», каждая из которых уникальна для Xeon Phi. серия процессоров. Подмножества ER и PF были представлены в «Knights Landing» — инструкции 4FMAPS и 4VNNIW были позже добавлены в «Knights Mill».
Инструкции ER и 4FMAPS представляют собой арифметические инструкции с плавающей запятой, которые следуют заданному шаблону, где:
- EVEX.W используется для указания формата с плавающей запятой (0=FP32, 1=FP64).
- Нижний бит кода операции используется для выбора между упакованной и скалярной операцией (0: упакованная, 1: скалярная).
- Для данной операции все скалярные/упакованные варианты принадлежат одному и тому же подмножеству AVX-512.
- Все инструкции поддерживают маскирование результатов с помощью регистров opmask. Все инструкции AVX512ER также поддерживают широковещательную рассылку операндов памяти.
- Единственная поддерживаемая ширина вектора — 512 бит.
Операция | AVX-512 подмножество |
Основной код операции | Инструкции FP32 (W=0) | Инструкции FP64 (W=1) | RC/SAE | |||||
---|---|---|---|---|---|---|---|---|---|---|
упакованный | Скаляр | упакованный | Скаляр | |||||||
Специальные инструкции для Xeon Phi (ER, 4FMAPS) | ||||||||||
Взаимное приближение с точностью [ а ] | ЯВЛЯЕТСЯ | EVEX.66.0F38 (CA/CB) /r |
VRCP28PS z,z,z/m512 |
VRCP28SS x,x,x/m32 |
VRCP28PD z,z,z/m512 |
VRCP28SD x,x,x/m64 |
САЭ | |||
Обратная аппроксимация квадратного корня с точностью [ а ] | ЯВЛЯЕТСЯ | EVEX.66.0F38 (CC/CD) /r |
VRSQRT28PS z,z,z/m512 |
VRSQRT28SS x,x,x/m32 |
VRSQRT28PD z,z,z/m512 |
VRSQRT28SD x,x,x/m64 |
САЭ | |||
Экспоненциальный приближение с относительная ошибка [ а ] | ЯВЛЯЕТСЯ | EVEX.66.0F38 C8 /r |
VEXP2PS z,z/m512 |
Нет | VEXP2PD z,z/m512 |
Нет | САЭ | |||
Сплавленное-умножение-сложение, 4 итерации | 4FMAPS | EVEX.F2.0F38 (9A/9B) /r |
V4FMADDPS z,z+3,m128 |
V4FMADDSS x,x+3,m128 |
Нет | Нет | ||||
Слитое отрицание-умножение-сложение, 4 итерации | 4FMAPS | EVEX.F2.0F38 (AA/AB) /r |
V4FNMADDPS z,z+3,m128 |
V4FNMADDSS x,x+3,m128 |
Нет | Нет |
- ^ Перейти обратно: а б с Для инструкций AVX512ER имеется точная цифровая ссылка в виде кода C. [ 6 ]
Инструкции AVX512PF представляют собой набор из 16 инструкций предварительной выборки. Все эти инструкции используют кодировку VSIB, где требуется режим адресации памяти с использованием байта SIB и где индексная часть байта SIB используется для индексации в векторном файле регистров AVX512, а не в файле регистров GPR. Выбранный векторный регистр AVX512 затем интерпретируется как вектор индексов, в результате чего для каждой векторной полосы выполняется стандартное вычисление адреса базис + индекс + смещение x86, что приводит к выполнению одной связанной операции с памятью (предварительная выборка в случае инструкций AVX512PF). за каждую активную полосу. Все кодировки инструкций следуют шаблону, где:
- EVEX.W используется для указания формата предварительно извлекаемых данных (0:FP32, 1:FP64).
- Нижний бит кода операции используется для указания, считается ли индексный регистр AVX512 вектором из шестнадцати 32-битных индексов со знаком (бит 0 не установлен) или из восьми 64-битных индексов со знаком (установлен бит 0).
- Все инструкции поддерживают маскирование операций с помощью регистров opmask.
- Единственная поддерживаемая ширина вектора — 512 бит.
Операция | Основной код операции | 32-битные индексы (код операции C6 )
|
64-битные индексы (код операции C7 )
| ||
---|---|---|---|---|---|
Предварительная выборка FP32 (W=0) | Предварительная выборка FP64 (W=1) | Предварительная выборка FP32 (W=0) | Предварительная выборка FP64 (W=1) | ||
Предварительная выборка в кэш L1 (подсказка T0) | EVEX.66.0F38 (C6/C7) /1 /vsib |
VGATHERPF0DPS vm32z {k1} |
VGATHERPF0DPD vm32y {k1} |
VGATHERPF0QPS vm64z {k1} |
VGATHERPF0QPD vm64y {k1}
|
Предварительная выборка в кэш L2 (подсказка T1) | EVEX.66.0F38 (C6/C7) /2 /vsib |
VGATHERPF1DPS vm32z {k1} |
VGATHERPF1DPD vm32y {k1} |
VGATHERPF1QPS vm64z {k1} |
VGATHERPF1QPD vm64y {k1}
|
Предварительная выборка в кеш L1 (подсказка T0) с намерением записать | EVEX.66.0F38 (C6/C7) /5 /vsib |
VSCATTERPF0DPS vm32z {k1} |
VSCATTERPF0DPD vm32y {k1} |
VSCATTERPF0QPS vm64z {k1} |
VSCATTERPF0QPD vm64y {k1}
|
Предварительная выборка в кеш L2 (подсказка T1) с намерением записать | EVEX.66.0F38 (C6/C7) /6 /vsib |
VSCATTERPF1DPS vm32z {k1} |
VSCATTERPF1DPD vm32y {k1} |
VSCATTERPF1QPS vm64z {k1} |
VSCATTERPF1QPD vm64y {k1}
|
Инструкции AVX512_4VNNIW считывают из памяти 128-битный элемент данных, содержащий 4 двухкомпонентных вектора (каждый компонент имеет 16-битную подпись). Затем для каждого из 4 последовательных регистров AVX-512 они для каждой 32-битной полосы интерпретируют полосу как двухкомпонентный вектор (16-битный знак) и выполняют скалярное произведение с соответствующим двухкомпонентным вектором. который был прочитан из памяти (первый двухкомпонентный вектор из памяти используется для первого исходного регистра AVX-512 и так далее). Эти результаты затем накапливаются в регистре вектора назначения.
Инструкция | Код операции | Описание |
---|---|---|
VP4DPWSSD zmm1{k1}{z}, zmm2+3, m128
|
EVEX.512.F2.0F38.W0 52 /r
|
Скалярное произведение подписанных слов с накоплением двойных слов, 4 итерации |
VP4DPWSSDS zmm1{k1}{z}, zmm2+3, m128
|
EVEX.512.F2.0F38.W0 53 /r
|
Скалярное произведение подписанных слов с накоплением и насыщением dword, 4 итерации |
Процессоры Xeon Phi (начиная с Knights Landing) также имели PREFETCHWT1 m8
инструкция (код операции 0F 0D /2
, предварительная выборка в кэш L2 с намерением записи) — это были единственные процессоры Intel, которые официально поддерживали эту инструкцию, но она продолжает поддерживаться на некоторых процессорах сторонних производителей (например, Zhaoxin YongFeng).
AMD Инструкции
[ редактировать ]Ам386 СММ инструкция
[ редактировать ]Несколько инструкций для поддержки режима управления системой были представлены в процессорах Am386SXLV и Am386DXLV. [ 7 ] [ 8 ] Они также присутствовали в более поздних процессорах Am486SXLV и Am486DXLV.
Функциональность SMM этих процессоров была реализована с использованием Intel ICE микрокода без действующей лицензии, в результате чего AMD проиграла судебный процесс в 1994 году. [ 9 ] В результате этой потери микрокод ICE был удален из всех более поздних процессоров AMD, а вместе с ним удалены и инструкции SMM.
Инструкция | Код операции | Описание |
---|---|---|
SMI |
F1 |
Вызов обработчика прерываний SMM (только если DR7 установлен бит 12 ) |
UMOV r/m8, r8 |
0F 10 /r |
Перемещение данных между регистрами и основной системной памятью |
UMOV r/m, r16/32 |
0F 11 /r
| |
UMOV r8, r/m8 |
0F 12 /r
| |
UMOV r16/32, r/m |
0F 13 /r
| |
RES3 |
0F 07 |
Возврат из обработчика прерываний SMM (только Am386SXLV/DXLV) Берет указатель в ES:EDI на состояние сохранения процессора для возобновления — это состояние сохранения имеет формат, почти идентичный формату недокументированного Intel 386. LOADALL инструкция. [ 10 ]
|
RES4 |
0F 07 |
Возврат из обработчика прерываний SMM (только Am486SXLV/DXLV). Похоже на: RES3 , но с другим форматом состояния сохранения. [ 11 ]
|
Эти инструкции SMM также присутствовали в IBM 386SLC и его производных (хотя и с LOADALL
-как код операции возврата SMM 0F 07
названный ICERET
). [ 10 ] [ 12 ]
3DСейчас! инструкции
[ редактировать ]3DNow! Расширение набора команд было введено в AMD K6-2 , в основном добавляя поддержку SIMD-инструкций с плавающей запятой с использованием регистров MMX (два компонента FP32 в 64-битном векторном регистре). Инструкции в основном продвигались AMD, но поддерживались и на некоторых процессорах сторонних производителей. Процессоры, поддерживающие 3DNow! были:
- AMD K6-2, K6-III и все процессоры на базе микроархитектур K7 , K8 и K10 . (Более поздние микроархитектуры AMD, такие как Bulldozer , Bobcat и Zen, не поддерживают 3DNow!)
- IDT WinChip 2 и 3
- VIA Cyrix III (варианты «Джошуа» и «Самуэль»), а также версии VIA C3 «Самуэль» и «Эзра» . (Более поздние процессоры VIA, начиная с C3 «Nehemiah», отказались от 3DNow! в пользу SSE .)
- National Semiconductor Geode GX2 ; AMD Geode GX и LX.
Инструкция | Код операции | Описание инструкции | |
---|---|---|---|
PFADD mm1,mm2/m64 |
0F 0F /r 9E |
Упакованное сложение с плавающей запятой: dst <- dst + src
| |
PFSUB mm1,mm2/m64 |
0F 0F /r 9A |
Упакованное вычитание с плавающей запятой: dst <- dst − src
| |
PFSUBR mm1,mm2/m64 |
0F 0F /r AA |
Обратное вычитание упакованных чисел с плавающей запятой: dst <- src − dst
| |
PFMUL mm1,mm2/m64 |
0F 0F /r B4 |
Упакованное умножение с плавающей запятой: dst <- dst * src
| |
PFMAX mm1,mm2/m64 |
0F 0F /r A4 |
Упакованный максимум с плавающей запятой: dst <- (dst > src) ? dst : src
| |
PFMIN mm1,mm2/m64 |
0F 0F /r 94 |
Упакованный минимум с плавающей запятой: dst <- (dst < src) ? dst : src
| |
PFCMPEQ mm1,mm2/m64 |
0F 0F /r B0 |
Упакованное сравнение с плавающей запятой, равное: dst <- (dst == src) ? 0xFFFFFFFF : 0
| |
PFCMPGE mm1,mm2/m64 |
0F 0F /r 90 |
Упакованное сравнение с плавающей запятой, больше или равно: dst <- (dst >= src) ? 0xFFFFFFFF : 0
| |
PFCMPGT mm1,mm2/m64 |
0F 0F /r A0 |
Упакованное сравнение с плавающей запятой, больше: dst <- (dst > src) ? 0xFFFFFFFF : 0
| |
PF2ID mm1,mm2/m64 |
0F 0F /r 1D |
Преобразует упакованный операнд с плавающей запятой в упакованное 32-битное целое число со знаком с округлением до нуля. | |
PI2FD mm1,mm2/m64 |
0F 0F /r 0D |
Преобразование упакованного 32-битного целого числа со знаком в число с плавающей запятой с округлением до нуля. | |
PFRCP mm1,mm2/m64 |
0F 0F /r 96 |
Обратная аппроксимация с плавающей запятой (точность не менее 14 бит): temp <- approx(1.0/src[31:0])
|
3DNow! спецификация [ 13 ] не указывает непосредственно операцию, выполняемую PFRCPIT1 , PFRSQIT1 и PFRCPIT2 инструкции — вместо этого он налагает требования к результатам совместного использования этих инструкций определенным образом: [ а ]
Если нижние 32 бита PFRCP mm1,mm0 PFRCPIT1 mm0,mm1 PFRCPIT2 mm0,mm1 должен заполнить обе 32-битные полосы PFRSQRT mm1,mm0 MOVQ mm2,mm1 PFMUL mm1,mm1 PFRSQIT1 mm1,mm0 PFRCPIT2 mm1,mm2 должен заполнить обе 32-битные полосы |
PFRSQRT mm1,mm2/m64 |
0F 0F /r 97 |
Аппроксимация обратного квадратного корня с плавающей запятой (точность не менее 15 бит): temp <- approx(1.0/sqrt(src[31:0]))
| |
PFRCPIT1 mm1,mm2/m64 |
0F 0F /r A6 |
Упакованное обратное число с плавающей запятой, первый шаг итерации | |
PFRSQIT1 mm1,mm2/m64 |
0F 0F /r A7 |
Упакованный обратный квадратный корень с плавающей запятой, первый шаг итерации | |
PFRCPIT2 mm1,mm2/m64 |
0F 0F /r B6 |
Упакованный обратный квадратный корень с плавающей запятой, второй шаг итерации | |
PFACC mm1,mm2/m64 |
0F 0F /r AE |
Накопление с плавающей запятой (горизонтальное сложение): dst[31:0] <- dst[31:0] + dst[63:32]
| |
PMULHRW mm1,mm2/m64 , [ б ] PMULHRWA mm1,mm2/m64 |
0F 0F /r B7 |
Умножьте упакованные 16-битные целые числа со знаком с округлением и сохраните старшие 16 бит: dst <- ((dst * src) + 0x8000) >> 16
| |
PAVGUSB mm1,mm2/m64 |
0F 0F /r BF |
Среднее значение упакованных 8-битных целых чисел без знака: dst <- (src+dst+1) >> 1
| |
FEMMS |
0F 0E |
Более быстрый вход/выход из состояния MMX или x87 с плавающей запятой. [ с ] |
- ^ 3DNow! Требования к точности могут быть выполнены несколькими различными способами, например:
- На AMD K6-2
PFRCPIT1
,PFRSQIT1
иPFRCPIT2
инструкции будут выполнять различные части итерации Ньютона-Рафсона, чтобы повысить точность начального результата низкой точности изPFRCP
/PFRSQRT
. [ 14 ] - На AMD Geode LX
PFRCP
иPFRSQRT
инструкции вместо этого вычисляли свои результаты с полной 24-битной точностью – это позволилоPFRCPIT1
,PFRSQIT1
иPFRCPIT2
инструкции в чистые инструкции по перемещению данных, выполняющие ту же операцию, что иMOVQ
. [ 15 ]
- На AMD K6-2
- ^ 3DNow!
PMULHRW
инструкция имеет ту же мнемонику, что и Cyrix EMMI.PMULHRW
Однако ее код операции и функция различаются (инструкция EMMI сдвигает вправо результат умножения на 15 бит, а инструкция 3DNow! сдвигает вправо на 16 бит).Некоторые ассемблеры/дизассемблеры, такие как NASM, разрешают эту неоднозначность, используя мнемонику
PMULHRWA
для 3DNow! инструкция иPMULHRWC
для инструкции EMMI. - ^
FEMMS
инструкция отличается от стандартной MMXEMMS
инструкция в этомFEMMS
делает содержимое регистра FP/MMX неопределенным после выполнения инструкции.
3DСейчас! также представил пару инструкций предварительной выборки: PREFETCH m8
(код операции 0F 0D /0
) и PREFETCHW m8
(код операции 0F 0D /1
). Эти инструкции, в отличие от остальной части 3DNow!, не сняты с производства, но продолжают поддерживаться современными процессорами AMD. PREFETCHW
Инструкция также поддерживается на процессорах Intel, начиная с 65-нм Pentium 4, [ 16 ] хотя и выполнялся как NOP до Broadwell .
Инструкции 3DNow+ добавлены в Athlon и K6-2+.
[ редактировать ]Инструкция | Код операции | Описание инструкции |
---|---|---|
PF2IW mm1,mm2/m64
|
0F 0F /r 1C
|
Преобразование упакованных 32-битных чисел с плавающей запятой в 16-битные целые числа со знаком с округлением до нуля. [ а ] |
PI2FW mm1,mm2/m64
|
0F 0F /r 0C
|
Преобразование упакованного 16-битного целого числа со знаком в 32-битное число с плавающей запятой [ а ] |
PSWAPD mm1,mm2/m64
|
0F 0F /r BB [ б ]
|
Двойное слово упакованного свопа: dst[31:0] <- src[63:32]
|
PFNACC mm1,mm2/m64
|
0F 0F /r 8A
|
Упакованное отрицательное накопление с плавающей запятой: dst[31:0] <- dst[31:0] − dst[63:32]
|
PFPNACC mm1,mm2/m64
|
0F 0F /r 8E
|
Упакованные положительные и отрицательные значения с плавающей запятой: dst[31:0] <- dst[31:0] − dst[63:32]
|
- ^ Перейти обратно: а б The
PF2IW
иPI2FW
инструкции также существовали в виде недокументированных инструкций для оригинального К6-2.Недокументированный вариант
PF2IW
в K6-2 верхние 16 бит каждой 32-битной полосы результатов будут установлены на все 0, в то время как задокументированный вариант в более поздних процессорах будет расширять знак 16-битного результата до 32 бит. [ 17 ] [ 18 ] - ^
PSWAPD
инструкция использует тот же код операции, что и более старый недокументированный K6-2.PSWAPW
инструкция. [ 18 ]
3DСейчас! инструкции, специфичные для Geode GX и LX
[ редактировать ]Инструкция | Код операции | Описание инструкции |
---|---|---|
PFRCPV mm1,mm2/m64 |
0F 0F /r 86 |
Взаимное приближение упакованных чисел с плавающей запятой |
PFRSQRTV mm1,mm2/m64 |
0F 0F /r 87 |
Приближение обратного квадратного корня упакованных чисел с плавающей запятой |
SSE5 Производные инструкции
[ редактировать ]SSE5 был предложенным расширением SSE компанией AMD, в котором использовалась новая кодировка инструкций «DREX» для добавления поддержки новых инструкций с 3 и 4 операндами в SSE. [ 19 ] В комплект не входил полный набор инструкций Intel SSE4, что делало его скорее конкурентом SSE4, чем преемником.
AMD решила не реализовывать SSE5, как предлагалось изначально — вместо этого он был переработан в FMA4 и XOP. [ 20 ] который обеспечивал аналогичную функциональность, но с совершенно другой кодировкой инструкций — с использованием префикса VEX для инструкций FMA4 и нового префикса XOP, подобного VEX, для большинства оставшихся инструкций.
XOP- инструкции
[ редактировать ]Представлено с процессорным ядром Bulldozer, снова удалено из Zen (микроархитектуры) .
Пересмотр большей части набора инструкций SSE5.
Инструкции XOP в основном используют префикс XOP, который представляет собой 3-байтовый префикс и имеет следующую структуру:
Байт 0 | Байт 1 | Байт 2 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Биты | 7:0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
Использование | 8Fh
|
Р̅ | Х̅ | Б̅ | мммммм | В | в̅в̅в̅в̅ | л | пп |
где:
- Черные линии обозначают инвертированные биты.
- Биты R/X/B представляют собой биты расширения аргумента, аналогичные битам RXB префикса REX.
- mmmmm — спецификатор карты кода операции. Хотя он способен кодировать значения от 8 до 31 (значения от 0 до 7 соответствуют ModR/M) . вариантам старого кода, закодированным
POP
инструкции, что делает их непригодными для XOP), только карты8
,9
и0Ah
когда-либо использовались: карта8
для инструкций, которые немедленно принимают 8-битный код, отобразите9
для инструкций, которые не требуют немедленного выполнения, и карты0Ah
для инструкций, которые немедленно обрабатывают 32-битную версию. - W используется несколькими способами:
- Для векторных инструкций XOP W используется для замены двух последних аргументов источника вектора в инструкции. Для инструкций, допускающих W=1, кодировки с W=0 позволяют предпоследнему аргументу вектора быть аргументом памяти, а кодировки с W=1 позволяют последнему аргументу вектора быть аргументом памяти. Для инструкций, которые не позволяют менять местами два последних векторных аргумента, W должен быть равен 0.
- Для инструкций целочисленного регистра, закодированных в XOP (расширения набора команд TBM и LWP, см. ниже), W используется для размера операнда. (0=32-бит, 1=64-бит)
- vvvv — это дополнительный аргумент исходного регистра, обычно первый аргумент источника, отличный от r/m, для инструкций с ≥3 аргументами-регистрами.
- L — спецификатор длины вектора. L=1 указывает на 256-битную операцию, L=0 указывает на скалярную или 128-битную операцию.
- pp — это встроенный префикс — номинально 0/1/2/3 = нет/66h/F2h/F3h, но только 0 когда-либо использовался с любой из инструкций, определенных для префикса XOP.
Инструкции XOP, закодированные префиксом XOP, следующие:
Описание инструкции | Мнемоника инструкций | Код операции | Вт=1 менять допустимый |
Л=1 (256б) допустимый | |
---|---|---|---|---|---|
Извлеките дробную часть значения с плавающей запятой. | Упакованный FP32 | VFRCZPS ymm1,ymm2/m256
|
XOP.9 80 /r
|
Нет | Да |
Упакованный FP64 | VFRCZPD ymm1,ymm2/m256
|
XOP.9 81 /r
|
Нет | Да | |
Скалярный FP32 | VFRCZSS xmm1,xmm2/m32
|
XOP.9 82 /r
|
Нет | Нет | |
Скалярный FP64 | VFRCZSD xmm1,xmm2/m64
|
XOP.9 83 /r
|
Нет | Нет | |
Векторное условное перемещение побитовой дорожки.
|
VPCMOV ymm1,ymm2,ymm3/m256,ymm4
|
XOP.8 A2 /r /is4
|
Да | Да | |
Векторное целочисленное сравнение.
Для каждой полосы векторного регистра сравните src1 и src2, затем установите для адресата значение «все 1», если сравнение прошло успешно, и «все 0», если оно не удалось. Аргумент imm8 указывает выполняемую функцию сравнения:
|
Подписанные 8-битные полосы | VPCOMB xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 CC /r ib
|
Нет | Нет |
Подписанные 16-битные полосы | VPCOMW xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 CD /r ib
| |||
Подписанные 32-битные полосы | VPCOMD xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 CE /r ib
| |||
Подписанные 64-битные линии | VPCOMQ xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 CF /r ib
| |||
Беззнаковые 8-битные линии | VPCOMUB xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 EC /r ib
| |||
Беззнаковые 16-битные полосы | VPCOMUW xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 ED /r ib
| |||
Беззнаковые 32-битные полосы | VPCOMUD xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 EE /r ib
| |||
Беззнаковые 64-битные линии | VPCOMUQ xmm1,xmm2,xmm3/m128,imm8 [ а ]
|
XOP.8 EF /r ib
| |||
Векторное целое число по горизонтали Добавить.
Для каждой N-битной полосы разделите полосу на серию M-битных полос, сложите M-битные дорожки вместе, а затем сохраните результат в пункте назначения в виде N-битного значения, расширенного нулем/знаком. |
2x8бит -> 16бит, подписанный | VPHADDBW xmm1,xmm2/m128
|
XOP.9 C1 /r
|
Нет | Нет |
4x8бит -> 32бит, подписанный | VPHADDBD xmm1,xmm2/m128
|
XOP.9 C2 /r
| |||
8x8бит -> 64бит, подписанный | VPHADDBQ xmm1,xmm2/m128
|
XOP.9 C3 /r
| |||
2x16бит -> 32бит, подписанный | VPHADDWD xmm1,xmm2/m128
|
XOP.9 C6 /r
| |||
4x16бит -> 64бит, подписанный | VPHADDWQ xmm1,xmm2/m128
|
XOP.9 C7 /r
| |||
2x32бит -> 64бит, подписанный | VPHADDDQ xmm1,xmm2/m128
|
XOP.9 CB /r
| |||
2x8бит -> 16бит, без знака | VPHADDUBW xmm1,xmm2/m128
|
XOP.9 D1 /r
| |||
4x8бит -> 32бит, беззнаковый | VPHADDUBD xmm1,xmm2/m128
|
XOP.9 D2 /r
| |||
8x8бит -> 64бит, без знака | VPHADDUBQ xmm1,xmm2/m128
|
XOP.9 D3 /r
| |||
2x16бит -> 32бит, беззнаковый | VPHADDUWD xmm1,xmm2/m128
|
XOP.9 D6 /r
| |||
4x16бит -> 64бит, без знака | VPHADDUWQ xmm1,xmm2/m128
|
XOP.9 D7 /r
| |||
2x32бит -> 64бит, без знака | VPHADDUDQ xmm1,xmm2/m128
|
XOP.9 DB /r
| |||
Векторное целое число по горизонтали.
Для каждой N-битной дорожки разделите полосу на две знаковые подполосы по N/2 бита каждая, затем вычтите верхнюю полосу из нижней полосы, а затем сохраните результат как знаковый N-битный результат. |
2x8бит -> 16бит | VPHSUBBW xmm1,xmm2/m128
|
XOP.9 E1 /r
|
Нет | Нет |
2x16бит -> 32бит | VPHSUBWD xmm1,xmm2/m128
|
XOP.9 E2 /r
| |||
2x32бит -> 64бит | VPHSUBDQ xmm1,xmm2/m128
|
XOP.9 E3 /r
| |||
Векторное целое число со знаком, умножение-сложение.
Для каждой N-битной дорожки выполните Для источников 1 и src2 коэффициенты умножения могут приниматься как значения со знаком из нижней половины каждой дорожки, старшей половины каждой дорожки или всей дорожки (выбираются таким же образом для src1 и src2) — сложение и результат используйте всю полосу. |
16-битный, полнополосный | VPMACSWW xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 95 /r /is4
|
Нет | Нет |
32-битная, младшая половина | VPMACSWD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 96 /r /is4
| |||
64-битная, младшая половина | VPMACSDQL xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 97 /r /is4
| |||
32-битная, полнополосная | VPMACSDD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 9E /r /is4
| |||
64-битная, высокая половина | VPMACSDQH xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 9F /r /is4
| |||
16-битный, полнополосный, с насыщением | VPMACSSWW xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 85 /r /is4
| |||
32-битный, младшая половина, насыщающий | VPMACSSWD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 86 /r /is4
| |||
64-битная, младшая половина, насыщающая | VPMACSSDQL xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 87 /r /is4
| |||
32-битная, полнополосная, насыщающая | VPMACSSDD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 8E /r /is4
| |||
64-битная, высокая половина, насыщенная | VPMACSSDQH xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 8F /r /is4
| |||
Упакованное умножение, сложение и накопление знакового слова в подписанное двойное слово.
Для каждой 32-битной полосы рассматривайте src1 и src2 как двухкомпонентные векторы знаковых 16-битных значений, затем вычисляйте их скалярное произведение, а затем добавляйте src3 как 32-битное значение. |
с насыщенностью | VPMADCSSWD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 A6 /r /is4
|
Нет | Нет |
без насыщения | VPMADCSWD xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 B6 /r /is4
| |||
Упакованные байты перестановки.
Для
|
VPPERM xmm1,xmm2,xmm3/m128,xmm4
|
XOP.8 A3 /r /is4
|
Да | Нет | |
Упаковано-поворот влево.
Сумма вращения указывается в последнем аргументе источника. Он может быть предоставлен как непосредственный или векторный регистр — в последнем случае величина вращения предоставляется для каждой полосы. |
8-битные линии | VPROTB xmm1,xmm2/m128,xmm3
|
XOP.9 90 /r
|
Да | Нет |
VPROTB xmm1,xmm2/m128,imm8
|
XOP.8 C0 /r ib
|
Нет | |||
16-битные линии | VPROTW xmm1,xmm2/m128,xmm3
|
XOP.9 91 /r
|
Да | ||
VPROTW xmm1,xmm2/m128,imm8
|
XOP.8 C1 /r ib
|
Нет | |||
32-битные линии | VPROTD xmm1,xmm2/m128,xmm3
|
XOP.9 92 /r
|
Да | ||
VPROTD xmm1,xmm2/m128,imm8
|
XOP.8 C2 /r ib
|
Нет | |||
64-битные линии | VPROTQ xmm1,xmm2/m128,xmm3
|
XOP.9 93 /r
|
Да | ||
VPROTQ xmm1,xmm2/m128,imm8
|
XOP.8 C3 /r ib
|
Нет | |||
Упакованная смена с подписанными суммами смен.
Величина сдвига предоставляется для каждой дорожки вектора и берется из нижних 8 бит каждой дорожки последнего аргумента источника. Величина сдвига считается знаковой: положительное значение вызывает сдвиг влево, а отрицательное значение — сдвиг вправо. |
8-битный, подписанный | VPSHAB xmm1,xmm2/m128,xmm3
|
XOP.9 98 /r
|
Да | Нет |
16-битный, подписанный | VPSHAW xmm1,xmm2/m128,xmm3
|
XOP.9 99 /r
| |||
32-битная, подписанная | VPSHAD xmm1,xmm2/m128,xmm3
|
XOP.9 9A /r
| |||
64-битная, подписанная | VPSHAQ xmm1,xmm2/m128,xmm3
|
XOP.9 9B /r
| |||
8-битный, беззнаковый | VPSHLB xmm1,xmm2/m128,xmm3
|
XOP.9 94 /r
| |||
16-битный, беззнаковый | VPSHLW xmm1,xmm2/m128,xmm3
|
XOP.9 95 /r
| |||
32-битный, беззнаковый | VPSHLD xmm1,xmm2/m128,xmm3
|
XOP.9 96 /r
| |||
64-битный, без знака | VPSHLQ xmm1,xmm2/m128,xmm3
|
XOP.9 97 /r
|
- ^ Перейти обратно: а б с д и ж г час Для каждого
VPCOM*
Для инструкции доступен ряд мнемоники псевдонимов, по одному для каждой из восьми функций сравнения, закодированных в аргументе imm8. Эти мнемоники псевдонимов определяют сравнение, которое необходимо выполнить после части мнемоники «VPCOM». Например:VPCOMEQB xmm1,xmm2,xmm3
это псевдоним дляVPCOMB xmm1,xmm2,xmm3,4
VPCOMFALSEUQ xmm1,xmm2,[ebx]
это псевдоним дляVPCOMUQ xmm1,xmm2,[ebx],6
XOP также включал две векторные инструкции, в которых вместо префикса XOP использовался префикс VEX:
Описание инструкции | Мнемоника инструкций | Код операции | Вт=1 менять допустимый |
Л=1 (256б) допустимый |
---|---|---|---|---|
Перестановка значений с плавающей запятой двойной точности с двумя источниками. | VPERMIL2PD ymm1,ymm2,ymm3/m256,ymm4,imm4
|
VEX.NP.0F3A 49 /r /is4
|
Да | Да |
Перестановка значений с плавающей запятой одинарной точности из двух источников. | VPERMIL2PS ymm1,ymm2,ymm3/m256,ymm4,imm4
|
VEX.NP.0F3A 48 /r /is4
|
Да | Да |
Инструкции VPERMIL2PD
и VPERMIL2PS
изначально были определены Intel в ранних проектах спецификации AVX. [ 21 ] − они были удалены в более поздних версиях [ 22 ] и никогда не были реализованы ни в одном процессоре Intel. Однако они были реализованы AMD, которая обозначила их как часть расширения набора команд XOP. (Как и другие части XOP, они были удалены в AMD Zen .)
FMA4 Инструкции
[ редактировать ]Поддерживается в процессорах AMD, начиная с архитектуры Bulldozer , удалено в Zen . Не поддерживается ни одним чипом Intel по состоянию на 2023 год.
Объединенное умножение-сложение с четырьмя операндами. FMA4 был реализован аппаратно до FMA3.
Инструкция | Код операции | Значение | Примечания |
---|---|---|---|
ВФМАДДПД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 69 /r /is4 | Объединенное умножение-сложение упакованных значений с плавающей запятой двойной точности | |
VFMADDPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 68 /r /is4 | Объединенное умножение-сложение упакованных значений с плавающей запятой одинарной точности | |
VFMADDSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6B /r /is4 | Объединенное умножение-сложение скалярных значений двойной точности с плавающей запятой | |
VFMADDSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6A /r /is4 | Объединенное умножение-сложение скалярных значений с плавающей запятой одинарной точности | |
ВФМАДСУБПД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5D /r /is4 | Объединенное умножение-чередующееся сложение/вычитание упакованных значений с плавающей запятой двойной точности | |
VFMADDSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5C /r /is4 | Объединенное умножение-чередование сложений и вычитаний упакованных значений с плавающей запятой одинарной точности | |
ВФМСУБАДПДД xмм0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5F /r /is4 | Слитое умножение-чередующееся вычитание/сложение упакованных значений с плавающей запятой двойной точности | |
ВФМСУБАДДПС xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 5E /r /is4 | Слитое умножение-чередующееся вычитание/сложение упакованных значений с плавающей запятой одинарной точности | |
ВФМСУБПД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6D /r /is4 | Объединенное умножение-вычитание упакованных значений с плавающей запятой двойной точности | |
VFMSUBPS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6C /r /is4 | Объединенное умножение-вычитание упакованных значений с плавающей запятой одинарной точности | |
VFMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6F /r /is4 | Объединенное умножение-вычитание скалярных значений двойной точности с плавающей запятой | |
VFMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 6E /r /is4 | Объединенное умножение-вычитание скалярных значений с плавающей запятой одинарной точности | |
ВФНМАДДПД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 79 /r /is4 | Объединенное отрицательное умножение-сложение упакованных значений с плавающей запятой двойной точности | |
ВФНМАДДПС xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 78 /r /is4 | Объединенное отрицательное умножение-сложение упакованных значений с плавающей запятой одинарной точности | |
ВФНМАДСД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7B /r /is4 | Объединенное отрицательное умножение-сложение скалярных значений двойной точности с плавающей запятой | |
ВФНМАДСС xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7A /r /is4 | Объединенное отрицательное умножение-сложение скалярных значений с плавающей запятой одинарной точности | |
ВФНМСУБПД xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7D /r /is4 | Объединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой двойной точности | |
ВФНМСУБПС xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7C /r /is4 | Объединенное отрицательное умножение-вычитание упакованных значений с плавающей запятой одинарной точности | |
VFNMSUBSD xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7F /r /is4 | Объединенное отрицательное умножение-вычитание скалярных значений двойной точности с плавающей запятой | |
VFNMSUBSS xmm0, xmm1, xmm2, xmm3 | C4E3 WvvvvL01 7E /r /is4 | Объединенное отрицательное умножение-вычитание скалярных значений с плавающей запятой одинарной точности |
AMD представила TBM вместе с BMI1 в своем Piledriver [ 23 ] линейка процессоров; более поздние процессоры AMD Jaguar и Zen не поддерживают TBM. [ 24 ] Ни один процессор Intel (по состоянию на 2023 год) не поддерживает TBM.
Все инструкции TBM кодируются с использованием префикса XOP. Все они доступны в 32-битной и 64-битной формах, выбираемых с помощью бита XOP.W (0 = 32 бита, 1 = 64 бита). (XOP.W игнорируется вне 64-битного режима.) Как и все инструкции, закодированные с префиксами VEX/XOP, они недоступны в реальном режиме и режиме Virtual-8086.
Инструкция | Код операции | Описание [ 25 ] | Эквивалентное выражение C [ 26 ] |
---|---|---|---|
BEXTR reg,r/m,imm32
|
XOP.A 10 /r imm32
|
Извлечение битового поля (непосредственная форма) [ а ]
imm32 интерпретируется следующим образом:
|
(src >> start) & ((1 << len) − 1)
|
BLCFILL reg,r/m
|
XOP.9 01 /1
|
Заполнить с самого низкого чистого бита | x & (x + 1)
|
BLCI reg,r/m
|
XOP.9 02 /6
|
Изолировать самый низкий чистый бит | x | ~(x + 1)
|
BLCIC reg,r/m
|
XOP.9 01 /5
|
Изолировать младший чистый бит и дополнить | ~x & (x + 1)
|
BLCMSK reg,r/m
|
XOP.9 02 /1
|
Маска из младшего чистого бита | x ^ (x + 1)
|
BLCS reg,r/m
|
XOP.9 01 /3
|
Установить младший бит очистки | x | (x + 1)
|
BLSFILL reg,r/m
|
XOP.9 01 /2
|
Заполнить с наименьшего установленного бита | x | (x − 1)
|
BLSIC reg,r/m
|
XOP.9 01 /6
|
Изолировать младший установленный бит и дополнить | ~x | (x − 1)
|
T1MSKC reg,r/m
|
XOP.9 01 /7
|
Обратная маска из замыкающих | ~x | (x + 1)
|
TZMSK reg,r/m
|
XOP.9 01 /4
|
Маска от конечных нулей | ~x & (x − 1)
|
- ^ Для
BEXTR
, регистрационная форма доступна как часть ИМТ1.
Упрощенные инструкции по профилированию
[ редактировать ]Функция AMD Lightweight Profiling (LWP) была представлена в AMD Bulldozer и удалена в AMD Zen . На всех поддерживаемых процессорах последние доступные обновления микрокода отключили LWP из-за мер по снижению риска Spectre . [ 27 ]
Эти инструкции доступны в Ring 3, но недоступны в реальном режиме и режиме Virtual-8086. Все они используют префикс XOP.
Инструкция | Код операции | Описание |
---|---|---|
LLWPCB r32/64
|
XOP.9 12 /0
|
Загрузите адрес LWPCB (облегченного блока управления профилированием). [ а ]
Загрузка адреса 0 отключает LWP. Загрузка ненулевого адреса заставит ЦП выполнить проверку указанного LWPCB, а затем включить LWP, если проверка пройдена. Если LWP уже включен, состояние предыдущего LWPCB сбрасывается в память. |
SLWPCB r32/64
|
XOP.9 12 /1
|
Сохранить адрес LWPCB [ а ] для регистрации и сброса состояния LWP в память.
Если LWP не включен, сохраненный адрес равен 0. |
LWPINS r32/64, r/m32, imm32
|
XOP.A 12 /0 imm32
|
Вставьте запись пользовательского события с EventID=255 в кольцевой буфер LWP. Аргументы вставляются в запись события следующим образом:
The |
LWPVAL r32/64, r/m32, imm32
|
XOP.A 12 /1 imm32
|
Уменьшите счетчик событий, связанный с событием выборки запрограммированного значения. Если результирующее значение счетчика окажется отрицательным, вставьте запись события с EventID=1 в кольцевой буфер LWP. (Аргументы инструкции вставляются в эту запись так же, как и для LWPINS .)
Выполняется как NOP, если LWP не включен или счетчик событий не включен. Если запись о событии не вставлена, то второй аргумент (который может быть аргументом памяти) не доступен. |
- ^ Перейти обратно: а б Адрес, используемый
LLWPCB
иSLWPCB
— эффективный адрес, указанный относительно базового адреса сегмента DS:.LLWPCB
преобразует этот эффективный адрес в линейный адрес, добавляя к нему базовый адрес DS, иSLWPCB
преобразует его обратно, вычитая базовый адрес DS. Изменение базового адреса DS при включенном LWP приведет кSLWPCB
вернуть другой адрес, чем тот, который был указанLLWPCB
, а также может вызватьXSAVE
чтобы не сохранить состояние LWP должным образом.
Инструкции от других поставщиков
[ редактировать ]Инструкции, специфичные для NEC серии V процессоров
[ редактировать ]Эти инструкции относятся только к ЦП NEC V20/V30 и их преемникам и не встречаются ни в каких ЦП сторонних производителей. Многие из их кодов операций были переназначены другим инструкциям в более поздних процессорах, отличных от NEC.
Инструкция | Код операции | Описание | Доступно на |
---|---|---|---|
TEST1 r/m8, CL TEST1 r/m16, CL
|
0F 10 /0 0F 11 /0
|
Проверьте один бит.
Первый аргумент указывает 8/16-битный регистр или ячейку памяти. Второй аргумент указывает, какой бит проверять. |
Все V-серии [ 28 ] кроме В30МЗ [ 29 ] |
TEST1 r/m8, imm8 TEST1 r/m16, imm8
|
0F 18 /0 ib 0F 19 /0 ib
| ||
CLR1 r/m8, CL CLR1 r/m16, CL
|
0F 12 /0 0F 13 /0
|
Очистите один бит. | |
CLR1 r/m8, imm8 CLR1 r/m16, imm8
|
0F 1A /0 ib 0F 1B /0 ib
| ||
SET1 r/m8, CL SET1 r/m16, CL
|
0F 14 /0 0F 15 /0
|
Установите один бит. | |
SET1 r/m8, imm8 SET1 r/m16, imm8
|
0F 1C /0 ib 0F 1D /0 ib
| ||
NOT1 r/m8, CL NOT1 r/m16, CL
|
0F 16 /0 0F 17 /0
|
Инвертируйте один бит. | |
NOT1 r/m8, imm8 NOT1 r/m16, imm8
|
0F 1E /0 ib 0F 1F /0 ib
| ||
ADD4S
|
0F 20
|
Добавьте ниббл-строки.
Выполняет сложение целых чисел в упакованном формате BCD (2 цифры BCD на байт). DS:SI указывает на исходное целое число, ES:DI — на целое число назначения, а CL указывает количество добавляемых цифр. Тогда операция: пункт назначения <- пункт назначения + источник | |
SUB4S
|
0F 22
|
Вычесть строки полубайта.
пункт назначения <- пункт назначения − источник | |
CMP4S
|
0F 26
|
Сравните ниббл-строки. | |
ROL4 r/m8
|
0F 28 /0
|
Поворот влево.
Объединяет свой 8-битный аргумент с нижними 4 битами AL, чтобы сформировать 12-битный битовый вектор, затем поворачивает этот битовый вектор влево на 4 бита, затем записывает этот битовый вектор обратно в свой аргумент и нижние 4 бита AL. | |
ROR4 r/m8
|
0F 2A /0
|
Поворот вправо. Похоже на: ROL4 , за исключением поворота вправо на 4 бита.
| |
EXT r8,r8
|
0F 33 /r
|
Извлечение битового поля.
Выполните чтение битового поля из памяти. DS:SI (DS0:IX в номенклатуре NEC) указывает на ячейку памяти для чтения, первый аргумент указывает битовое смещение для чтения, а второй аргумент указывает количество битов для чтения минус 1. Результат помещается в AX. После чтения битового поля SI и первый аргумент обновляются, чтобы указывать сразу за только что прочитанным битовым полем. | |
EXT r8,imm8
|
0F 3B /0 ib
| ||
INS r8,r8
|
0F 31 /r
|
Вставка битового поля.
Выполните запись битового поля в память. ES:DI (DS1:IY в номенклатуре NEC) указывает на ячейку памяти для записи, AX содержит данные для записи, первый аргумент указывает смещение битов для записи, а второй аргумент указывает количество битов для записи минус 1. После запись битового поля, DI и первый аргумент обновляются так, чтобы указывать сразу за только что записанным битовым полем. | |
INS r8,imm8
|
0F 39 /0 ib
| ||
REPC
|
64
|
Повторите, если носите. Префикс инструкции для использования с CMPS / SCAS .
| |
REPNC
|
65
|
Повторите, если не нести. Префикс инструкции для использования с CMPS / SCAS .
| |
FPO2
|
66 /r 67 /r
|
«Операция с плавающей запятой 2»: дополнительные управляющие коды для сопроцессора с плавающей запятой в дополнение к стандартным. D8-DF те, которые используются для x87 .
Коды escape-операций FPO2 используются сопроцессором операций с плавающей запятой NEC 72291 — этот сопроцессор также использует стандарт | |
BRKEM imm8
|
0F FF ib
|
Перейдите в режим эмуляции 8080 .
Перейдите по адресу, выбранному из IVT (таблицы векторов прерываний), используя аргумент imm8, аналогичный 8086. |
В20, В30, В40, В50 [ 28 ] |
BRKXA imm8
|
0F E0 ib
|
Перейдите в режим расширенного адреса.
Перейдите по адресу, выбранному из IVT, используя аргумент imm8. Включает простой механизм подкачки памяти после чтения IVT, но перед выполнением перехода. Механизм подкачки использует встроенную таблицу страниц со страницами по 16 Кбайт и без проверки прав доступа. [ 31 ] |
В33, В53 [ 28 ] |
RETXA imm8
|
0F F0 ib
|
Возврат из режима расширенного адреса.
Перейдите по адресу, выбранному из IVT, используя аргумент imm8. Отключает пейджинг после чтения IVT, но перед выполнением перехода. | |
MOVSPA
|
0F 25
|
Передача как SS, так и SP старого банка регистров после того, как банк был переключен прерыванием или BRKCS инструкция.
|
В25, В35, [ 32 ] В55 [ 33 ] |
BRKCS r16
|
0F 2D /0
|
Выполнить программное прерывание с переключением контекста для банка регистров, указанного младшими 3 битами r16. | |
RETRBI
|
0F 91
|
Возврат из прерывания переключения контекста банка регистров. | |
FINT
|
0F 92
|
Завершить прерывание. | |
TSKSW r16
|
0F 94 /7
|
Выполните переключение задачи на банк регистров, указанный младшими 3 битами r16. | |
MOVSPB r16
|
0F 95 /7
|
Передача SS и SP текущего банка регистров в банк регистров, указанный младшими 3 битами r16. | |
BTCLR imm8,imm8,cb
|
0F 9C ib ib rel8
|
Проверка битов и очистка.
Первый аргумент указывает регистр специальной функции V25/V35 для проверки бита. Второй аргумент определяет позицию бита в этом регистре. Третий аргумент указывает короткое смещение ветки. Если бит был установлен в 1, то он очищается и выполняется короткая ветвь, в противном случае ветвь не выполняется. | |
STOP
|
0F 9E
|
Останов процессора.
Отличается от обычного 8086. | |
BRKS imm8
|
F1 ib
|
Взломайте и включите Software Guard.
Перейдите по адресу, выбранному из IVT, используя аргумент imm8, а затем продолжите выполнение с включенной функцией «Software Guard». «Программная защита» — это 8-битный шифр подстановки , который во время выборки/декодирования инструкций преобразует байты кода операции с использованием таблицы поиска из 256 записей, хранящейся во встроенном ПЗУ маски . |
V25, V35 «Программная защита» [ 34 ] |
BRKN imm8
|
63 ib
|
Прервите и включите собственный режим. Похоже на: BRKS , исключение отключает «Software Guard», а не включает его.
| |
MOV r/m,DS3
|
8C /6
|
Перемещение в/из регистров расширенного сегмента DS2 и DS3.
Регистры DS2 и DS3 (специфичные для NEC V55) действуют аналогично обычным регистрам сегмента реального режима x86 , за исключением того, что они сдвинуты влево на 8, а не на 4, что обеспечивает доступ к 16 МБ памяти. Инструкции блочной передачи, такие как MOVBKW, могут получить доступ к пространству памяти объемом 16 МБ, одновременно используя префиксы DS2 и DS3. [ 35 ] |
В55 [ 33 ] |
MOV r/m,DS2
|
8C /7
| ||
MOV DS3,r/m
|
8E /6
| ||
MOV DS2,r/m
|
8E /7
| ||
PUSH DS3
|
0F 76 [ 36 ]
| ||
POP DS3
|
0F 77
| ||
PUSH DS2
|
0F 7E
| ||
POP DS2
|
0F 7F
| ||
MOV DS3,r16,m32
|
0F 36 /r
|
Инструкции для одновременной загрузки регистра расширенного сегмента и регистра общего назначения, аналогично 8086. LDS и LES инструкции
| |
MOV DS2,r16,m32
|
0F 3E /r
| ||
DS2:
|
63
|
Префиксы переопределения сегментов для расширенных сегментов DS2 и DS3. | |
DS3:
|
D6
| ||
IRAM:
|
F1
|
Зарегистрируйте префикс переопределения файла. Приведёт к индексации операндов памяти в файл регистров, а не в общую память. | |
BSCH r/m8 BSCH r/m16
|
0F 3C /0 0F 3D /0
|
Подсчитайте конечные нули и сохраните результат в CL. Устанавливает ZF=1 для ввода всех нулей. | |
RSTWDT imm8,imm8
|
0F 96 ib ib
|
Инструкция по работе со сторожевым таймером. | |
BTCLRL imm8,imm8,cb
|
0F 9D ib ib rel8
|
Проверка и очистка битов для второго банка регистров специального назначения (аналогично BTCLR ).
| |
QHOUT imm16
|
0F E0 iw
|
Инструкции по работе с очередью. | |
QOUT imm16
|
0F E1 iw
| ||
QTIN imm16
|
0F E2 iw
| ||
IDLE
|
0F 9F
|
Переведите процессор в режим ожидания. | В55СК [ 37 ] |
ALBIT
|
0F 9A
|
Специальные инструкции по факсу. | В55ПИ [ 33 ] |
COLTRP
|
0F 9B
| ||
MHENC
|
0F 93
| ||
MRENC
|
0F 97
| ||
SCHEOL
|
0F 78
| ||
GETBIT
|
0F 79
| ||
MHDEC
|
0F 7C
| ||
MRDEC
|
0F 7D
| ||
CNVTRP
|
0F 7A
| ||
(без мнемоники) | 63
|
Назначенный код операции для завершения режима эмуляции x86 на NEC V60 . [ 38 ] | В60, В70 |
Инструкции, специфичные для Cyrix и Geode процессоров
[ редактировать ]Эти инструкции присутствуют в процессорах Cyrix, а также в процессорах NatSemi/AMD Geode, созданных на основе микроархитектур Cyrix (Geode GX и LX, но не NX). Они также присутствуют в процессорах партнеров-производителей Cyrix от IBM, ST и TI, а также в VIA Cyrix III (только ядро Joshua, а не Samuel) и некоторых SoC, таких как STPC ATLAS и ZFMicro ZFx86. [ 39 ] Многие из этих кодов операций были переназначены другим инструкциям в более поздних процессорах, отличных от Cyrix.
Инструкция | Код операции | Описание | Доступно на |
---|---|---|---|
SVDC m80,sreg
|
0F 78 /r
|
Сохраните регистр сегмента и дескриптор в памяти как 10-байтовую структуру данных.
Первые 8 байт — дескриптор, последние два байта — селектор. [ 40 ] |
Инструкции по режиму управления системой. [ а ]
Отсутствует на этапе A Cx486SLC и Cx486DLC. [ 41 ] Присутствует на Cx486SLC/e [ 42 ] и все более поздние процессоры Cyrix. Присутствует на всех процессорах Geode на базе Cyrix. |
RSDC sreg,m80 [ б ]
|
0F 79 /r
|
Восстановить регистр сегмента и дескриптор из памяти | |
SVLDT m80
|
0F 7A /0
|
Сохраните LDTR и дескриптор. | |
RSLDT m80
|
0F 7B /0
|
Восстановить LDTR и дескриптор | |
SVTS m80
|
0F 7C /0
|
Сохраните TSR и дескриптор | |
RSTS m80
|
0F 7D /0
|
Восстановить TSR и дескриптор | |
SMINT [ с ]
|
0F 7E
|
Прерывание программного обеспечения управления системой.
Использование Использование | |
0F 38
| |||
RDSHR r/m32
|
0F 36 /0 [ д ]
|
Чтение регистра указателя заголовка SMM | Сайрикс 6x86MX [ 44 ] и МИИ
Через Сайрикс III [ 47 ] |
WRSHR r/m32
|
0F 37 /0 [ д ]
|
Запись указателя заголовка SMM | |
BB0_RESET
|
0F 3A
|
Сброс указателя буфера BLT 0 до базового значения | Cyrix MediaGX и MediaGXm [ 48 ]
NatSemi Geode GXm, GXLV, GX1 |
BB1_RESET
|
0F 3B
|
Сбросить указатель 1 буфера BLT на базовое значение | |
CPU_WRITE
|
0F 3C
|
Запись во внутренний специальный регистр ЦП (EBX=индекс-регистра, EAX=данные) | |
CPU_READ
|
0F 3D
|
Чтение из внутреннего специального регистра ЦП (EBX=индекс-регистра, EAX=данные) | |
DMINT
|
0F 39
|
Прерывание режима управления отладкой | NatSemi Geode GX2
AMD Geode GX, LX [ 43 ] |
RDM
|
0F 3A
|
Возврат из режима управления отладкой |
- ^ Инструкции Cyrix SMM также включают
RSM
(0F AA
; Возврат из режима управления системой), однакоRSM
не является специфичной для Cyrix инструкцией и продолжает существовать в современных процессорах x86, отличных от Cyrix. - ^
RSDC
сCS
в качестве регистра назначения поддерживается только в NatSemi Geode GX2 и AMD Geode GX/LX. [ 43 ] - на других процессорах вызывает #UD. - ^ Некоторые ассемблеры/дизассемблеры, такие как NASM , используют мнемонику инструкций.
SMINTOLD
для0F 7E
кодировка. - ^ Перейти обратно: а б Для
RDSHR
иWRSHR
инструкции, документация Cyrix [ 44 ] указывает, что инструкция принимает байт ModR/M , но не определяет кодировку поля reg байта ModR/M. NASM v0.98.31 и более поздние версии используют /0 для этих инструкций. [ 45 ] в то время как таблицы кодов операций sandpile.org [ 46 ] указывают, что поле reg игнорируется для этих инструкций.
Cyrix EMMI Инструкция
[ редактировать ]Эти инструкции были представлены в процессорах Cyrix 6x86MX и MII, а также присутствовали в MediaGXm и Geode GX1. [ 49 ] процессоры. (В более поздних процессорах, отличных от Cyrix, все их коды операций использовались для инструкций SSE или SSE2.)
Эти инструкции представляют собой целочисленные SIMD-инструкции, действующие на 64-битные векторы в регистрах MMX или памяти. Каждая инструкция принимает два явных операнда, первый из которых является операндом регистра MMX, а второй — либо операндом памяти, либо вторым регистром MMX. Кроме того, некоторые инструкции принимают подразумеваемый операнд, который представляет собой регистр MMX, подразумеваемый из первого операнда следующим образом:
Первый явный операнд | mm0 |
mm1 |
mm2 |
mm3 |
mm4 |
mm5 |
mm6 |
mm7
|
---|---|---|---|---|---|---|---|---|
Подразумеваемый операнд | mm1 |
mm0 |
mm3 |
mm2 |
mm5 |
mm4 |
mm7 |
mm6
|
В описаниях инструкций в таблице ниже: arg1
и arg2
относятся к двум явным операндам инструкции и imp
к подразумеваемому операнду.
Инструкция | Код операции | Описание | |
---|---|---|---|
PAVEB mm,mm/m64 |
0F 50 /r |
Упакованные средние байты: [ а ] arg1 <- (arg1+arg2) >> 1
| |
PADDSIW mm,mm/m64 |
0F 51 /r |
Упаковано добавление подписанных слов с насыщением, используя подразумеваемое назначение: imp <- saturate_s16(arg1+arg2)
| |
PMAGW mm,mm/m64 |
0F 52 /r |
Максимальное значение величины упакованного знакового слова: if (abs(arg2) > abs(arg1)) then arg1 <- arg2
| |
PDISTIB mm,m64 [ б ] |
0F 54 /r |
Упаковывается расстояние в беззнаковых байтах и накапливается до предполагаемого места назначения с насыщением: imp <- saturate_u8(imp + (abs(arg1-arg2)))
| |
PSUBSIW mm,mm/m64 |
0F 55 /r |
Упаковано вычитание подписанных слов с насыщением, используя подразумеваемое назначение: imp <- saturate_s16(arg1-arg2)
| |
PMULHRW mm,mm/m64 , [ с ] PMULHRWC mm,mm/m64 |
0F 59 /r |
Упакованное знаковое слово, умноженное в большую сторону с округлением: arg1 <- (arg1*arg2+0x4000)>>15
| |
PMULHRIW mm,mm/m64 |
0F 5D /r |
Упакованное знаковое слово, умноженное в большую сторону с округлением и подразумеваемым пунктом назначения: imp <- (arg1*arg2+0x4000)>>15
| |
PMACHRIW mm,m64 [ б ] |
0F 5E /r |
Упакованное знаковое слово, умноженное в большую сторону с округлением и накоплением до предполагаемого места назначения: imp <- imp + ((arg1*arg2+0x4000)>>15)
| |
PMVZB mm,m64 [ б ] |
0F 58 /r |
if (imp == 0) then arg1 <- arg2
|
Упакована условная загрузка из памяти в регистр MMX.
Состояние оценивается для каждой байтовой дорожки путем сравнения байтовых дорожек в подразумеваемом источнике с нулем (со знаком сравнения). Если сравнение проходит, то соответствующая полоса назначения загружается из памяти, в противном случае она сохраняет свое исходное значение. |
PMVNZB mm,m64 [ б ] |
0F 5A /r |
if (imp != 0) then arg1 <- arg2
| |
PMVLZB mm,m64 [ б ] |
0F 5B /r |
if (imp < 0) then arg1 <- arg2
| |
PMVGEZB mm,m64 [ б ] |
0F 5C /r |
if (imp >= 0) then arg1 <- arg2
|
- ^ Реализации различаются в зависимости от того,
PAVEB
Инструкция рассматривает байты как знаковые или беззнаковые. [ 50 ] - ^ Перейти обратно: а б с д и ж Для
PDISTIB
,PMACHRIW
иPMV*
инструкции, второй явный операнд должен быть операндом памяти — операнды регистров не поддерживаются. - ^ Сайрикс ЭММИ
PMULHRW
Инструкция имеет ту же мнемонику, что и 3DNow!PMULHRW
Однако ее код операции и функция различаются (инструкция EMMI сдвигает вправо результат умножения на 15 бит, а инструкция 3DNow! сдвигает вправо на 16 бит).Некоторые ассемблеры/дизассемблеры, такие как NASM, разрешают эту неоднозначность, используя мнемонику
PMULHRWA
для 3DNow! инструкция иPMULHRWC
для инструкции EMMI.
Инструкции, специфичные для Chips и Technologies процессоров
[ редактировать ]ПК/чип C&T F8680 представляет собой систему на кристалле с ядром ЦП, совместимым с 80186, и несколькими дополнительными инструкциями для поддержки SuperState R, специфичного для F8680. [ 51 ] функция супервизора/системного управления. Некоторые из добавленных инструкций для «SuperState R»: [ 52 ]
Инструкция | Код операции | Описание |
---|---|---|
LFEAT AX |
FE F8 |
Загрузить данные в регистр конфигурации F8680 «CREG» (AH=индекс-регистра, AL=данные) [ 53 ] |
STFEAT AL,imm8 |
FE F0 ib |
Считать регистр состояния F8680 в AL (imm8=индекс-регистра) |
C&T также разработала 386-совместимый процессор, известный как Super386. Этот процессор, в дополнение к базовому набору инструкций Intel 386, поддерживает ряд инструкций для поддержки SuperState V функции управления системой , специфичной для Super386. Добавленные инструкции для «SuperState V» : [ 7 ]
Инструкция | Код операции | Описание |
---|---|---|
SCALL r/m |
0F 18 /0 |
Вызов обработчика прерываний SMM [ 54 ] [ 55 ] |
SRET |
0F 19 |
Возврат из обработчика прерываний SMM |
SRESUME |
0F 1A |
Возврат из SMM с отключенными прерываниями по одной инструкции |
SVECTOR |
0F 1B |
Выйти из SMM и запустить цикл выключения |
EPIC |
0F 1E |
Загрузите одно из шести прерываний или ловушек ввода-вывода. |
RARF1 |
0F 3C |
Чтение из банка 1 файла регистров (включая видимые и невидимые регистры ЦП) |
RARF2 |
0F 3D |
Чтение из банка 2 регистрового файла. |
RARF3 |
0F 3E |
Чтение из банка 3 регистрового файла. |
LTLB |
0F F0 |
Загрузка TLB с записью таблицы страниц |
RCT |
0F F1 |
Чтение тега кэша |
WCT |
0F F2 |
Записать тег кэша |
RCD |
0F F3 |
Чтение данных кэша |
WCD |
0F F4 |
Запись данных кэша |
RTLBPA |
0F F5 |
Чтение данных TLB (физический адрес) |
RTLBLA |
0F F6 |
Чтение тега TLB (линейный адрес) |
LCFG |
0F F7 |
Загрузить регистр конфигурации |
SCFG |
0F F8 |
Сохранение реестра конфигурации |
RGPR |
0F F9 |
Чтение регистра общего назначения или файла любого банка регистров. |
RARF0 |
0F FA |
Чтение из банка 0 регистрового файла. |
RARFE |
0F FB |
Чтение из дополнительного банка регистрового файла |
WGPR |
0F FD |
Напишите регистр общего назначения или файл любого банка регистров. |
WARFE |
0F FE |
Записать дополнительный банк регистрового файла |
Инструкции, специфичные для ALi / Nvidia / DM&P M6117. микроконтроллеров
[ редактировать ]Серия встраиваемых микроконтроллеров M6117 оснащена процессорным ядром класса 386SX с некоторыми дополнениями, специфичными для M6117, к набору инструкций Intel 386. Для DM&P M6117D задокументированы следующие: [ 56 ]
Инструкция | Код операции | Описание |
---|---|---|
BRKPM |
F1 |
Прерывание управления системой – переход в «режим гиперсостояния». |
RETPM |
D6 E6 |
Возврат из «режима гиперсостояния» |
LDUSR UGRS,EAX |
D6 CA 03 A0 |
Установить адрес страницы точки входа SMI |
(мнемоника не указана) | D6 C8 03 A0 |
Чтение адреса страницы точки входа SMI |
MOV PWRCR,EAX |
D6 FA 03 02 |
Запись в регистр управления питанием |
Инструкции присутствуют в конкретных 80387. клонах
[ редактировать ]Несколько сопроцессоров с плавающей запятой класса 80387 предоставили дополнительные инструкции в дополнение к стандартным 80387 — ни одна из них не поддерживается в более поздних процессорах:
Инструкция | Код операции | Описание | Доступно на |
---|---|---|---|
FRSTPM
|
DB F4 [ 57 ]
или
|
Защищенный режим сброса FPU.
Инструкция для сигнализации FPU о том, что основной ЦП выходит из защищенного режима, аналогично тому, как инструкция FSETPM используется для сигнализации FPU о том, что ЦП переходит в защищенный режим. В разных источниках приведены разные кодировки этой инструкции. |
Интел 287XL |
FNSTDW AX
|
DF E1
|
Сохраните слово устройства FPU в AX | Интел 387SL [ 10 ] [ 58 ] |
FNSTSG AX
|
DF E2
|
Сохраните регистр подписи FPU в AX [ а ] | |
FSBP0
|
DB E8
|
Выбор банка регистров сопроцессора 0 | ИИТ 2c87, 3c87 [ 10 ] [ 60 ] |
FSBP1
|
DB EB
|
Выбор банка регистров сопроцессора 1 | |
FSBP2
|
DB EA
|
Выбор банка регистров сопроцессора 2 | |
FSBP3
|
DB E9 [ 61 ]
|
Выбор банка регистров сопроцессора 3 (недокументировано) | |
F4X4 ,
|
DB F1
|
Умножьте 4-компонентный вектор на матрицу 4x4. Для правильной работы матрица должна быть предварительно загружена в банки регистров сопроцессора 1 и 2 (уникально для IIT FPU), а вектор должен быть загружен в банк регистров сопроцессора 0. Доступен пример кода. [ 60 ] [ 62 ] | |
FTSTP
|
D9 E6
|
Эквивалентно FTST за которым следует выталкивание стека.
|
Сайрикс 387+ [ 62 ] |
FRINT2
|
DB FC
|
Округлите st(0) до целого числа с округлением до ближайшего. | Сайрикс ЭМС87, 83с87, 83д87, 387+ [ 62 ] [ 10 ] |
FRICHOP
|
DD FC
|
Округлите st(0) до целого числа с округлением до нуля. | |
FRINEAR
|
DF FC
|
Округляем st(0) до целого числа с округлением до ближайших связей вдали от нуля. |
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Intel Руководство разработчика программного обеспечения для архитектуры Itanium, том 4 (номер документа: 323208, версия 2.3, май 2010 г.).
- ^ Перейти обратно: а б Intel SDM, том 1 , номер для заказа. 253665-083, март 2024 г., глава 2.5
- ^ Р. Сингхал, Да. Устарело. (о VP2INTERSECT), 19 июля 2023 г. Архивировано 23 июля 2023 г.
- ^ Александр Йи, Разборка AVX512 Zen5 и многое другое , 7 августа 2024 г.
- ^ Intel, Справочное руководство по архитектуре набора инструкций сопроцессора Intel® Xeon Phi™ , сентябрь 2012 г., номер заказа. 327364-001. Архивировано 4 августа 2021 года.
- ^ Intel, Справочные реализации для инструкций по аппроксимации архитектуры Intel® VRCP14, VRSQRT14, VRCP28, VRSQRT28 и VEXP2 , id #671685, 28 декабря 2015 г. Архивировано 18 сентября 2023 г.
Код C «RECIP28EXP2.c» заархивирован 18 сентября 2023 г.
- ^ Перейти обратно: а б Отчет о микропроцессоре, объяснение режима управления системой (том 6, № 8, 17 июня 1992 г.) — включает список кодов операций AMD/Cyrix SMM и кодов операций C&T Super386 «SuperState V». Архивировано 29 июня 2022 года.
- ^ «Высокопроизводительные маломощные встроенные микропроцессоры Am386®SX/SXL/SXLV» (PDF) . , публикация № 21020, ред. A, апрель 1997 г. — содержит описания инструкций SMM на страницах 5 и 6.
- ^ Intel против AMD, «Дело № C-93-20301 PVT, Установление фактов и правовых выводов после судебного модуля «ICE»» . 7 октября 1994 г. Архивировано из оригинала 10 мая 2021 г.
- ^ Перейти обратно: а б с д и ж Группа хакеров Потемкина, OPCODE.LST v4.51 , 15 октября 1999 г. Архивировано 21 мая 2001 г.
- ^ Ханс Петер Мессмер, «Незаменимая книга по аппаратному обеспечению ПК» (ISBN 0201403994), глава 10.6.1, страницы 280-281
- ^ Франк ван Гиллуве, «Недокументированный ПК, второе издание», 1997, ISBN 0-201-47950-8 , стр. 120
- ^ AMD, 3DNow! Руководство по технологии , изд.№. 21928G/0, март 2000 г. Архивировано 9 октября 2018 г.
- ^ AMD, Руководство программиста по архитектуре AMD64, том 5 , номер публикации 26569, версия 3.16, ноябрь 2021 г. — содержит подробную информацию о том, как
PFRCPIT1
,PFRSQIT1
иPFRCPIT2
выполните свои итерации Ньютона-Рафсона на страницах 118–125. Архивировано 24 сентября 2023 года. - ^ AMD, Книга данных процессоров Geode LX , pub.no. 33234H, февраль 2009 г., стр. 673. Архивировано 15 марта 2019 г.
- ^ «Требования к 64-разрядной версии Windows 10: поддерживает ли мой процессор CMPXCHG16b, PrefetchW и LAHF/SAHF?» .
- ^ Гжегож Мазур, AMD 3DNow! недокументированные инструкции
- ^ Перейти обратно: а б «Недокументированные инструкции 3DNow!» . grafi.ii.pw.edu.pl . Архивировано из оригинала 30 января 2003 года . Проверено 22 февраля 2022 г.
- ^ AMD, Технология AMD64: 128-битный набор инструкций SSE5 , pub.no. 43479, версия 3.01, август 2007 г. Архивировано из оригинала 24 января 2009 г.
- ^ AMD, Руководство программиста по архитектуре AMD64, том 6: 128-битные и 256-битные XOP и FMA4 , pub.no. 43479, ред. 3.04, ноябрь 2009 г. Архивировано 11 октября 2018 г.
- ^ Intel, Справочник по программированию расширенных векторных расширений , номер заказа. 319433-003, август 2008 г. - содержит характеристики
VPERMIL2PD
иVPERMIL2PS
на страницах 416 и 425, а также инструкции FMA4 на страницах 618–665 . Архивировано 24 сентября 2023 г. - ^ Intel, Справочник по программированию расширенных векторных расширений , номер заказа. 319433-004, декабрь 2008 г. - не содержит технических характеристик.
VPERMIL2PD
иVPERMIL2PS
и имеет FMA3 вместо FMA4. Архивировано 24 сентября 2023 г. - ^ Холлингсворт, Брент. «Новые инструкции «Бульдозер» и «Сваебойщик»» (PDF) . Advanced Micro Devices, Inc. Архивировано из оригинала (PDF) 26 июля 2014 года . Проверено 11 декабря 2014 г.
- ^ «Техническое описание семейства AMD серии A на 16 часов» (PDF) . amd.com . АМД . Октябрь 2013 г. Архивировано из оригинала (PDF) 7 ноября 2013 г. Проверено 2 января 2014 г.
- ^ «Руководство программиста по архитектуре AMD64, том 3: универсальные и системные инструкции» (PDF) . amd.com . АМД . Октябрь 2013 г. Архивировано из оригинала (PDF) 4 января 2014 г. . Проверено 2 января 2014 г.
- ^ «tbmintrin.h из GCC 4.8» . Архивировано из оригинала 23 февраля 2017 года . Проверено 17 марта 2014 г.
- ^ Список рассылки Xen-devel, x86/svm: прекращение поддержки облегченного профилирования AMD , 20 мая 2019 г.
- ^ Перейти обратно: а б с NEC, Руководство пользователя 16-битной серии V , сентябрь 2000 г. Архивировано 2 декабря 2021 г.
- ^ NEC, Предварительное руководство пользователя V30MZ , 1998 г., стр. 14. Архивировано 2 декабря 2021 г.
- ^ NEC 72291 FPU: список инструкций можно найти в Справочнике по перекрестному ассемблеру HP 64873 V-series , страницы с F-31 по F-34.
- ^ Справочник данных по 16-битным микропроцессорам NEC серии V, 1991 , стр. 360-361
- ^ Техническое описание Renesas Интегральная микросхема MOS uPD70320 . Архивировано 6 января 2022 г.
- ^ Перейти обратно: а б с Renesas, Техническое описание 16-битного микропроцессора NEC V55PI, U11775E . Архивировано 27 июля 2023 г.
- ^ Справочник данных по 16-битным микропроцессорам NEC серии V, 1991 , стр. 765-766
- ^ «V55PI 16-БИТНЫЙ МИКРОПРОЦЕССОР» . стр. 21–22 . Проверено 18 января 2024 г.
- ^ Renesas, Инструкция по эксплуатации NEC V55PI, U10231J (японский) . Коды операций для
PUSH/POP DS2/DS3
перечислены в определениях макросов на стр. 378. Архивировано 11 декабря 2022 года. - ^ Предварительные данные 16-битного микропроцессора NEC V55SC (ODNo ID-8206A, март 1993 г.), страницы 70 и 127. Расположены 20 апреля 2022 г. путем поиска «nec v55sc» на сайте datasheetarchive.com. Архивировано 22 ноября 2022 г.
- ^ NEC Справочное руководство программиста uPD70616 (ноябрь 1986 г.), стр.287. Архивировано 5 декабря 2006 г.
- ^ ZFMicro, ZFx86 Data Book 1.0 Rev D , 5 июня 2005 г., раздел 2.2.6.3, стр. 76. Архивировано 11 февраля 2009 г.
- ^ Texas Instruments, Справочное руководство по микропроцессору TI486, 1993 , раздел A.14, стр. 308
- ^ Дебби Уайлс, идентификация процессора , архивировано 4 июня 2004 г.
- ^ Лист данных Cyrix 486SLC/e (1992) , раздел 2.6.4
- ^ Перейти обратно: а б AMD, Справочник процессоров Geode LX , февраль 2009 г., идентификатор публикации 33234H, раздел 8.3.4, страницы 643–657. Архивировано 3 декабря 2023 г.
- ^ Перейти обратно: а б Справочник данных Cyrix 6x86MX , раздел 2.15.3
- ^ Документация NASM 0.98.31 на SourceForge, см. разделы B.275 и B.331. Архивировано 21 июля 2023 г.
- ^ Sandpile, 2-байтовые коды операций архитектуры x86 . Архивировано 3 ноября 2011 г.
- ^ VIA, Книга данных процессора Cyrix III , v1.00, 25 января 2000 г., стр. 103.
- ^ Книга данных Cyrix MediaGX , раздел 4.1.5
- ^ AMD, Справочник процессоров AMD Geode GX1 , версия 5.0, декабрь 2003 г., стр. 226. Архивировано 20 апреля 2020 года.
- ^ Cyrix, Замечания по применению 108 — Расширения Cyrix для набора мультимедийных инструкций , версия 0.93, 9 сентября 1998 г., страница 7
- ^ Журнал BYTE, ноябрь 1991 г. , стр. 245.
- ^ Институт океанографических наук, Звуковой буй — Справочник форматтера содержит некоторые макросы инструкций F8680 на странице 34. Архивировано 4 ноября 2018 г.
- ^ Руководство по проектированию системы ПК/чипа F8680 содержит описания многих регистров CREG F8680.
- ^ Михал Некасек, Подробнее о C&T Super386
- ^ Corexor, Безопасный вызов C&T SCALL , 5 декабря 2015 г. Архивировано 27 октября 2020 г.
- ^ DM&P, M6117D: Система на кристалле , страницы 31,34,68. Архивировано 20 июля 2006 г.
- ^ Intel «Математический сопроцессор Intel287 XL/XLT» , (октябрь 1992 г., номер заказа 290376-003), стр.33
- ^ Intel «Intel387 SL Mobile Math Coprocessor» (февраль 1992 г., номер заказа 290427-001), приложение A. Расположено 7 января 2022 г. путем поиска «intel387 sl» на сайте datasheetarchive.com. Архивировано 7 января 2022 г.
- ^ Десмонд Юэн, Архитектура Intel SL: разработка портативных приложений , (1993, ISBN 0-07-911336-2), стр.127
- ^ Перейти обратно: а б Справочник по сопроцессору Advanced Math IIT 3c87
- ^ Харальд Фельдманн, Список Hamarsoft 86BUGS
- ^ Перейти обратно: а б с Норберт Джуффа «Все, что вы всегда хотели знать о математических сопроцессорах» , редакция от 01 октября 1994 г.