Instrucciones que en algún momento estuvieron presentes como instrucciones documentadas en uno o más procesadores x86 , pero donde las series de procesadores que contienen las instrucciones se discontinuaron o reemplazaron, sin planes conocidos de reintroducir las instrucciones.
Las siguientes instrucciones se introdujeron en el Intel 80386, pero luego se descontinuaron:
Estas instrucciones solo están presentes en el modo de funcionamiento x86 de los primeros procesadores Intel Itanium con soporte de hardware para x86. Este soporte se agregó en "Merced" y se eliminó en "Montecito", reemplazándose por emulación de software .
Estas instrucciones se introdujeron en las CPU Intel Core "Skylake" de sexta generación . La última generación de CPU que las admitió fue la CPU Core " Coffee Lake " de novena generación.
Intel MPX agrega cuatro registros nuevos, BND0 a BND3, cada uno de los cuales contiene un par de direcciones. MPX también define una tabla de límites como una estructura de datos de directorio/tabla de dos niveles en la memoria que contiene conjuntos de límites superiores e inferiores.
67h
sea obligatorio en el modo de 16 bits y prohibido en el modo de 32 bits. En el modo de 64 bits, el 67h
prefijo se ignora para las instrucciones MPX; el tamaño de la dirección siempre es de 64 bits. Estos comportamientos son exclusivos de las instrucciones MPX.BNDMK
el modo de 64 bits, el direccionamiento relativo a RIP no está permitido y provocará un error #UD.BNDLDX
y BNDSTX
requieren modos de direccionamiento de memoria que utilizan el byte SIB − los modos de direccionamiento que no son SIB causan #UD.BNDLDX
y BNDSTX
producen una excepción #BR si la entrada del directorio de límites no es válida (lo que impide la traducción de direcciones).BND
prefijo son las formas cercanas de JMP
(códigos de operación E9
y FF /4
), CALL
(códigos de operación E8
y FF /2
), RET
(códigos de operación C2
y C3
), y las formas cortas/cercanas de las Jcc
instrucciones (códigos de operación 70..7F
y 0F 80..8F
). Si el bit de configuración BNDPRESERVE no está establecido, entonces ejecutar cualquiera de estas instrucciones de bifurcación sin el BND
prefijo borrará los cuatro registros de límites. (Otras instrucciones de bifurcación − como por ejemplo saltos lejanos, saltos cortos ( EB
), LOOP
, IRET
etc. − no borran los registros de límites independientemente de si F2h
hay un prefijo presente o no).La característica de elisión de bloqueo de hardware de Intel TSX está marcada en Intel SDM como eliminada a partir de 2019. [2] Esta característica tomó la forma de dos prefijos de instrucción, XACQUIRE
y XRELEASE
, que podían adjuntarse a atómicos/almacenes de memoria para eludir el bloqueo de memoria que representan.
Las instrucciones VP2INTERSECT (un subconjunto de AVX-512) se introdujeron en Tiger Lake (procesadores Core móviles de 11.ª generación), pero nunca fueron admitidas oficialmente en ningún otro procesador Intel; ahora se consideran obsoletas [3] y figuran en el SDM de Intel como eliminadas a partir de 2023. [2]
A partir de julio de 2024, las instrucciones VP2INTERSECT se han reintroducido en los procesadores AMD Zen 5. [4]
Los procesadores Xeon Phi de primera generación , con nombre en código "Knights Corner" (KNC), admitían una gran cantidad de instrucciones que no se ven en ningún procesador x86 posterior. Hay disponible una referencia de instrucciones [5] : las instrucciones/códigos de operación exclusivos de KNC son los que tienen prefijos VEX y MVEX (excepto las instrucciones KMOV
, KNOT
y KORTEST
; estas se mantienen con los mismos códigos de operación y función en AVX-512, pero con una "W" agregada a sus nombres de instrucción).
La mayoría de estas instrucciones exclusivas de KNC son similares pero no idénticas a las instrucciones en AVX-512 ; los procesadores Xeon Phi posteriores reemplazaron estas instrucciones con AVX-512.
Las primeras versiones de AVX-512 evitaban las codificaciones de instrucciones utilizadas por el prefijo MVEX de KNC; sin embargo, con la introducción de Intel APX ( Advanced Performance Extensions ) en 2023, algunas de las antiguas codificaciones de instrucciones MVEX de KNC se han reutilizado para las nuevas codificaciones APX. Por ejemplo, tanto KNC como APX aceptan la codificación de instrucciones 62 F1 79 48 6F 04 C1
como válida, pero le asignan diferentes significados:
VMOVDQA32 zmm0, k0, xmmword ptr [rcx+rax*8]{uint8}
- carga vectorial con conversión de datosVMOVDQA32 zmm0, [rcx+r16*8]
- carga vectorial con uno de los nuevos GPR extendidos de APX utilizados como índice escaladoAlgunas de las instrucciones AVX-512 de los procesadores Xeon Phi "Knights Landing" y modelos posteriores pertenecen a los subconjuntos AVX-512 "AVX512ER", "AVX512_4FMAPS", "AVX512PF" y "AVX512_4VNNIW", todos ellos exclusivos de la serie de procesadores Xeon Phi. Los subconjuntos ER y PF se introdujeron en "Knights Landing"; las instrucciones 4FMAPS y 4VNNIW se añadieron posteriormente en "Knights Mill".
Las instrucciones ER y 4FMAPS son instrucciones aritméticas de punto flotante que siguen un patrón determinado donde:
Las instrucciones AVX512PF son un conjunto de 16 instrucciones de precarga. Todas estas instrucciones utilizan codificación VSIB, donde se requiere un modo de direccionamiento de memoria que utilice el byte SIB y donde la parte de índice del byte SIB se toma para indexar en el archivo de registro vectorial AVX512 en lugar de en el archivo de registro GPR. El registro vectorial AVX512 seleccionado se interpreta entonces como un vector de índices, lo que hace que se realice el cálculo estándar de dirección de desplazamiento + índice + base x86 para cada carril vectorial, lo que hace que se realice una operación de memoria asociada (precargas en el caso de las instrucciones AVX512PF) para cada carril activo. Todas las codificaciones de instrucciones siguen un patrón en el que:
Las instrucciones AVX512_4VNNIW leen un elemento de datos de 128 bits de la memoria, que contiene 4 vectores de dos componentes (cada componente con signo de 16 bits). Luego, para cada uno de los 4 registros AVX-512 consecutivos, interpretarán, para cada carril de 32 bits, el carril como un vector de dos componentes (con signo de 16 bits) y realizarán un producto escalar con el vector de dos componentes correspondiente que se leyó de la memoria (el primer vector de dos componentes de la memoria se utiliza para el primer registro de origen AVX-512, y así sucesivamente). Estos resultados se acumulan luego en un registro de vector de destino.
Los procesadores Xeon Phi (desde Knights Landing en adelante) también presentaban la PREFETCHWT1 m8
instrucción (opcode 0F 0D /2
, prefetch into L2 cache with intent to write) − estas eran las únicas CPU Intel que admitían oficialmente esta instrucción, pero sigue siendo compatible con algunos procesadores que no son Intel (por ejemplo, Zhaoxin YongFeng).
Se introdujeron algunas instrucciones para admitir el modo de administración del sistema en los procesadores Am386SXLV y Am386DXLV. [7] [8] También estaban presentes en los procesadores posteriores Am486SXLV/DXLV y Elan SC300/310. [9]
La funcionalidad SMM de estos procesadores se implementó utilizando el microcódigo ICE de Intel sin una licencia válida, lo que resultó en una demanda que AMD perdió a fines de 1994. [10] Como resultado de esta pérdida, el microcódigo ICE se eliminó de todas las CPU AMD posteriores y las instrucciones SMM se eliminaron con él.
Estas instrucciones SMM también estaban presentes en el IBM 386SLC y sus derivados (aunque con el LOADALL
código de operación de retorno SMM similar 0F 07
llamado ICERET
), [12] [14] [11] así como en el procesador UMC U5S . [15]
La extensión del conjunto de instrucciones 3DNow! se introdujo en el procesador AMD K6-2 , principalmente para agregar compatibilidad con instrucciones SIMD de punto flotante que utilizan los registros MMX (dos componentes FP32 en un registro vectorial de 64 bits). Las instrucciones fueron promocionadas principalmente por AMD, pero también eran compatibles con algunas CPU que no eran de AMD. Los procesadores que admitían 3DNow! eran:
PFRCPIT1
, PFRSQIT1
y PFRCPIT2
realizarían varias partes de una iteración de Newton-Raphson para mejorar la precisión de un resultado inicial de baja precisión de PFRCP
/ PFRSQRT
. [17]PFRCP
y PFRSQRT
calcularían sus resultados con una precisión total de 24 bits: esto hizo posible convertir las PFRCPIT1
instrucciones PFRSQIT1
y PFRCPIT2
en instrucciones de movimiento de datos puros, realizando la misma operación que MOVQ
. [18]PMULHRW
tiene el mismo mnemónico que la instrucción Cyrix EMMI PMULHRW
, sin embargo su código de operación y función difieren (la instrucción EMMI desplaza a la derecha su resultado de multiplicación en 15 bits, mientras que la instrucción 3DNow! desplaza a la derecha en 16 bits).Algunos ensambladores/desensambladores, como NASM, resuelven esta ambigüedad utilizando el mnemónico PMULHRWA
para la instrucción 3DNow! y PMULHRWC
para la instrucción EMMI.
FEMMS
instrucción se diferencia de la instrucción MMX estándar EMMS
en que FEMMS
hace que el contenido del registro FP/MMX no esté definido después de que se ejecuta la instrucción.3DNow! también introdujo un par de instrucciones de precarga: PREFETCH m8
(opcode 0F 0D /0
) y PREFETCHW m8
(opcode 0F 0D /1
). Estas instrucciones, a diferencia del resto de 3DNow!, no se han discontinuado, pero continúan siendo compatibles con las CPU AMD modernas. La PREFETCHW
instrucción también es compatible con las CPU Intel a partir de Pentium 4 de 65 nm , [19] aunque se ejecutaba como NOP hasta Broadwell .
PF2IW
y PI2FW
también existían como instrucciones no documentadas en el K6-2 original.La variante no documentada PF2IW
en K6-2 establecería los 16 bits superiores de cada línea de resultado de 32 bits en todos los 0, mientras que la variante documentada en procesadores posteriores extendería el signo del resultado de 16 bits a 32 bits. [20] [21]
PSWAPD
instrucción utiliza el mismo código de operación que la antigua PSWAPW
instrucción K6-2 no documentada. [21]SSE5 fue una extensión SSE propuesta por AMD, que utilizaba una nueva codificación de instrucciones "DREX" para agregar soporte para nuevas instrucciones de 3 y 4 operandos a SSE. [22] El paquete no incluía el conjunto completo de instrucciones SSE4 de Intel, lo que lo convertía en un competidor de SSE4 en lugar de un sucesor.
AMD decidió no implementar SSE5 como se propuso originalmente; en su lugar, lo reelaboró en FMA4 y XOP, [23] que brindaban una funcionalidad similar pero con una codificación de instrucciones bastante diferente, utilizando el prefijo VEX para las instrucciones FMA4 y el nuevo prefijo XOP similar a VEX para la mayoría de las instrucciones restantes.
Introducido con el núcleo del procesador Bulldozer, eliminado nuevamente a partir de Zen (microarquitectura) en adelante.
Una revisión de la mayor parte del conjunto de instrucciones SSE5.
Las instrucciones XOP utilizan principalmente el prefijo XOP, que es un prefijo de 3 bytes con el siguiente diseño:
dónde:
POP
instrucción anterior, lo que las hace inutilizables para XOP), solo se usaron map 8
y 9
map para instrucciones que toman un inmediato de 8 bits, map para instrucciones que no toman un inmediato y map para instrucciones que toman un inmediato de 32 bits.0Ah
8
9
0Ah
Las instrucciones XOP codificadas con el prefijo XOP son las siguientes:
VPCOM*
instrucción, hay una serie de mnemotécnicos de alias disponibles para la instrucción, uno para cada una de las ocho funciones de comparación codificables en el argumento imm8. Estos mnemotécnicos de alias especifican la comparación que se realizará después de la parte "VPCOM" del mnemotécnico. Por ejemplo:VPCOMEQB xmm1,xmm2,xmm3
es un alias paraVPCOMB xmm1,xmm2,xmm3,4
VPCOMFALSEUQ xmm1,xmm2,[ebx]
es un alias paraVPCOMUQ xmm1,xmm2,[ebx],6
XOP también incluía dos instrucciones vectoriales que usaban el prefijo VEX en lugar del prefijo XOP:
Las instrucciones VPERMIL2PD
y VPERMIL2PS
fueron definidas originalmente por Intel en los primeros borradores de la especificación AVX [24] − fueron eliminadas en borradores posteriores [25] [26] y nunca fueron implementadas en ningún procesador Intel. Sin embargo, fueron implementadas por AMD, que las designó como parte de la extensión del conjunto de instrucciones XOP. (Al igual que las otras partes de XOP, han sido eliminadas en AMD Zen ).
Compatible con procesadores AMD a partir de la arquitectura Bulldozer , eliminado en Zen . No compatible con ningún chip Intel a partir de 2023.
Multiplicación-suma fusionada con cuatro operandos. FMA4 se implementó en hardware antes de FMA3.
AMD introdujo TBM junto con BMI1 en su línea de procesadores Piledriver [27] ; los procesadores posteriores basados en AMD Jaguar y Zen no son compatibles con TBM. [28] Ningún procesador Intel (a partir de 2023) es compatible con TBM.
Todas las instrucciones TBM están codificadas con el prefijo XOP. Están disponibles en formatos de 32 y 64 bits, seleccionados con el bit XOP.W (0=32 bits, 1=64 bits). (XOP.W se ignora fuera del modo de 64 bits). Al igual que todas las instrucciones codificadas con prefijos VEX/XOP, no están disponibles en modo real ni en modo Virtual-8086.
BEXTR
, un formulario de registro está disponible como parte de BMI1.La función AMD Lightweight Profiling (LWP) se introdujo en AMD Bulldozer y se eliminó en AMD Zen . En todas las CPU compatibles, las últimas actualizaciones de microcódigo disponibles han deshabilitado LWP debido a las mitigaciones de Spectre . [31]
Estas instrucciones están disponibles en Ring 3, pero no en Real Mode ni en Virtual-8086. Todas ellas utilizan el prefijo XOP.
LLWPCB
y SLWPCB
es una dirección efectiva, especificada en relación con la dirección base del segmento DS: LLWPCB
convierte esta dirección efectiva en una dirección lineal al sumarle la dirección base DS y SLWPCB
la convierte nuevamente al restarle la dirección base DS. Si se cambia la dirección base DS mientras LWP está habilitado, se SLWPCB
devolverá una dirección diferente a la que se especificó en LLWPCB
y también puede provocar XSAVE
que no se guarde correctamente el estado de LWP.Estas instrucciones son específicas de las CPU NEC V20/V30 y sus sucesoras, y no aparecen en ninguna CPU que no sea NEC. Muchos de sus códigos de operación se han reasignado a otras instrucciones en CPU posteriores que no son NEC.
Estas instrucciones están presentes en las CPU Cyrix, así como en las CPU NatSemi/AMD Geode derivadas de microarquitecturas Cyrix (Geode GX y LX, pero no NX). También están presentes en las CPU de los socios fabricantes de Cyrix , como IBM, ST y TI, así como en el VIA Cyrix III (solo núcleo "Joshua", no "Samuel") y algunos SoC como STPC ATLAS y ZFMicro ZFx86. [43] Muchos de estos códigos de operación se han reasignado a otras instrucciones en CPU posteriores que no son Cyrix.
RSM
( 0F AA
; Regresar del modo de administración del sistema), sin embargo, RSM
no es una instrucción específica de Cyrix y continúa existiendo en los procesadores x86 modernos que no son Cyrix.RSDC
con CS
como registro de destino solo es compatible con NatSemi Geode GX2 y AMD Geode GX/LX [47] - en otros procesadores, provoca #UD.SMINTOLD
para la 0F 7E
codificación.RDSHR
y WRSHR
, la documentación de Cyrix [48] especifica que la instrucción acepta un byte ModR/M pero no especifica la codificación del campo reg del byte ModR/M. NASM v0.98.31 y posteriores utilizan /0 para estas instrucciones, [49] mientras que las tablas de códigos de operación de sandpile.org [50] indican que el campo reg se ignora para estas instrucciones.Estas instrucciones se introdujeron en los procesadores Cyrix 6x86MX y MII, y también estaban presentes en los procesadores MediaGXm y Geode GX1 [53] . (En procesadores posteriores que no eran Cyrix, todos sus códigos de operación se han utilizado para instrucciones SSE o SSE2).
Estas instrucciones son instrucciones SIMD de números enteros que actúan sobre vectores de 64 bits en registros MMX o memoria. Cada instrucción toma dos operandos explícitos, donde el primero es un operando de registro MMX y el segundo es un operando de memoria o un segundo registro MMX. Además, varias de las instrucciones toman un operando implícito, que es un registro MMX implícito del primer operando, como se muestra a continuación:
En las descripciones de instrucciones de la siguiente tabla, arg1
se arg2
hace referencia a los dos operandos explícitos de la instrucción y imp
al operando implícito.
PAVEB
instrucción trata los bytes como firmados o no firmados. [54]PDISTIB
, se requiere que el segundo operando explícito sea un operando de memoria − los operandos de registro no son compatibles.PMACHRIW
PMV*
PMULHRW
tiene el mismo mnemónico que la PMULHRW
instrucción 3DNow!, sin embargo su código de operación y función difieren (la instrucción EMMI desplaza a la derecha su resultado de multiplicación en 15 bits, mientras que la instrucción 3DNow! lo desplaza a la derecha en 16 bits).Algunos ensambladores/desensambladores, como NASM, resuelven esta ambigüedad utilizando el mnemónico PMULHRWA
para la instrucción 3DNow! y PMULHRWC
para la instrucción EMMI.
Todos los procesadores VIA C3 admiten el conjunto de instrucciones alternativas (AIS ) de VIA. Las instrucciones x86 presentes en estos procesadores para admitir AIS son:
Estas instrucciones no están presentes en VIA C7 ni en ningún procesador VIA posterior.
El PC/Chip C&T F8680 es un sistema en un chip que incluye un núcleo de CPU compatible con 80186, con algunas instrucciones adicionales para admitir la función de supervisión/gestión del sistema "SuperState R" [58] específica del F8680 . Algunas de las instrucciones agregadas para "SuperState R" son: [59]
C&T también desarrolló un procesador compatible con 386 conocido como Super386. Este procesador admite, además del conjunto de instrucciones básico de Intel 386, una serie de instrucciones para admitir la función de administración del sistema "SuperState V" específica de Super386 . Las instrucciones agregadas para "SuperState V" son: [7]
La serie M6117 de microcontroladores integrados cuenta con un núcleo de CPU compatible con Intel 386SX derivado del procesador VM Technology (VMT) VM386SX+. VMT VM386SX+ agrega algunas adiciones específicas del procesador al conjunto de instrucciones Intel 386. Las documentadas para DM&P M6117D son: [63]
Varios coprocesadores de punto flotante de la clase 80387 proporcionaron instrucciones adicionales a las estándar del 80387; ninguna de ellas es compatible con los procesadores posteriores:
FNSTSG AX
instrucción se puede ejecutar no solo en la FPU Intel 387SL sino también en la Intel 387SX: ejecutar la instrucción inmediatamente después FNINIT
hará que la instrucción regrese 0000h
en 387SX, pero un valor de firma distinto de cero en la 387SL. [66]Código C "RECIP28EXP2.c" archivado el 18 de septiembre de 2023.
PFRCPIT1
realizan sus iteraciones de Newton-Raphson en las páginas 118 a 125. Archivado el 24 de septiembre de 2023.PFRSQIT1
PFRCPIT2
VPERMIL2PD
y VPERMIL2PS
en las páginas 411 y 420, así como instrucciones FMA4 en las páginas 612 a 660. Archivado desde el original el 7 de agosto de 2011.VPERMIL2PD
y VPERMIL2PS
y tiene FMA3 en lugar de FMA4. Archivado el 24 de septiembre de 2023.PUSH/POP DS2/DS3
se enumeran en las definiciones de macros en la página 378. Archivado el 11 de diciembre de 2022.0F 3F
y 8D 84 00 imm32
AIS (sin mnemotécnicos) en la página 60. Archivado desde el original el 10 de abril de 2004.