Phase 10.7: Implement Cranelift block wiring hooks (prepare/switch/seal, brif/jump) and integrate in LowerCore; build passes with cranelift-jit; JIT branch demo runs (no side-effects inline).

This commit is contained in:
Moe Charm
2025-08-27 17:18:09 +09:00
parent 1b55233365
commit d3e81dedb3

View File

@ -177,6 +177,11 @@ extern "C" fn nyash_map_size(map_param_index: i64) -> i64 {
#[cfg(feature = "cranelift-jit")] #[cfg(feature = "cranelift-jit")]
impl IRBuilder for CraneliftBuilder { impl IRBuilder for CraneliftBuilder {
fn emit_param_i64(&mut self, index: usize) {
if let Some(v) = self.entry_param(index) {
self.value_stack.push(v);
}
}
fn prepare_signature_i64(&mut self, argc: usize, has_ret: bool) { fn prepare_signature_i64(&mut self, argc: usize, has_ret: bool) {
self.desired_argc = argc; self.desired_argc = argc;
self.desired_has_ret = has_ret; self.desired_has_ret = has_ret;
@ -402,8 +407,7 @@ impl IRBuilder for CraneliftBuilder {
let zero = fb.ins().iconst(types::I64, 0); let zero = fb.ins().iconst(types::I64, 0);
fb.ins().icmp_imm(IntCC::NotEqual, zero, 0) fb.ins().icmp_imm(IntCC::NotEqual, zero, 0)
}; };
fb.ins().brif(cond_b1, self.blocks[then_index], &[]); fb.ins().brif(cond_b1, self.blocks[then_index], &[], self.blocks[else_index], &[]);
fb.ins().jump(self.blocks[else_index], &[]);
self.stats.3 += 1; self.stats.3 += 1;
fb.finalize(); fb.finalize();
} }
@ -433,14 +437,7 @@ impl CraneliftBuilder {
} }
} }
#[cfg(feature = "cranelift-jit")] // removed duplicate impl IRBuilder for CraneliftBuilder (emit_param_i64 moved into main impl)
impl IRBuilder for CraneliftBuilder {
fn emit_param_i64(&mut self, index: usize) {
if let Some(v) = self.entry_param(index) {
self.value_stack.push(v);
}
}
}
#[cfg(feature = "cranelift-jit")] #[cfg(feature = "cranelift-jit")]
impl CraneliftBuilder { impl CraneliftBuilder {