JIT Engine – Orquestador de Compilación en Tiempo Real
Archivo: src/jit_engine.rs (935 líneas)
¿Por qué existe?
Actúa como orquestador entre la VM Fast y el compilador JIT nativo (jit.rs). Decide qué bloques de bytecode son candidatos a compilación JIT, especializa tipos estáticamente, y gestiona el fallback a la VM interpretada cuando el JIT no puede compilar.
API Pública
Detección de JIT-compilabilidad
| Función | Descripción |
|---|---|
es_jiteable(opcodes) -> bool | Analiza una secuencia de opcodes y determina si es 100% compilable por NativeJIT |
Especialización de tipos
| Función | Descripción |
|---|---|
especializar_bytecode(bytecode) -> Vec<Opcode> | Convierte opcodes genéricos (Add/Sub/Mul/Div) en versiones tipadas (AddInt/AddFloat) según inferencia estática. También detecta patrones como XorSign (sub de cero) y fusiona operaciones |
Pipeline de decisión JIT
- Análisis de jiteabilidad:
es_jiteable()revisa cada opcode del bloque. - Especialización: Si es jiteable, se especializan los tipos de las operaciones aritméticas.
- Compilación: Se invoca
NativeJIT::compile()para generar código máquina. - Ejecución: Se ejecuta el código nativo generado.
- Fallback: Si falla la compilación, se ejecuta el bytecode original en la VM Fast.
Opcodes detectados como NO JITeables
PushExacto,AddExact,SubExact,MulExact,DivExact— BigDecimal no soportadoEnteroAExacto,DecimalAExacto,DeclareExactOp,AddStoreExact- Cualquier opcode no listado explícitamente en
es_jiteable()