SBCL implementa máquinas virtuales ultrarrápidas con stack de solo 8 ranuras

Fuentes: SBCL: the ultimate assembly code breadboard
SBCL implementa máquinas virtuales ultrarrápidas con stack de solo 8 ranuras
Imagen generada con IA

Este artículo de Paul Khuong explora una técnica innovadora para implementar máquinas virtuales basadas en stack, utilizando SBCL (Steel Bank Common Lisp) como plataforma de experimentación. La idea central es aprovechar un stack muy pequeño (solo 8 ranuras) para evitar el movimiento de datos durante operaciones push y pop, utilizando en cambio un contador modular que apunta al top of stack (TOS). El autor toma inspiración del coprocesador x87 de Intel y del procesador F18 de Chuck Moore, ambos con stacks pequeños y rotación implícita. La implementación utiliza registros reales (r8-r15) para almacenar las 8 posiciones del stack virtual, y el contador modular simplemente avanza o retrocede entre estos registros. Para el dispatch de instrucciones, el artículo propone una técnica innovadora: generar variantes especializadas de cada primitiva para cada valor posible del contador de stack, separadas por un offset fijo (4288 bytes). Esto permite que el salto indirecto a la siguiente instrucción ya incluya la información del estado del stack, sin necesidad de cálculos adicionales en tiempo de ejecución. El código utiliza el ensamblador interno de SBCL para emitir secuencias de máquina repetitivas, con funciones como emit-code y emit-all-code que gestionan la generación de código y el alineamiento. El artículo también cubre primitivas de control de flujo como saltos relativos y funciones para entrar y salir de la VM. Esta aproximación demuestra cómo las restricciones autoimpuestas (un stack muy pequeño) pueden llevar a optimizaciones elegantes que simplifican el código generado.