diff options
author | Daniel Colson <[email protected]> | 2022-11-30 20:28:14 -0500 |
---|---|---|
committer | John Hawthorn <[email protected]> | 2022-12-06 12:37:23 -0800 |
commit | c43951e60eed0b01f464cd25441b81751d2d5087 (patch) | |
tree | bcf5a060db738653287650970c0034b0d3473a6e /yjit/src | |
parent | 9d4483f24deaf360dafe745a71211ec73dc7029a (diff) |
Move BOP macros to separate file
This commit moves ruby_basic_operators and the unredefined macros out of
vm_core.h and into basic_operators.h so that we can use them more
broadly in places where we currently use a method look up via
`rb_method_basic_definition_p` (e.g. object.c, numeric.c, complex.c,
enum.c, but also in internal/compar.h after introducing BOP_CMP and
elsewhere if we introduce more BOPs)
The most controversial part of this change is probably moving
redefined_flag out of rb_vm_t. [vm_opt_method_def_table and
vm_opt_mid_table](https://github.com/ruby/ruby/blob/9da2a5204f32a4f2ce135fddde2abb6e07d647e9/vm.c)
are not part of rb_vm_t either, and I think this fits well with those.
But more significantly it seems to result in one fewer instruction. For
example:
Before:
```
(lldb) disassemble -n vm_opt_str_freeze
miniruby`vm_exec_core:
miniruby[0x10028233e] <+14558>: movq 0x11a86b(%rip), %rax ; ruby_current_vm_ptr
miniruby[0x100282345] <+14565>: testb $0x4, 0x242c(%rax)
```
After:
```
(lldb) disassemble -n vm_opt_str_freeze
ruby`vm_exec_core:
ruby[0x100280ebe] <+14510>: testb $0x4, 0x120147(%rip) ; ruby_vm_redefined_flag + 43
```
Co-authored-by: John Hawthorn <[email protected]>
Diffstat (limited to 'yjit/src')
-rw-r--r-- | yjit/src/cruby_bindings.inc.rs | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index ec41de6eb5..0afa82607c 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -691,6 +691,37 @@ extern "C" { elts: *const VALUE, ) -> VALUE; } +pub const BOP_PLUS: ruby_basic_operators = 0; +pub const BOP_MINUS: ruby_basic_operators = 1; +pub const BOP_MULT: ruby_basic_operators = 2; +pub const BOP_DIV: ruby_basic_operators = 3; +pub const BOP_MOD: ruby_basic_operators = 4; +pub const BOP_EQ: ruby_basic_operators = 5; +pub const BOP_EQQ: ruby_basic_operators = 6; +pub const BOP_LT: ruby_basic_operators = 7; +pub const BOP_LE: ruby_basic_operators = 8; +pub const BOP_LTLT: ruby_basic_operators = 9; +pub const BOP_AREF: ruby_basic_operators = 10; +pub const BOP_ASET: ruby_basic_operators = 11; +pub const BOP_LENGTH: ruby_basic_operators = 12; +pub const BOP_SIZE: ruby_basic_operators = 13; +pub const BOP_EMPTY_P: ruby_basic_operators = 14; +pub const BOP_NIL_P: ruby_basic_operators = 15; +pub const BOP_SUCC: ruby_basic_operators = 16; +pub const BOP_GT: ruby_basic_operators = 17; +pub const BOP_GE: ruby_basic_operators = 18; +pub const BOP_NOT: ruby_basic_operators = 19; +pub const BOP_NEQ: ruby_basic_operators = 20; +pub const BOP_MATCH: ruby_basic_operators = 21; +pub const BOP_FREEZE: ruby_basic_operators = 22; +pub const BOP_UMINUS: ruby_basic_operators = 23; +pub const BOP_MAX: ruby_basic_operators = 24; +pub const BOP_MIN: ruby_basic_operators = 25; +pub const BOP_CALL: ruby_basic_operators = 26; +pub const BOP_AND: ruby_basic_operators = 27; +pub const BOP_OR: ruby_basic_operators = 28; +pub const BOP_LAST_: ruby_basic_operators = 29; +pub type ruby_basic_operators = u32; pub type rb_serial_t = ::std::os::raw::c_ulonglong; extern "C" { pub fn rb_class_allocate_instance(klass: VALUE) -> VALUE; @@ -837,37 +868,6 @@ pub struct rb_iseq_constant_body__bindgen_ty_1_rb_iseq_param_keyword { pub table: *const ID, pub default_values: *mut VALUE, } -pub const BOP_PLUS: ruby_basic_operators = 0; -pub const BOP_MINUS: ruby_basic_operators = 1; -pub const BOP_MULT: ruby_basic_operators = 2; -pub const BOP_DIV: ruby_basic_operators = 3; -pub const BOP_MOD: ruby_basic_operators = 4; -pub const BOP_EQ: ruby_basic_operators = 5; -pub const BOP_EQQ: ruby_basic_operators = 6; -pub const BOP_LT: ruby_basic_operators = 7; -pub const BOP_LE: ruby_basic_operators = 8; -pub const BOP_LTLT: ruby_basic_operators = 9; -pub const BOP_AREF: ruby_basic_operators = 10; -pub const BOP_ASET: ruby_basic_operators = 11; -pub const BOP_LENGTH: ruby_basic_operators = 12; -pub const BOP_SIZE: ruby_basic_operators = 13; -pub const BOP_EMPTY_P: ruby_basic_operators = 14; -pub const BOP_NIL_P: ruby_basic_operators = 15; -pub const BOP_SUCC: ruby_basic_operators = 16; -pub const BOP_GT: ruby_basic_operators = 17; -pub const BOP_GE: ruby_basic_operators = 18; -pub const BOP_NOT: ruby_basic_operators = 19; -pub const BOP_NEQ: ruby_basic_operators = 20; -pub const BOP_MATCH: ruby_basic_operators = 21; -pub const BOP_FREEZE: ruby_basic_operators = 22; -pub const BOP_UMINUS: ruby_basic_operators = 23; -pub const BOP_MAX: ruby_basic_operators = 24; -pub const BOP_MIN: ruby_basic_operators = 25; -pub const BOP_CALL: ruby_basic_operators = 26; -pub const BOP_AND: ruby_basic_operators = 27; -pub const BOP_OR: ruby_basic_operators = 28; -pub const BOP_LAST_: ruby_basic_operators = 29; -pub type ruby_basic_operators = u32; #[repr(C)] pub struct rb_captured_block { pub self_: VALUE, |