diff options
author | Max Bernstein <[email protected]> | 2025-06-12 15:17:50 -0700 |
---|---|---|
committer | Max Bernstein <[email protected]> | 2025-06-13 08:54:35 -0700 |
commit | f208e017f200a7912cf172cfbb9849ed0214cf2f (patch) | |
tree | f3a5a1a910a03f4161f6de074580c9603121e56e | |
parent | 97ea756e1cd221732606746b329b929f9c0f9b3f (diff) |
ZJIT: Add codegen for SideExit
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/13602
-rw-r--r-- | zjit/src/codegen.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/zjit/src/codegen.rs b/zjit/src/codegen.rs index 8ced09d40a..dd04e60602 100644 --- a/zjit/src/codegen.rs +++ b/zjit/src/codegen.rs @@ -278,6 +278,7 @@ fn gen_insn(cb: &mut CodeBlock, jit: &mut JITState, asm: &mut Assembler, functio Insn::SetGlobal { id, val, state: _ } => gen_setglobal(asm, *id, opnd!(val)), Insn::GetGlobal { id, state: _ } => gen_getglobal(asm, *id), Insn::SetIvar { self_val, id, val, state: _ } => gen_setivar(asm, opnd!(self_val), *id, opnd!(val)), + Insn::SideExit { state } => return gen_side_exit(jit, asm, &function.frame_state(*state)), _ => { debug!("ZJIT: gen_function: unexpected insn {:?}", insn); return None; @@ -337,6 +338,12 @@ fn gen_setglobal(asm: &mut Assembler, id: ID, val: Opnd) -> Opnd { ) } +/// Side-exit into the interpreter +fn gen_side_exit(jit: &mut JITState, asm: &mut Assembler, state: &FrameState) -> Option<()> { + asm.jmp(side_exit(jit, state)?); + Some(()) +} + /// Compile an interpreter entry block to be inserted into an ISEQ fn gen_entry_prologue(asm: &mut Assembler, iseq: IseqPtr) { asm_comment!(asm, "ZJIT entry point: {}", iseq_get_location(iseq, 0)); |