GNU Lightning es una biblioteca de software libre para generar código en lenguaje ensamblador en tiempo de ejecución. La versión 2.1.3, publicada en septiembre de 2019, es compatible con backends para SPARC (32 bits), x86 (32 y 64 bits), MIPS , ARM (32 y 64 bits), ia64 , HPPA , PowerPC (32 bits), Alpha , S390 y RISC-V (64 bits). [5] [6]
Las características que ofrece GNU Lightning lo hacen útil para la compilación Just-in-Time . En comparación con bibliotecas como LLVM o libJIT , GNU Lightning ofrece solo una interfaz de bajo nivel para ensamblar desde un lenguaje ensamblador RISC estandarizado (basado libremente en las arquitecturas SPARC y MIPS [7] ) al lenguaje de máquina de la arquitectura de destino.
No proporciona asignación de registros , análisis de flujo de datos o flujo de control , ni optimización . [ cita requerida ] A partir de la versión 2.x, genera código a través de un gráfico intermedio, en lugar de uno por uno a partir de cada una de sus instrucciones estandarizadas. Este cambio permite la optimización entre instrucciones, como la asignación de registros y la eliminación de código muerto [1].
El conjunto de instrucciones de GNU Lightning se basa vagamente en las arquitecturas RISC existentes .
Cuando sea necesario, las instrucciones manejan datos con estos 9 tipos:
GNU Smalltalk , [8] GNU Guile , [9] y CLISP [10] hacen uso de GNU Lightning para la compilación en tiempo real . GNU Lightning se desarrolló inicialmente como una herramienta para ser utilizada en el traductor dinámico de GNU Smalltalk de códigos de bytes a código nativo. [11] GNU Guile 2.9.2 y posteriores dejaron de usar GNU Lightning 2.x en lugar de su propia bifurcación basada en GNU Lightning 1.4 para la generación de código nativo, porque GNU Lightning 2.x dedica más complejidad a la optimización entre instrucciones. [12]