Jump to content

Список инструкций x86, выпуск которых прекращен

Инструкции, которые в какой-то момент присутствовали в качестве документированных инструкций в одном или нескольких процессорах x86 , но серия процессоров, содержащая эти инструкции, снята с производства или заменена, без каких-либо известных планов по повторному представлению инструкций.

i386 инструкции

[ редактировать ]

Следующие инструкции были представлены в Intel 80386, но позже прекращены:

Инструкция Код операции Описание Возможная судьба
XBTS r, r/m 0F A6 /r Извлечь битовую строку Снят с производства, начиная с версии B1 модели 80386.

Коды операций кратко повторно используются для CMPXCHG только в Intel 486, шаг A — CMPXCHG был перенесен на другой код операции, начиная с 486, начиная с шага B.

Коды операций позже повторно использовались для 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 Проверьте адрес по нижней границе.

BNDCL, BNDCU и BNDCL все они создают исключение #BR, если проверка границ не удалась.

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 Префикс инструкции, используемый с определенными инструкциями ветвления. [ и ] чтобы указать, что они не должны очищать регистры границ.
  1. ^ Для всех инструкций MPX 16-битная адресация запрещена — это фактически приводит к тому, что префикс переопределения размера адреса 67h обязателен в 16-битном режиме и запрещен в 32-битном режиме. В 64-битном режиме 67h префикс игнорируется для инструкций MPX — размер адреса всегда 64-битный. Такое поведение уникально для инструкций MPX.
  2. ^ Для BNDMK в 64-битном режиме адресация относительно RIP не разрешена и приведет к ошибке #UD.
  3. ^ Перейти обратно: а б The BNDLDX и BNDSTX инструкции требуют режимов адресации памяти, которые используют байт SIB; режимы адресации, отличные от SIB, вызывают #UD.
  4. ^ Перейти обратно: а б The BNDLDX и BNDSTX инструкции создают исключение #BR, если запись каталога границ недействительна (что предотвращает преобразование адресов).
  5. ^ Инструкции ветвления, которые могут принять 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 Нет Нет
  1. ^ Перейти обратно: а б с Для инструкций 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])
dst[31:0] <- temp
dst[63:32] <- temp
3DNow! спецификация [ 13 ] не указывает непосредственно операцию, выполняемую PFRCPIT1, PFRSQIT1 и PFRCPIT2 инструкции — вместо этого он налагает требования к результатам совместного использования этих инструкций определенным образом: [ а ]

Если нижние 32 бита mm0 изначально содержит значение X в формате FP32, затем последовательность инструкций:

PFRCP mm1,mm0
PFRCPIT1 mm0,mm1
PFRCPIT2 mm0,mm1

должен заполнить обе 32-битные полосы mm0 с в формате FP32, рассчитанный с погрешностью не более 1 ulp .

Аналогично последовательность инструкций:
PFRSQRT mm1,mm0
MOVQ mm2,mm1
PFMUL mm1,mm1
PFRSQIT1 mm1,mm0
PFRCPIT2 mm1,mm2

должен заполнить обе 32-битные полосы mm1 с в формате FP32, рассчитанный с погрешностью не более 1 ulp.

PFRSQRT mm1,mm2/m64 0F 0F /r 97 Аппроксимация обратного квадратного корня с плавающей запятой (точность не менее 15 бит):
temp <- approx(1.0/sqrt(src[31:0]))
dst[31:0] <- temp
dst[63:32] <- temp
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]
dst[63:32] <- src[31:0] + src[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 с плавающей запятой. [ с ]
  1. ^ 3DNow! Требования к точности могут быть выполнены несколькими различными способами, например:
    • На AMD K6-2 PFRCPIT1, PFRSQIT1 и PFRCPIT2 инструкции будут выполнять различные части итерации Ньютона-Рафсона, чтобы повысить точность начального результата низкой точности из PFRCP/ PFRSQRT. [ 14 ]
    • На AMD Geode LX PFRCP и PFRSQRT инструкции вместо этого вычисляли свои результаты с полной 24-битной точностью – это позволило PFRCPIT1, PFRSQIT1 и PFRCPIT2 инструкции в чистые инструкции по перемещению данных, выполняющие ту же операцию, что и MOVQ. [ 15 ]
  2. ^ 3DNow! PMULHRW инструкция имеет ту же мнемонику, что и Cyrix EMMI. PMULHRW Однако ее код операции и функция различаются (инструкция EMMI сдвигает вправо результат умножения на 15 бит, а инструкция 3DNow! сдвигает вправо на 16 бит).

    Некоторые ассемблеры/дизассемблеры, такие как NASM, разрешают эту неоднозначность, используя мнемонику PMULHRWA для 3DNow! инструкция и PMULHRWC для инструкции EMMI.

  3. ^ FEMMS инструкция отличается от стандартной MMX EMMS инструкция в этом 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]
dst[63:32] <- src[31:0]
PFNACC mm1,mm2/m64 0F 0F /r 8A Упакованное отрицательное накопление с плавающей запятой:
dst[31:0] <- dst[31:0] − dst[63:32]
dst[63:32] <- src[31:0] − src[63:32]
PFPNACC mm1,mm2/m64 0F 0F /r 8E Упакованные положительные и отрицательные значения с плавающей запятой:
dst[31:0] <- dst[31:0] − dst[63:32]
dst[63:32] <- src[31:0] + src[63:32]
  1. ^ Перейти обратно: а б The PF2IW и PI2FW инструкции также существовали в виде недокументированных инструкций для оригинального К6-2.

    Недокументированный вариант PF2IW в K6-2 верхние 16 бит каждой 32-битной полосы результатов будут установлены на все 0, в то время как задокументированный вариант в более поздних процессорах будет расширять знак 16-битного результата до 32 бит. [ 17 ] [ 18 ]

  2. ^ 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 dst,src1,src2,src3 выполняет эквивалент dst <- (src1 AND src3) OR (src2 AND NOT(src3))

VPCMOV ymm1,ymm2,ymm3/m256,ymm4 XOP.8 A2 /r /is4 Да Да
Векторное целочисленное сравнение.

Для каждой полосы векторного регистра сравните src1 и src2, затем установите для адресата значение «все 1», если сравнение прошло успешно, и «все 0», если оно не удалось. Аргумент imm8 указывает выполняемую функцию сравнения:

  • 0: LT (меньше чем)
  • 1: LE (меньше или равно)
  • 2: GT (больше чем)
  • 3: GE (больше или равно)
  • 4: эквалайзер (одинаковый)
  • 5: NE (не равно)
  • 6: ЛОЖЬ (всегда ложь)
  • 7: ВЕРНО (всегда верно)
Подписанные 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-битной дорожки выполните dest <- src1*src2 + src3

Для источников 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 dst,src1,src2,src3, src2:src1 считаются 32-элементным вектором байтов. Для каждой байтовой дорожки байт в src3 используется для индексации этого 32-байтового вектора и преобразования элемента:

  • биты 4:0 используются для выбора одного из 32 байтов.
  • биты 7:6 определяют преобразование, которое необходимо выполнить с байтом (0 = сохранить, 1 = обратный бит, 2 = обнулить, 3 = реплицировать-MSB)
  • бит 5, если он установлен, инвертирует результат после преобразования.
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
  1. ^ Перейти обратно: а б с д и ж г час Для каждого 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 интерпретируется следующим образом:

  • Бит 7:0: начальная позиция
  • Бит 15:8: длина
  • Бит 31:16: игнорируется
(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)
  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. Аргументы вставляются в запись события следующим образом:
  • Первый аргумент хранится в байтах 23:16 (расширяется нулем, если 32-битный).
  • Второй аргумент хранится в байтах 7:4.
  • Младшие 16 бит imm32 хранятся в байтах 3:2 (старшие 16 бит игнорируются).

The LWPINS инструкция устанавливает CF=1, если LWP включен и кольцевой буфер заполнен, в противном случае CF=0.

LWPVAL r32/64, r/m32, imm32 XOP.A 12 /1 imm32 Уменьшите счетчик событий, связанный с событием выборки запрограммированного значения. Если результирующее значение счетчика окажется отрицательным, вставьте запись события с EventID=1 в кольцевой буфер LWP. (Аргументы инструкции вставляются в эту запись так же, как и для LWPINS.)

Выполняется как NOP, если LWP не включен или счетчик событий не включен. Если запись о событии не вставлена, то второй аргумент (который может быть аргументом памяти) не доступен.

  1. ^ Перейти обратно: а б Адрес, используемый 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 — этот сопроцессор также использует стандарт D8-DF escape-коды операций, но использует их для кодирования набора инструкций, уникального для 72291 и несовместимого с x87. Доступен список кодов операций/инструкций, поддерживаемых 72291. [ 30 ]

BRKEM imm8 0F FF ib Перейдите в режим эмуляции 8080 .

Перейдите по адресу, выбранному из IVT (таблицы векторов прерываний), используя аргумент imm8, аналогичный 8086. INT инструкцию, но начните выполняться как код Intel 8080, а не как код x86.

В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. HLT Инструкция заключается в том, что часы также останавливаются, поэтому для возобновления работы требуется сброс NMI или ЦП.

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 7E кодировка на Cyrix 486, 5x86, 6x86 и ZFx86.

Использование 0F 38 кодирование на Cyrix 6x86MX, MII, MediaGX и Geode.

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 Возврат из режима управления отладкой
  1. ^ Инструкции Cyrix SMM также включают RSM ( 0F AA; Возврат из режима управления системой), однако RSM не является специфичной для Cyrix инструкцией и продолжает существовать в современных процессорах x86, отличных от Cyrix.
  2. ^ RSDC с CS в качестве регистра назначения поддерживается только в NatSemi Geode GX2 и AMD Geode GX/LX. [ 43 ] - на других процессорах вызывает #UD.
  3. ^ Некоторые ассемблеры/дизассемблеры, такие как NASM , используют мнемонику инструкций. SMINTOLD для 0F 7E кодировка.
  4. ^ Перейти обратно: а б Для 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
  1. ^ Реализации различаются в зависимости от того, PAVEB Инструкция рассматривает байты как знаковые или беззнаковые. [ 50 ]
  2. ^ Перейти обратно: а б с д и ж Для PDISTIB, PMACHRIW и PMV* инструкции, второй явный операнд должен быть операндом памяти — операнды регистров не поддерживаются.
  3. ^ Сайрикс ЭММИ 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 ]

или

DB E5[ 10 ]

Защищенный режим сброса 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,

FMUL4X4

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) до целого числа с округлением до ближайших связей вдали от нуля.
  1. ^ FNSTSG AX Инструкция может быть выполнена не только на Intel 387SL FPU, но и на Intel 387SX – выполнение инструкции сразу после FNINIT приведет к возврату инструкции 0000h на 387SX, но ненулевое значение подписи на 387SL. [ 59 ]

См. также

[ редактировать ]
  1. ^ Intel Руководство разработчика программного обеспечения для архитектуры Itanium, том 4 (номер документа: 323208, версия 2.3, май 2010 г.).
  2. ^ Перейти обратно: а б Intel SDM, том 1 , номер для заказа. 253665-083, март 2024 г., глава 2.5
  3. ^ Р. Сингхал, Да. Устарело. (о VP2INTERSECT), 19 июля 2023 г. Архивировано 23 июля 2023 г.
  4. ^ Александр Йи, Разборка AVX512 Zen5 и многое другое , 7 августа 2024 г.
  5. ^ Intel, Справочное руководство по архитектуре набора инструкций сопроцессора Intel® Xeon Phi™ , сентябрь 2012 г., номер заказа. 327364-001. Архивировано 4 августа 2021 года.
  6. ^ Intel, Справочные реализации для инструкций по аппроксимации архитектуры Intel® VRCP14, VRSQRT14, VRCP28, VRSQRT28 и VEXP2 , id #671685, 28 декабря 2015 г. Архивировано 18 сентября 2023 г.

    Код C «RECIP28EXP2.c» заархивирован 18 сентября 2023 г.

  7. ^ Перейти обратно: а б Отчет о микропроцессоре, объяснение режима управления системой (том 6, № 8, 17 июня 1992 г.) — включает список кодов операций AMD/Cyrix SMM и кодов операций C&T Super386 «SuperState V». Архивировано 29 июня 2022 года.
  8. ^ «Высокопроизводительные маломощные встроенные микропроцессоры Am386®SX/SXL/SXLV» (PDF) . , публикация № 21020, ред. A, апрель 1997 г. — содержит описания инструкций SMM на страницах 5 и 6.
  9. ^ Intel против AMD, «Дело № C-93-20301 PVT, Установление фактов и правовых выводов после судебного модуля «ICE»» . 7 октября 1994 г. Архивировано из оригинала 10 мая 2021 г.
  10. ^ Перейти обратно: а б с д и ж Группа хакеров Потемкина, OPCODE.LST v4.51 , 15 октября 1999 г. Архивировано 21 мая 2001 г.
  11. ^ Ханс Петер Мессмер, «Незаменимая книга по аппаратному обеспечению ПК» (ISBN 0201403994), глава 10.6.1, страницы 280-281
  12. ^ Франк ван Гиллуве, «Недокументированный ПК, второе издание», 1997, ISBN   0-201-47950-8 , стр. 120
  13. ^ AMD, 3DNow! Руководство по технологии , изд.№. 21928G/0, март 2000 г. Архивировано 9 октября 2018 г.
  14. ^ AMD, Руководство программиста по архитектуре AMD64, том 5 , номер публикации 26569, версия 3.16, ноябрь 2021 г. — содержит подробную информацию о том, как PFRCPIT1, PFRSQIT1 и PFRCPIT2 выполните свои итерации Ньютона-Рафсона на страницах 118–125. Архивировано 24 сентября 2023 года.
  15. ^ AMD, Книга данных процессоров Geode LX , pub.no. 33234H, февраль 2009 г., стр. 673. Архивировано 15 марта 2019 г.
  16. ^ «Требования к 64-разрядной версии Windows 10: поддерживает ли мой процессор CMPXCHG16b, PrefetchW и LAHF/SAHF?» .
  17. ^ Гжегож Мазур, AMD 3DNow! недокументированные инструкции
  18. ^ Перейти обратно: а б «Недокументированные инструкции 3DNow!» . grafi.ii.pw.edu.pl . Архивировано из оригинала 30 января 2003 года . Проверено 22 февраля 2022 г.
  19. ^ AMD, Технология AMD64: 128-битный набор инструкций SSE5 , pub.no. 43479, версия 3.01, август 2007 г. Архивировано из оригинала 24 января 2009 г.
  20. ^ AMD, Руководство программиста по архитектуре AMD64, том 6: 128-битные и 256-битные XOP и FMA4 , pub.no. 43479, ред. 3.04, ноябрь 2009 г. Архивировано 11 октября 2018 г.
  21. ^ Intel, Справочник по программированию расширенных векторных расширений , номер заказа. 319433-003, август 2008 г. - содержит характеристики VPERMIL2PD и VPERMIL2PS на страницах 416 и 425, а также инструкции FMA4 на страницах 618–665 . Архивировано 24 сентября 2023 г.
  22. ^ Intel, Справочник по программированию расширенных векторных расширений , номер заказа. 319433-004, декабрь 2008 г. - не содержит технических характеристик. VPERMIL2PD и VPERMIL2PS и имеет FMA3 вместо FMA4. Архивировано 24 сентября 2023 г.
  23. ^ Холлингсворт, Брент. «Новые инструкции «Бульдозер» и «Сваебойщик»» (PDF) . Advanced Micro Devices, Inc. Архивировано из оригинала (PDF) 26 июля 2014 года . Проверено 11 декабря 2014 г.
  24. ^ «Техническое описание семейства AMD серии A на 16 часов» (PDF) . amd.com . АМД . Октябрь 2013 г. Архивировано из оригинала (PDF) 7 ноября 2013 г. Проверено 2 января 2014 г.
  25. ^ «Руководство программиста по архитектуре AMD64, том 3: универсальные и системные инструкции» (PDF) . amd.com . АМД . Октябрь 2013 г. Архивировано из оригинала (PDF) 4 января 2014 г. . Проверено 2 января 2014 г.
  26. ^ «tbmintrin.h из GCC 4.8» . Архивировано из оригинала 23 февраля 2017 года . Проверено 17 марта 2014 г.
  27. ^ Список рассылки Xen-devel, x86/svm: прекращение поддержки облегченного профилирования AMD , 20 мая 2019 г.
  28. ^ Перейти обратно: а б с NEC, Руководство пользователя 16-битной серии V , сентябрь 2000 г. Архивировано 2 декабря 2021 г.
  29. ^ NEC, Предварительное руководство пользователя V30MZ , 1998 г., стр. 14. Архивировано 2 декабря 2021 г.
  30. ^ NEC 72291 FPU: список инструкций можно найти в Справочнике по перекрестному ассемблеру HP 64873 V-series , страницы с F-31 по F-34.
  31. ^ Справочник данных по 16-битным микропроцессорам NEC серии V, 1991 , стр. 360-361
  32. ^ Техническое описание Renesas Интегральная микросхема MOS uPD70320 . Архивировано 6 января 2022 г.
  33. ^ Перейти обратно: а б с Renesas, Техническое описание 16-битного микропроцессора NEC V55PI, U11775E . Архивировано 27 июля 2023 г.
  34. ^ Справочник данных по 16-битным микропроцессорам NEC серии V, 1991 , стр. 765-766
  35. ^ «V55PI 16-БИТНЫЙ МИКРОПРОЦЕССОР» . стр. 21–22 . Проверено 18 января 2024 г.
  36. ^ Renesas, Инструкция по эксплуатации NEC V55PI, U10231J (японский) . Коды операций для PUSH/POP DS2/DS3 перечислены в определениях макросов на стр. 378. Архивировано 11 декабря 2022 года.
  37. ^ Предварительные данные 16-битного микропроцессора NEC V55SC (ODNo ID-8206A, март 1993 г.), страницы 70 и 127. Расположены 20 апреля 2022 г. путем поиска «nec v55sc» на сайте datasheetarchive.com. Архивировано 22 ноября 2022 г.
  38. ^ NEC Справочное руководство программиста uPD70616 (ноябрь 1986 г.), стр.287. Архивировано 5 декабря 2006 г.
  39. ^ ZFMicro, ZFx86 Data Book 1.0 Rev D , 5 июня 2005 г., раздел 2.2.6.3, стр. 76. Архивировано 11 февраля 2009 г.
  40. ^ Texas Instruments, Справочное руководство по микропроцессору TI486, 1993 , раздел A.14, стр. 308
  41. ^ Дебби Уайлс, идентификация процессора , архивировано 4 июня 2004 г.
  42. ^ Лист данных Cyrix 486SLC/e (1992) , раздел 2.6.4
  43. ^ Перейти обратно: а б AMD, Справочник процессоров Geode LX , февраль 2009 г., идентификатор публикации 33234H, раздел 8.3.4, страницы 643–657. Архивировано 3 декабря 2023 г.
  44. ^ Перейти обратно: а б Справочник данных Cyrix 6x86MX , раздел 2.15.3
  45. ^ Документация NASM 0.98.31 на SourceForge, см. разделы B.275 и B.331. Архивировано 21 июля 2023 г.
  46. ^ Sandpile, 2-байтовые коды операций архитектуры x86 . Архивировано 3 ноября 2011 г.
  47. ^ VIA, Книга данных процессора Cyrix III , v1.00, 25 января 2000 г., стр. 103.
  48. ^ Книга данных Cyrix MediaGX , раздел 4.1.5
  49. ^ AMD, Справочник процессоров AMD Geode GX1 , версия 5.0, декабрь 2003 г., стр. 226. Архивировано 20 апреля 2020 года.
  50. ^ Cyrix, Замечания по применению 108 — Расширения Cyrix для набора мультимедийных инструкций , версия 0.93, 9 сентября 1998 г., страница 7
  51. ^ Журнал BYTE, ноябрь 1991 г. , стр. 245.
  52. ^ Институт океанографических наук, Звуковой буй — Справочник форматтера содержит некоторые макросы инструкций F8680 на странице 34. Архивировано 4 ноября 2018 г.
  53. ^ Руководство по проектированию системы ПК/чипа F8680 содержит описания многих регистров CREG F8680.
  54. ^ Михал Некасек, Подробнее о C&T Super386
  55. ^ Corexor, Безопасный вызов C&T SCALL , 5 декабря 2015 г. Архивировано 27 октября 2020 г.
  56. ^ DM&P, M6117D: Система на кристалле , страницы 31,34,68. Архивировано 20 июля 2006 г.
  57. ^ Intel «Математический сопроцессор Intel287 XL/XLT» , (октябрь 1992 г., номер заказа 290376-003), стр.33
  58. ^ Intel «Intel387 SL Mobile Math Coprocessor» (февраль 1992 г., номер заказа 290427-001), приложение A. Расположено 7 января 2022 г. путем поиска «intel387 sl» на сайте datasheetarchive.com. Архивировано 7 января 2022 г.
  59. ^ Десмонд Юэн, Архитектура Intel SL: разработка портативных приложений , (1993, ISBN 0-07-911336-2), стр.127
  60. ^ Перейти обратно: а б Справочник по сопроцессору Advanced Math IIT 3c87
  61. ^ Харальд Фельдманн, Список Hamarsoft 86BUGS
  62. ^ Перейти обратно: а б с Норберт Джуффа «Все, что вы всегда хотели знать о математических сопроцессорах» , редакция от 01 октября 1994 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 89093597ac7e80c9f5bf015127e78f1f__1723945560
URL1:https://arc.ask3.ru/arc/aa/89/1f/89093597ac7e80c9f5bf015127e78f1f.html
Заголовок, (Title) документа по адресу, URL1:
List of discontinued x86 instructions - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)