En informática , el lenguaje de transferencia de registros ( RTL ) es un tipo de código objeto, una especie de representación intermedia (IR) muy cercana al lenguaje ensamblador , como el que se utiliza en un compilador . Se utiliza para describir el flujo de datos en el nivel de transferencia de registros de una arquitectura . Los artículos académicos y los libros de texto a menudo utilizan una forma de RTL como lenguaje ensamblador de arquitectura neutral. RTL se usa como el nombre de una representación intermedia específica en varios compiladores, incluida la Colección de compiladores GNU(GCC), Zephyr y los proyectos de compilación europeos CerCo y CompCert .
Historia
La idea detrás de RTL se describió por primera vez en El diseño y aplicación de un optimizador de mirilla reorientable . [1]
GCC
En GCC, RTL se genera a partir de la representación de GIMPLE , se transforma mediante varios pases en el extremo medio de GCC y luego se convierte a lenguaje ensamblador.
El RTL de GCC generalmente se escribe en una forma que se parece a una expresión S de Lisp :
( conjunto ( reg: SI 140 ) ( más: SI ( reg: SI 138 ) ( reg: SI 139 )))
Esta expresión de efecto secundario dice "sume el contenido del registro 138 con el contenido del registro 139 y almacene el resultado en el registro 140". El SI especifica el modo de acceso para cada registro. En el ejemplo es "SImode", es decir, "accede al registro como un entero de 32 bits".
La secuencia de RTL generada depende en cierta medida de las características del procesador para el que GCC está generando código. Sin embargo, el significado de RTL es más o menos independiente del objetivo: normalmente sería posible leer y comprender una parte de RTL sin saber para qué procesador se generó. Del mismo modo, el significado del RTL no suele depender del lenguaje original de alto nivel del programa.
Un lenguaje de transferencia de registros es un sistema para expresar de forma simbólica las secuencias de microoperaciones entre los registros de un módulo digital. Es una herramienta conveniente para describir la organización interna de las computadoras digitales de manera concisa y precisa. También se puede utilizar para facilitar el proceso de diseño de sistemas digitales.