En informática , y específicamente en el diseño de compiladores y ensambladores , un grupo de literales es una tabla de búsqueda utilizada para almacenar literales durante el ensamblaje y la ejecución .
Los grupos de literales múltiples (locales) se utilizan normalmente solo para arquitecturas informáticas que carecen de instrucciones de bifurcación para saltos largos o que tienen un conjunto de instrucciones optimizadas para saltos más cortos. Entre los ejemplos de dichas arquitecturas se incluyen IBM System/360 y sus sucesores, que tenían una serie de instrucciones que tomaban desplazamientos de dirección de 12 bits. En este caso, el compilador crearía una tabla de literales en cada página de 4K; cualquier bifurcación cuyo destino estuviera a menos de 4K bytes de distancia podría tomarse inmediatamente; las bifurcaciones más largas requerían una búsqueda de dirección a través de la tabla de literales. Las entradas en el grupo de literales se colocan en la tabla de reubicación de objetos durante el ensamblaje y luego se resuelven en el momento de la edición del enlace .
La arquitectura ARM también hace uso de múltiples grupos locales, [1] al igual que AArch64 , la extensión de 64 bits del ARM original. [2]
Otra arquitectura que utiliza múltiples grupos locales es C-SKY, una arquitectura de 32 bits diseñada para SoC integrados . [3] [4]
En ciertos aspectos, un grupo literal se parece a una tabla de contenido (TOC) o a una tabla de desplazamiento global (GOT), excepto que la implementación es considerablemente más simple y puede haber varias tablas literales por objeto.
Quizás el tipo más común de grupo literal son los grupos literales utilizados por la LDR Rd,=const
pseudoinstrucción en lenguaje ensamblador ARM [5] [6]
e instrucciones similares en lenguaje ensamblador IBM System/360 [7] ,
que se compilan en un LOAD con un modo de direccionamiento relativo a PC y la constante se almacena en el grupo literal.
En la arquitectura IBM S/390 y zSeries , el ensamblador GNU, "as" (que se invoca durante el proceso de construcción gcc ) utilizará el registro de propósito general R13 para almacenar un puntero al grupo literal. [8] [9]
A menudo, un valor constante particular se utiliza varias veces en un programa. Muchos enlazadores, de forma predeterminada, almacenan cada constante única una vez, en un único conjunto de literales combinados; eso mejora el tamaño del código. [10]
La máquina virtual Java tiene un "grupo de literales de cadena" y un " grupo de constantes de clase ". [11]