b'\n_START_ARTICLE_\nAMD 29000\n_START_PARAGRAPH_\nEl 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\xc3\xa1s populares del mercado, ampliamente usados en impresoras l\xc3\xa1ser de varios fabricantes. A finales de 1995 AMD ces\xc3\xb3 las tareas de desarrollo de los 29k al ser transferido el equipo de dise\xc3\xb1o a la divisi\xc3\xb3n de PC de la compa\xc3\xb1\xc3\xada. Los pocos ingenieros que siguieron en la divisi\xc3\xb3n de sistemas integrados de AMD fueron adscritos al desarrollo de procesadores integrados derivados del 80186. La mayor\xc3\xada de los recursos de AMD fueron concentrados en sus clones de alto rendimiento de la arquitectura x86, sirvi\xc3\xa9ndose de ciertas ideas y partes individuales de las \xc3\xbaltimas tres versiones de los 29k para fabricar el AMD K5 _NEWLINE_Los 29000 son fruto de la evoluci\xc3\xb3n del mismo dise\xc3\xb1o Berkeley RISC del que parten el Sun SPARC y el Intel i960. Un "truco" empleado en todos los dise\xc3\xb1os derivados del Berkeley es el concepto de ventana de registro, una t\xc3\xa9cnica usada para acelerar de forma significativa las llamadas a procedimientos. La idea b\xc3\xa1sica 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\xc3\xa1ndolos como "muertos" cuando el procedimiento finaliza. Los valores de retorno de las subrutinas ser\xc3\xadan enviados a la "p\xc3\xa1gina local", que en el caso del SPARC est\xc3\xa1 compuesta por los 8 primeros registros. Es interesante destacar que los primeros dise\xc3\xb1os competidores RISC de la Universidad de Stanford tantearon aplicar este concepto, pero decidieron que la mejora de los compiladores har\xc3\xada m\xc3\xa1s eficiente el uso de los registros de prop\xc3\xb3sito general, algo que se ha ido demostrando con el paso del tiempo._NEWLINE_En el dise\xc3\xb1o original de Berkeley, en el SPARC y en el i960, esas "ventanas" eran de tama\xc3\xb1o fijo. En el SPARC, una subrutina con una \xc3\xbanica variable local utilizar\xc3\xada igualmente los 8 registros, derrochando recursos. Es en este punto donde el 29000 difiere de estos primeros dise\xc3\xb1os, pues la "ventana" es de tama\xc3\xb1o variable para mejorar su uso. En este ejemplo solamente se ocupar\xc3\xadan dos registros, uno para la variable local y otro para la direcci\xc3\xb3n de retorno. Tambi\xc3\xa9n se a\xc3\xb1adieron m\xc3\xa1s registros, incluyendo los mismos 128 registros para la pila de procedimientos, as\xc3\xad como otros 64 de acceso global. En comparaci\xc3\xb3n el SPARC cuenta en total con 128 registros, y el conjunto global tiene una ventana est\xc3\xa1ndar 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\xc3\xb3sito general. Los 29000 tambi\xc3\xa9n "extend\xc3\xadan" la pila de la ventana de registro con una pila interna de memoria (y en teor\xc3\xada, interna en cach\xc3\xa9). Cuando la ventana estuviera llena las llamadas ser\xc3\xadan 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\xc3\xa1s avanzado que en los dise\xc3\xb1os competidores basados en el concepto Berkeley._NEWLINE_Otra diferencia, esta no tan extra\xc3\xb1a, resid\xc3\xada en que los 29000 no inclu\xc3\xadan registros para c\xc3\xb3digo de condiciones de prop\xc3\xb3sito especial. Cualquier registro pod\xc3\xada ser utilizado, permitiendo a las condiciones ser salvadas m\xc3\xa1s f\xc3\xa1cilmente, aunque complicando un poco m\xc3\xa1s el c\xc3\xb3digo para ello. Un b\xc3\xbafer de precaptura de instrucciones era usado de forma que pod\xc3\xada almacenar hasta 16 instrucciones, mejorando el rendimiento en las bifurcaciones; los 29000 no inclu\xc3\xadan ning\xc3\xban tipo de sistema de predicci\xc3\xb3n de salto as\xc3\xad que se produc\xc3\xada cierto retardo. El b\xc3\xbafer resolv\xc3\xada el problema almacenado cuatro instrucciones del "otro lado" del salto, las cuales pod\xc3\xadan ser ejecutadas instant\xc3\xa1neamente a la vez que el b\xc3\xbafer se rellenaba con nuevas instrucciones recogidas de memoria._NEWLINE_El primer 29000 fue presentado en 1988 e inclu\xc3\xada 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\xc3\xadan respectivamente una memoria cach\xc3\xa9 de instrucciones de 8 y 4k. En otra actualizaci\xc3\xb3n se integr\xc3\xb3 la FPU y se a\xc3\xb1adieron 4k de cach\xc3\xa9 de datos para dar lugar a la versi\xc3\xb3n 29040. La versi\xc3\xb3n final de prop\xc3\xb3sito general fue la 29050, un dise\xc3\xb1o superescalar capaz de gestionar 4 instrucciones por ciclo, adem\xc3\xa1s de soportar ejecuci\xc3\xb3n especulativa y fuera de orden y contar con una FPU mucho m\xc3\xa1s r\xc3\xa1pida._NEWLINE_Varias partes del dise\xc3\xb1o del 29050 fueron la base de la serie K5 de procesadores x86-compatibles. La FPU no sufri\xc3\xb3 modificaciones, mientras que el resto del dise\xc3\xb1o del n\xc3\xbacleo fue utilizado con un complejo microc\xc3\xb3digo para traducir al instante las instrucciones x86 a formato 29k.'