summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-08-14 07:18:19 -0700
committerGitHub <noreply@github.com>2023-08-14 10:18:19 -0400
commit75c9487a98ebb27d38387a0c900ff5b1f34c30d2 (patch)
tree4cadf25f5ae7dc40c246437465fd588f1d4c0cb2 /yjit
parent2a3acbc420cc94af07a16d45310554f616dc457a (diff)
YJIT: Chain guard classes on instance_of (#8209)
Notes
Notes: Merged-By: maximecb <maximecb@ruby-lang.org>
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/codegen.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index d34a180837..11d70a3e6b 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -4264,7 +4264,7 @@ fn jit_rb_kernel_is_a(
fn jit_rb_kernel_instance_of(
jit: &mut JITState,
asm: &mut Assembler,
- _ocb: &mut OutlinedCb,
+ ocb: &mut OutlinedCb,
_ci: *const rb_callinfo,
_cme: *const rb_callable_method_entry_t,
_block: Option<BlockHandler>,
@@ -4305,7 +4305,14 @@ fn jit_rb_kernel_instance_of(
asm.comment("Kernel#instance_of?");
asm.cmp(asm.stack_opnd(0), sample_rhs.into());
- asm.jne(Target::side_exit(Counter::guard_send_instance_of_class_mismatch));
+ jit_chain_guard(
+ JCC_JNE,
+ jit,
+ asm,
+ ocb,
+ SEND_MAX_CHAIN_DEPTH,
+ Counter::guard_send_instance_of_class_mismatch,
+ );
asm.stack_pop(2);