summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-08-29 18:05:06 -0700
committerGitHub <noreply@github.com>2022-08-29 21:05:06 -0400
commitddca3482ef53911ce732c91e715d0439d3b47514 (patch)
tree65aaf46c6fb002a9db53aa27f1e3b46307ede672
parent737402e9383332d028c1c2f26a3f1a2cd78fab0d (diff)
Check only symbol flag bits (#6301)
* Check only symbol flag bits * Check all 4 bits
Notes
Notes: Merged-By: maximecb <maximecb@ruby-lang.org>
-rw-r--r--yjit/src/codegen.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index 07e8500f62..744495eb29 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -3454,7 +3454,8 @@ fn jit_guard_known_klass(
asm.comment("guard object is static symbol");
assert!(RUBY_SPECIAL_SHIFT == 8);
- asm.cmp(obj_opnd, Opnd::UImm(RUBY_SYMBOL_FLAG as u64));
+ let flag_bits = asm.and(obj_opnd, Opnd::UImm(0xf));
+ asm.cmp(flag_bits, Opnd::UImm(RUBY_SYMBOL_FLAG as u64));
jit_chain_guard(JCC_JNE, jit, ctx, asm, ocb, max_chain_depth, side_exit);
ctx.upgrade_opnd_type(insn_opnd, Type::ImmSymbol);
}