Skip to content

Commit 1ec5c20

Browse files
committed
Skip writing jit_return on exits
1 parent 9692947 commit 1ec5c20

3 files changed

Lines changed: 8 additions & 4 deletions

File tree

vm.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ jit_exec(rb_execution_context_t *ec)
585585
// This is done here (once per JIT entry) instead of in each side exit
586586
// to reduce generated code size.
587587
if (UNDEF_P(result)) {
588+
ec->cfp->jit_return = 0;
588589
zjit_materialize_frames(ec->cfp);
589590
}
590591
return result;

vm_exec.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,10 @@ default: \
189189
rb_jit_func_t func = zjit_compile(ec); \
190190
if (func) { \
191191
val = zjit_entry(ec, ec->cfp, func); \
192-
if (UNDEF_P(val)) zjit_materialize_frames(ec->cfp); \
192+
if (UNDEF_P(val)) { \
193+
ec->cfp->jit_return = 0; \
194+
zjit_materialize_frames(ec->cfp); \
195+
} \
193196
} \
194197
} \
195198
} \

zjit/src/backend/lir.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::rc::Rc;
66
use std::sync::{Arc, Mutex};
77
use crate::bitset::BitSet;
88
use crate::codegen::{local_size_and_idx_to_ep_offset, perf_symbol_range_start, perf_symbol_range_end};
9-
use crate::cruby::{CfpPtr, IseqPtr, Qundef, RUBY_OFFSET_CFP_ISEQ, RUBY_OFFSET_CFP_JIT_RETURN, RUBY_OFFSET_CFP_PC, RUBY_OFFSET_CFP_SP, SIZEOF_VALUE_I32, vm_stack_canary};
9+
use crate::cruby::{IseqPtr, Qundef, RUBY_OFFSET_CFP_ISEQ, RUBY_OFFSET_CFP_PC, RUBY_OFFSET_CFP_SP, SIZEOF_VALUE_I32, vm_stack_canary};
1010
use crate::hir::{Invariant, SideExitReason};
1111
use crate::hir;
1212
use crate::options::{TraceExits, PerfMap, get_option};
@@ -2639,8 +2639,8 @@ impl Assembler
26392639
asm_comment!(asm, "save cfp->iseq");
26402640
asm.store(Opnd::mem(64, CFP, RUBY_OFFSET_CFP_ISEQ), VALUE::from(*iseq).into());
26412641

2642-
asm_comment!(asm, "save cfp->jit_return");
2643-
asm.store(Opnd::mem(64, CFP, RUBY_OFFSET_CFP_JIT_RETURN), 0.into());
2642+
//asm_comment!(asm, "save cfp->jit_return");
2643+
//asm.store(Opnd::mem(64, CFP, RUBY_OFFSET_CFP_JIT_RETURN), 0.into());
26442644
}
26452645

26462646
/// Tear down the JIT frame and return to the interpreter.

0 commit comments

Comments
 (0)