Articulo de referencia

x87

x87 es un subconjunto de la arquitectura x86 relacionado con el punto flotante . Se originó como una extensión del conjunto de instrucciones del 8086 en forma de coprocesadores ...

x87 es un subconjunto de la arquitectura x86 relacionado con el punto flotante . Se originó como una extensión del conjunto de instrucciones del 8086 en forma de coprocesadores de punto flotante ( FPU ) opcionales que funcionan en conjunto con las CPU x86 correspondientes. Estos microchips tienen nombres que terminan en "87". Esto también se conoce como NPX (extensión de procesador numérico). Al igual que otras extensiones del conjunto de instrucciones básico, las instrucciones x87 no son estrictamente necesarias para construir programas funcionales, pero proporcionan implementaciones de hardware y microcódigo de tareas numéricas comunes, lo que permite que estas tareas se realicen mucho más rápido que las rutinas de código máquina correspondientes . El conjunto de instrucciones x87 incluye instrucciones para operaciones básicas de punto flotante como suma, resta y comparación, pero también para operaciones numéricas más complejas, como el cálculo de la función tangente y su inversa, por ejemplo.

La mayoría de los procesadores x86 desde el Intel 80486 han implementado estas instrucciones x87 en la CPU principal, pero el término todavía se usa a veces para referirse a esa parte del conjunto de instrucciones. Antes de que las instrucciones x87 fueran estándar en las PC, los compiladores o programadores tenían que usar llamadas a bibliotecas bastante lentas para realizar operaciones de punto flotante, un método que todavía es común en sistemas embebidos (de bajo costo) .

Descripción

Los registros x87 forman una estructura de pila no estricta de ocho niveles de profundidad, que va desde ST(0) hasta ST(7). Estos registros pueden ser accedidos directamente por cualquiera de los operandos, utilizando un desplazamiento relativo a la parte superior, además de poder ser insertados y extraídos. (Este esquema puede compararse con la forma en que un marco de pila puede ser insertado, extraído e indexado).

Hay instrucciones para insertar, calcular y extraer valores en la parte superior de esta pila; las operaciones unarias (FSQRT, FPTAN, etc.) acceden implícitamente al ST(0) superior, mientras que las operaciones binarias (FADD, FMUL, FCOM, etc.) acceden implícitamente a ST(0) y ST(1). El modelo de pila no estricto también permite que las operaciones binarias utilicen ST(0) junto con un operando de memoria directa o con un registro de pila especificado explícitamente , ST( x ), en una función similar a la de un acumulador tradicional (un destino y un operando izquierdo combinados). Esto también se puede invertir en cada instrucción, con ST(0) como operando sin modificar y ST( x ) como destino . Además, el contenido de ST(0) se puede intercambiar con otro registro de pila mediante una instrucción llamada FXCH ST( x ).

Estas propiedades hacen que la pila x87 se pueda usar como siete registros libremente direccionables más un acumulador dedicado (o como siete acumuladores independientes). Esto es especialmente aplicable en procesadores x86 superescalares (como el Pentium de 1993 y posteriores), donde estas instrucciones de intercambio (códigos D9C8..D9CF h ) se optimizan hasta una penalización de reloj cero al usar una de las rutas enteras para FXCH ST( x ) en paralelo con la instrucción FPU. A pesar de ser natural y conveniente para los programadores humanos de lenguaje ensamblador , algunos desarrolladores de compiladores han encontrado complicado construir generadores de código automáticos que programen el código x87 de manera efectiva. Dicha interfaz basada en pila puede minimizar la necesidad de guardar variables temporales en las llamadas a funciones en comparación con una interfaz basada en registros [ 1 ] (aunque, históricamente, los problemas de diseño en la implementación del 8087 limitaron ese potencial. [ 2 ] [ 3 ] )

El x87 proporciona aritmética de punto flotante binario de precisión simple, doble precisión y precisión doble extendida de 80 bits según el estándar IEEE 754-1985 . Por defecto, todos los procesadores x87 utilizan internamente precisión doble extendida de 80 bits (para permitir una precisión sostenida en muchos cálculos, consulte la justificación del diseño IEEE 754 ). Por lo tanto, una secuencia dada de operaciones aritméticas puede comportarse de manera ligeramente diferente en comparación con una FPU IEEE 754 de precisión simple o doble estricta. [ 4 ] Como esto a veces puede ser problemático para algunos cálculos seminuméricos escritos para asumir precisión doble para una operación correcta, para evitar tales problemas, el x87 se puede configurar utilizando un registro de configuración/estado especial para redondear automáticamente a precisión simple o doble después de las operaciones aritméticas básicas, es decir suma, resta, multiplicación y división, más raíz cuadrada; [ 5 ] El logaritmo, la exponenciación, la trigonometría, etc., siempre producen una precisión doblemente extendida (80 bits). Desde la introducción de SSE2 , las instrucciones x87 no son tan esenciales como antes, pero siguen siendo importantes como una unidad escalar de alta precisión para cálculos numéricos sensibles al error de redondeo y que requieren la precisión de mantisa de 64 bits y el rango extendido disponible en el formato de 80 bits.

Actuación

Recuentos de ciclos de reloj para ejemplos de instrucciones FPU típicas de x87 (solo se muestran aquí las versiones de registro a registro). [ 6 ]

La notación A ... B (de mínimo a máximo) abarca las variaciones de temporización que dependen del estado transitorio de la tubería y de la precisión aritmética elegida (32, 64 u 80 bits); también incluye variaciones debidas a casos numéricos (como el número de bits activados, cero, etc.). La notación L → H representa los valores correspondientes a las frecuencias de reloj máximas más bajas (L) y más altas (H) disponibles.

* A menudo es posible lograr un retardo de reloj prácticamente nulo mediante la ejecución superescalar.
§ El  8087 de 5 MHz fue el procesador x87 original. En comparación con las rutinas típicas de punto flotante implementadas por software en un 8086 (sin un 8087), los factores serían aún mayores, tal vez por otro factor de 10 (es decir, una suma de punto flotante correcta en lenguaje ensamblador bien podría consumir más de 1000 ciclos).

fabricantes

Las empresas que han diseñado o fabricado unidades de punto flotante compatibles con los modelos Intel 8087 o posteriores incluyen AMD ( 287 , 387 , 486DX , 5x86 , K5 , K6 , K7 , K8 ), Chips and Technologies (los coprocesadores Super MATH ), Cyrix ( FasMath , Cx87SLC , Cx87DLC , etc., 6x86 , Cyrix MII ), Fujitsu (primeros Pentium Mobile , etc.), Harris Semiconductor (fabricante de procesadores 80387 y 486DX ), IBM (varios diseños 387 y 486 ), IDT ( WinChip , C3 , C7 , Nano , etc.), IIT ( 2C87 , 3C87 , etc.), LC Technology (los coprocesadores Green MATH ), National Semiconductor ( Geode GX1 , Geode GXm , etc.), NexGen (el Nx587 ), Rise Technology (el mP6 ), ST Microelectronics (fabricante de 486DX , 5x86 , etc.), Texas Instruments (fabricante de procesadores 486DX , etc.), Transmeta (el TM5600 y TM5800 ), ULSI (los coprocesadores Math·Co ), VIA (el C3 , C7 y Nano , etc.), Weitek (el 1067 , 1167 , 3167 y 4167 ) y Xtend (el 83S87SX-25 y otros coprocesadores).

generaciones arquitectónicas

8087

El 8087 fue el primer coprocesador matemático para procesadores de 16 bits diseñado por Intel . Se lanzó en 1980 para usarse junto con los microprocesadores Intel 8088 o 8086. (Los procesadores de punto flotante 8231 y 8232 de Intel , comercializados para su uso con la CPU i8080, eran en realidad versiones con licencia de las unidades de punto flotante Am9511 y Am9512 de AMD de 1977 y 1979. [ 7 ] )

80C187

Versión de 16 MHz del Intel 80C187

Aunque la hoja de datos original de 1982 para los 80188 y 80186 ( basados ​​en NMOS ) parece mencionar coprocesadores matemáticos específicos, [ 8 ] ambos chips en realidad estaban emparejados con un 8087.

Sin embargo, en 1987, para trabajar con la CPU Intel 80C186 basada en CMOS actualizada , Intel introdujo el coprocesador matemático 80C187 [ 9 ] . La interfaz del 80C187 con el procesador principal es la misma que la del 8087, pero su núcleo es esencialmente el de un 80387SX y, por lo tanto, cumple totalmente con el estándar IEEE 754 y es capaz de ejecutar todas las instrucciones adicionales del 80387. [ 10 ]

80287

El 80287 ( i287 ), lanzado en 1982, es el coprocesador matemático para la serie de microprocesadores Intel 80286. Los modelos de Intel incluían variantes con límites de frecuencia superiores especificados que iban desde 6 hasta 12 MHz. La versión NMOS estaba disponible a 6, 8 y 10 MHz. [ 11 ] La versión disponible del coprocesador numérico Intel 80287-10 de 10 MHz tenía un precio de 250 dólares estadounidenses en cantidades de 100. [ 12 ] Estas versiones en caja del 80287, 80287-8 y 80287-10 estaban disponibles por 212, 326 y 374 dólares, respectivamente. Había una versión en caja del 80C287A disponible por 457 dólares. [ 13 ]  

Otros modelos 287 con un rendimiento similar al del 387 son el Intel 80C287, fabricado con CHMOS III, y el AMD 80EC287, fabricado con el proceso CMOS de AMD , que utiliza únicamente puertas totalmente estáticas.

Más tarde le siguió el i80287XL con microarquitectura 387SX con una configuración de pines de 287, [ 14 ] el i80287XLT, una versión especial destinada a portátiles, así como otras variantes. Contiene un multiplicador interno de 3/2, de modo que las placas base que ejecutaban el coprocesador a 2/3 de la velocidad de la CPU podían, en cambio, ejecutar la FPU a la misma velocidad que la CPU. Tanto el 80287XL como el 80287XLT ofrecían un rendimiento un 50 % superior, un consumo de energía un 83 % menor e instrucciones adicionales. [ 15 ]

El 80287 funciona con el microprocesador 80386 y, en un principio, fue el único coprocesador disponible para este último hasta la introducción del 80387 en 1987. El 80387 es el preferido por su mayor rendimiento y su conjunto de instrucciones más completo.

80387

Imagen del chip de la CPU Intel 80387

El 80387 ( 387 o i387 ) es el primer coprocesador de Intel que cumple totalmente con el estándar IEEE 754-1985 . Lanzado en 1987, [ 16 ] dos años después del chip 386, el i387 incluye una velocidad mucho mayor que los coprocesadores 8087/80287 anteriores de Intel y características mejoradas de sus funciones trigonométricas. Se puso a la venta por 500 USD en cantidades de 100. [ 17 ] Poco después, se puso a la venta a través de Intel Personal Computer Enhancement Operation a un precio de mercado minorista de 795 USD. [ 18 ] La versión de 25 MHz estaba disponible en el canal minorista por 1395 USD. [ 19 ] El coprocesador matemático Intel M387 cumplía con el estándar MIL-STD-883 Rev. C. Este dispositivo fue probado, lo que incluye ciclos de temperatura entre -55 y 125 °C, sellado hermético y rodaje extendido. Esta versión militar opera a 16 MHz. Esta versión militar estaba disponible en PGA de 68 pines y quad flatpack. Esta versión militar estaba disponible por USD $1155 en cantidades de 100 unidades para la versión PGA. [ 20 ] La versión de 33 MHz del 387DX estaba disponible y tiene un rendimiento de 3,4 megawhietstones por segundo . [ 21 ] Las siguientes versiones en caja del coprocesador matemático 387DX de 16, 20, 25 y 33 MHz estaban disponibles por USD $570, $647, $814 y $994 respectivamente. [ 22 ] Las instrucciones FPTAN y FPATAN de los 8087 y 80287 están limitadas a un argumento en el rango ±π/4 (±45°), y los 8087 y 80287 no tienen instrucciones directas para las funciones SIN y COS. [ 23 ]

Sin un coprocesador, el 386 normalmente realiza cálculos aritméticos de punto flotante mediante rutinas de software (relativamente lentas), implementadas en tiempo de ejecución a través de un manejador de excepciones de software . Cuando se combina un coprocesador matemático con el 386, el coprocesador realiza los cálculos aritméticos de punto flotante en hardware, devolviendo resultados mucho más rápido que una llamada a una biblioteca de software (emuladora).

El i387 solo es compatible con el chip i386 estándar, que tiene un bus de procesador de 32 bits. El i386SX posterior, de menor costo y con un bus de datos más estrecho de 16 bits , no puede interactuar con el bus de 32 bits del i387. El i386SX requiere su propio coprocesador, el 80387SX , que es compatible con el bus de datos más estrecho de 16 bits del SX. El coprocesador 387SX también se ofreció en una versión de bajo consumo. [ 21 ]

Además, para complementar el i386SL utilizado en portátiles, Intel lanzó el i387SL (N80387SL). [ 24 ] Comercializado como "Coprocesador matemático móvil Intel387 SL", incluía funciones de administración de energía que le permitían funcionar sin reducir significativamente la duración de la batería. Hay dos funciones de ahorro de energía. La primera detiene el reloj del coprocesador cuando la CPU entra en modo de "reloj detenido"; el 387SL consume aproximadamente 25 microamperios cuando su reloj está detenido. La segunda funciona automáticamente cuando la CPU está en funcionamiento, poniendo al 387SL en "modo inactivo" cuando no está ejecutando una instrucción. Cuando está activo, el 387SL normalmente consume un 30 por ciento menos de energía de la batería (aproximadamente 100 mA) que el 387SX. En modo inactivo, consume 4 mA, una reducción de energía del 96 por ciento en comparación con el modo activo. Funciona en el rango de 16 a 25 MHz y no requiere reconfiguración de BIOS ni de hardware. [ 25 ] Inicialmente estaba disponible por USD $189. [ 26 ]

80487

i487SX

Presentado en 1991, el i487SX (P23N) se comercializó como un coprocesador de unidad de punto flotante para máquinas Intel i486SX . En realidad, contenía una implementación completa del i486DX . Al instalarse en un sistema i486SX, el i487 desactivaba la CPU principal y asumía todas las operaciones de la CPU. El manual del i487 afirma que la unidad no funcionaría sin un i486SX instalado, pero pruebas independientes (y la posterior admisión de Intel) han demostrado lo contrario. [ 27 ] [ 28 ] [ 29 ]

El i487 utilizaba un zócalo especial de 169 pines con un pin desconectado (de bloqueo físico) para evitar su inserción en el zócalo estándar de 168 pines del 486. Al menos dos fuentes afirman que el zócalo es el mismo que el Socket 1 , el zócalo de actualización para el i486 OverDrive , un procesador de reemplazo de características similares. [ 30 ] [ 29 ]

El conjunto de instrucciones de la FPU de los i486DX/i487SX no difería del del 387, pero la integración proporcionó una ventaja en la utilización del bus. Los algoritmos integrados en el chip también se mejoraron.

El RapidCAD , un paquete de actualización de 386 a 486 comercializado para su uso en diseño asistido por ordenador , también incluye una FPU ficticia (RapidCAD-2) que se instala en el zócalo 80387 por motivos de compatibilidad, ya que el procesador principal (RapidCAD-1, un 486DX) incluye una FPU integrada de forma predeterminada.

Nx587

La unidad de punto flotante (FPU) Nx587 de NexGen para el procesador Nx586 , lanzada en 1995, fue el último coprocesador x87 que se fabricó por separado de la CPU.

Véase también

Notas

  1. Las empresas sin fábrica propia diseñan un chip y dependen de una empresa con fábrica propia para su fabricación, mientras que las empresas con fábrica propia pueden realizar tanto el diseño como la fabricación por sí mismas.

Referencias

  1. William Kahan (2 de noviembre de 1990). "Sobre las ventajas de la pila del 8087" (PDF) . Apuntes de curso inéditos, División de Ciencias de la Computación, Universidad de California en Berkeley . Archivado del original (PDF) el 18 de enero de 2017.
  2. William Kahan (8 de julio de 1989). "Cómo se debería haber manejado el desbordamiento/subdesbordamiento de pila del Intel 8087" (PDF) . Archivado del original (PDF) el 12 de junio de 2013.
  3. Jack Woehr (1 de noviembre de 1997). "Una conversación con William Kahan" .
  4. David Monniaux (mayo de 2008). "Los escollos de la verificación de cálculos de punto flotante" . ACM Transactions on Programming Languages ​​and Systems . 30 (3): 1– 41. arXiv : cs/0701192 . doi : 10.1145/1353445.1353446 . S2CID 218578808 . 
  5. "Programación con la FPU x87". Manual del desarrollador de software de la arquitectura Intel IA-32 (PDF) . Intel. 2001. pág. 8-10 . Consultado el 26 de junio de 2026. Los bits de control de precisión solo afectan los resultados de las siguientes instrucciones de punto flotante: FADD, FADDP, FIADD, FSUB, FSUBP, FISUB, FSUBR, FSUBRP, FISUBR, FMUL, FMULP, FIMUL, FDIV, FDIVP, FIDIV, FDIVR, FDIVRP, FIDIVR y FSQRT. 
  6. Los números se han tomado de las hojas de datos, los manuales de programación y los manuales de optimización de los respectivos procesadores.
  7. "Procesadores aritméticos: antes y ahora" . www.cpushack.com . 23 de septiembre de 2010. Consultado el 3 de mayo de 2023 .
  8. Intel (1983). Manual de microprocesadores y periféricos de Intel . págs. 3-25 (iAPX 186/20) y 3-106 (iAPX 188/20). 
  9. "Colección de CPU – Modelo 80187" . cpu-info.com . Archivado del original el 23 de julio de 2011. Consultado el 14 de abril de 2018 .
  10. "80C187 COPROCESADOR MATEMÁTICO DE 80 BITS" (PDF) . Noviembre de 1992. Consultado el 3 de mayo de 2023 .
  11. Yoshida, Stacy, "Coprocesadores matemáticos: Manteniendo su computadora en óptimas condiciones", Intel Corporation, Microcomputer Solutions, septiembre/octubre de 1990, página 16
  12. Intel Corporation, "Componente destacado de nuevo producto: un microprocesador de 32 bits con un poco de ayuda de algunos amigos", Special 32-Bit Issue Solutions, noviembre/diciembre de 1985, página 13.
  13. Intel Corporation, "Mejora de la computadora personal", Operación de mejora de la computadora personal, Orden n.° 245.2, 10-89/75K/AL/GO, octubre de 1989, página 4
  14. Intel Corporation, "Nuevo producto destacado: Sistemas: Módulo SnapIn 386 para actualizar PCs PS/2", Microcomputer Solutions, septiembre/octubre de 1991, página 12
  15. Yoshida, Stacy, "Coprocesadores matemáticos: Manteniendo su computadora en óptimas condiciones", Intel Corporation, Microcomputer Solutions, septiembre/octubre de 1990, página 16
  16. Moran, Tom (16 de febrero de 1987). "Chips para mejorar el rendimiento de las máquinas 386, dice Intel" . InfoWorld . Vol. 9, n.º 7, pág. 5. ISSN 0199-6649 .    
  17. "Nuevos componentes destacados: El motor de computación de 32 bits a toda velocidad". Soluciones . Intel Corporation: 10 de mayo-junio de 1987.
  18. "Noticia breve: El Intel 80387 ya está disponible a través de canales minoristas". Soluciones . Intel Corporation: 1 de julio-agosto de 1987.
  19. Intel Corporation, "NewsBits: El 80387 de 25 MHz ya está disponible a través de canales minoristas", Microcomputer Solutions, septiembre/octubre de 1988, página 1
  20. Intel Corporation, "Enfoque: Componentes: Periféricos militarizados compatibles con el microprocesador M386", Microcomputer Solutions, marzo/abril de 1989, página 12
  21. 1 2 Lewnes, Ann, "La arquitectura Intel386 llegó para quedarse", Intel Corporation, Microcomputer Solutions, julio/agosto de 1989, página 2
  22. Intel Corporation, "Mejora de la computadora personal", Operación de mejora de la computadora personal, Orden n.° 245.2, 10-89/75K/AL/GO, octubre de 1989
  23. Documentación de Borland Turbo Assembler.
  24. "Intel N80387SL" . www.cpu-world.com . Consultado el 4 de diciembre de 2024 .
  25. "Coprocesador matemático Intel 387 SL" . PC World . Vol. 10, n.º 7. Julio de 1992. pág. 72.   
  26. Intel Corporation, "Nuevo producto destacado: Usuario final: El coprocesador matemático lleva el rendimiento de un ordenador de sobremesa a los portátiles", Microcomputer Solutions, mayo/junio de 1992, páginas 16-17
  27. Intel 487SX en el Diccionario en línea gratuito de informática
  28. "Intel 80487" . www.cpu-world.com . Consultado el 9 de junio de 2021 .
  29. 1 2 "Coprocesador matemático Intel 487SX" . Expresiones moleculares: ciencia, óptica y tú . Universidad Estatal de Florida . Consultado el 11 de enero de 2026 .
  30. "Tipos y especificaciones de microprocesadores" . InformIT . Pearson. 8 de junio de 2001. Archivado del original el 7 de diciembre de 2021.
  • Manual del desarrollador de software para arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) . Intel.
  • Todo lo que siempre quisiste saber sobre los coprocesadores matemáticos.