# AMD 29000

El nombre AMD 29000, a menudo simplemente 29k, hace referencia a una popular familia de microprocesadores y microcontroladores RISC de 32 bits de Advanced Micro Devices. Durante un tiempo fueron los chips RISC más populares del mercado, ampliamente usados en impresoras láser de varios fabricantes. A finales de 1995 AMD cesó las tareas de desarrollo de los 29k al ser transferido el equipo de diseño a la división de PC de la compañía. Los pocos ingenieros que siguieron en la división de sistemas integrados de AMD fueron adscritos al desarrollo de procesadores integrados derivados del 80186. La mayoría de los recursos de AMD fueron concentrados en sus clones de alto rendimiento de la arquitectura x86, sirviéndose de ciertas ideas y partes individuales de las últimas tres versiones de los 29k para fabricar el AMD K5
Los 29000 son fruto de la evolución del mismo diseño Berkeley RISC del que parten el Sun SPARC y el Intel i960. Un "truco" empleado en todos los diseños derivados del Berkeley es el concepto de ventana de registro, una técnica usada para acelerar de forma significativa las llamadas a procedimientos. La idea básica consiste en el uso de un gran conjunto de registros como si de una pila se tratase, cargando datos locales en ese conjunto durante una llamada, y marcándolos como "muertos" cuando el procedimiento finaliza. Los valores de retorno de las subrutinas serían enviados a la "página local", que en el caso del SPARC está compuesta por los 8 primeros registros. Es interesante destacar que los primeros diseños competidores RISC de la Universidad de Stanford tantearon aplicar este concepto, pero decidieron que la mejora de los compiladores haría más eficiente el uso de los registros de propósito general, algo que se ha ido demostrando con el paso del tiempo.
En el diseño original de Berkeley, en el SPARC y en el i960, esas "ventanas" eran de tamaño fijo. En el SPARC, una subrutina con una única variable local utilizaría igualmente los 8 registros, derrochando recursos. Es en este punto donde el 29000 difiere de estos primeros diseños, pues la "ventana" es de tamaño variable para mejorar su uso. En este ejemplo solamente se ocuparían dos registros, uno para la variable local y otro para la dirección de retorno. También se añadieron más registros, incluyendo los mismos 128 registros para la pila de procedimientos, así como otros 64 de acceso global. En comparación el SPARC cuenta en total con 128 registros, y el conjunto global tiene una ventana estándar de 8. Estos cambios, combinados con un compilador "inteligente a medias", contribuyeron a aprovechar lo mejor de cada concepto en cuanto a rendimiento: alto rendimiento para las llamadas a procedimientos, pero manteniendo disponibles gran parte de los registros globales para trabajos de propósito general. Los 29000 también "extendían" la pila de la ventana de registro con una pila interna de memoria (y en teoría, interna en caché). Cuando la ventana estuviera llena las llamadas serían eliminadas de la pila e insertadas en memoria, siendo restauradas a medida que las subrutinas finalizasen. En general, el uso de los registros en el 29000 era considerablemente más avanzado que en los diseños competidores basados en el concepto Berkeley.
Otra diferencia, esta no tan extraña, residía en que los 29000 no incluían registros para código de condiciones de propósito especial. Cualquier registro podía ser utilizado, permitiendo a las condiciones ser salvadas más fácilmente, aunque complicando un poco más el código para ello. Un búfer de precaptura de instrucciones era usado de forma que podía almacenar hasta 16 instrucciones, mejorando el rendimiento en las bifurcaciones; los 29000 no incluían ningún tipo de sistema de predicción de salto así que se producía cierto retardo. El búfer resolvía el problema almacenado cuatro instrucciones del "otro lado" del salto, las cuales podían ser ejecutadas instantáneamente a la vez que el búfer se rellenaba con nuevas instrucciones recogidas de memoria.
El primer 29000 fue presentado en 1988 e incluía una MMU integrada, aunque el soporte de operaciones de punto flotante era suministrado por la FPU independiente 29027. La familia fue mejorada con las versiones 29030 y 29035, que incluían respectivamente una memoria caché de instrucciones de 8 y 4k. En otra actualización se integró la FPU y se añadieron 4k de caché de datos para dar lugar a la versión 29040. La versión final de propósito general fue la 29050, un diseño superescalar capaz de gestionar 4 instrucciones por ciclo, además de soportar ejecución especulativa y fuera de orden y contar con una FPU mucho más rápida.
Varias partes del diseño del 29050 fueron la base de la serie K5 de procesadores x86-compatibles. La FPU no sufrió modificaciones, mientras que el resto del diseño del núcleo fue utilizado con un complejo microcódigo para traducir al instante las instrucciones x86 a formato 29k.
Al abandonar AMD esta arquitectura, Honeywell adquirió una licencia con el objetivo de continuar su soporte en aviónica y desarrolló el HI-29KII (comúnmente conocido simplemente como 29KII), un derivado del 29050.