summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2022-12-05 16:20:11 -0500
committerGitHub <noreply@github.com>2022-12-05 13:20:11 -0800
commite7642d8095d7f597c322ed26797d649aec7edbd9 (patch)
treeec02470ee543d64ac730c49e14dcb6f94c73cd46 /yjit
parent1602d75c34c39f6d2f5a505a6532c3664288ef06 (diff)
YJIT: Extract SHAPE_ID_NUM_BITS into a constant (#6863)
Notes
Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
Diffstat (limited to 'yjit')
-rw-r--r--yjit/bindgen/src/main.rs2
-rw-r--r--yjit/src/codegen.rs9
-rw-r--r--yjit/src/cruby_bindings.inc.rs4
3 files changed, 5 insertions, 10 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs
index e0d9de000a..99974d65cd 100644
--- a/yjit/bindgen/src/main.rs
+++ b/yjit/bindgen/src/main.rs
@@ -85,12 +85,12 @@ fn main() {
// From shape.h
.allowlist_function("rb_shape_get_shape_id")
.allowlist_function("rb_shape_get_shape_by_id")
- .allowlist_function("rb_shape_id_num_bits")
.allowlist_function("rb_shape_id_offset")
.allowlist_function("rb_shape_get_iv_index")
.allowlist_function("rb_shape_get_next")
.allowlist_function("rb_shape_id")
.allowlist_function("rb_shape_transition_shape_capa")
+ .allowlist_var("SHAPE_ID_NUM_BITS")
// From ruby/internal/intern/object.h
.allowlist_function("rb_obj_is_kind_of")
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index f904c7e0e1..97768eb5fe 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -2045,9 +2045,8 @@ fn gen_get_ivar(
let embed_test_result = unsafe { FL_TEST_RAW(comptime_receiver, VALUE(ROBJECT_EMBED.as_usize())) != VALUE(0) };
let expected_shape = unsafe { rb_shape_get_shape_id(comptime_receiver) };
- let shape_bit_size = unsafe { rb_shape_id_num_bits() }; // either 16 or 32 depending on RUBY_DEBUG
let shape_id_offset = unsafe { rb_shape_id_offset() };
- let shape_opnd = Opnd::mem(shape_bit_size, recv, shape_id_offset);
+ let shape_opnd = Opnd::mem(SHAPE_ID_NUM_BITS as u8, recv, shape_id_offset);
asm.comment("guard shape");
asm.cmp(shape_opnd, Opnd::UImm(expected_shape as u64));
@@ -2269,9 +2268,8 @@ fn gen_setinstancevariable(
}
let expected_shape = unsafe { rb_shape_get_shape_id(comptime_receiver) };
- let shape_bit_size = unsafe { rb_shape_id_num_bits() }; // either 16 or 32 depending on RUBY_DEBUG
let shape_id_offset = unsafe { rb_shape_id_offset() };
- let shape_opnd = Opnd::mem(shape_bit_size, recv, shape_id_offset);
+ let shape_opnd = Opnd::mem(SHAPE_ID_NUM_BITS as u8, recv, shape_id_offset);
asm.comment("guard shape");
asm.cmp(shape_opnd, Opnd::UImm(expected_shape as u64));
@@ -2334,9 +2332,8 @@ fn gen_setinstancevariable(
asm.comment("write shape");
- let shape_bit_size = unsafe { rb_shape_id_num_bits() }; // either 16 or 32 depending on RUBY_DEBUG
let shape_id_offset = unsafe { rb_shape_id_offset() };
- let shape_opnd = Opnd::mem(shape_bit_size, recv, shape_id_offset);
+ let shape_opnd = Opnd::mem(SHAPE_ID_NUM_BITS as u8, recv, shape_id_offset);
// Store the new shape
asm.store(shape_opnd, Opnd::UImm(new_shape_id as u64));
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs
index 28a1952878..ec41de6eb5 100644
--- a/yjit/src/cruby_bindings.inc.rs
+++ b/yjit/src/cruby_bindings.inc.rs
@@ -123,6 +123,7 @@ impl<T> ::std::cmp::PartialEq for __BindgenUnionField<T> {
}
}
impl<T> ::std::cmp::Eq for __BindgenUnionField<T> {}
+pub const SHAPE_ID_NUM_BITS: u32 = 32;
pub const INTEGER_REDEFINED_OP_FLAG: u32 = 1;
pub const FLOAT_REDEFINED_OP_FLAG: u32 = 2;
pub const STRING_REDEFINED_OP_FLAG: u32 = 4;
@@ -444,9 +445,6 @@ pub struct rb_shape {
}
pub type rb_shape_t = rb_shape;
extern "C" {
- pub fn rb_shape_id_num_bits() -> u8;
-}
-extern "C" {
pub fn rb_shape_id_offset() -> i32;
}
extern "C" {