summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorÉtienne Barrié <[email protected]>2024-08-05 12:31:24 +0200
committerJean Boussier <[email protected]>2024-09-05 12:46:02 +0200
commitbf9879791af11a20e50921551220c08d1c7f7f02 (patch)
tree68732e79fac871a629fc815b525f0cc20ed1c8bc /yjit
parenta99707cd9c6a1d53cf8ebc883dc210219bd67a28 (diff)
Optimized instruction for Hash#freeze
If a Hash which is empty or only using literals is frozen, we detect this as a peephole optimization and change the instructions to be `opt_hash_freeze`. [Feature #20684] Co-authored-by: Jean Boussier <[email protected]>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11406
Diffstat (limited to 'yjit')
-rw-r--r--yjit/src/codegen.rs18
-rw-r--r--yjit/src/cruby_bindings.inc.rs316
2 files changed, 177 insertions, 157 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index 08aaa60731..a105ab9791 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -4204,6 +4204,23 @@ fn gen_opt_ary_freeze(
Some(KeepCompiling)
}
+fn gen_opt_hash_freeze(
+ jit: &mut JITState,
+ asm: &mut Assembler,
+) -> Option<CodegenStatus> {
+ if !assume_bop_not_redefined(jit, asm, HASH_REDEFINED_OP_FLAG, BOP_FREEZE) {
+ return None;
+ }
+
+ let str = jit.get_arg(0);
+
+ // Push the return value onto the stack
+ let stack_ret = asm.stack_push(Type::CHash);
+ asm.mov(stack_ret, str.into());
+
+ Some(KeepCompiling)
+}
+
fn gen_opt_str_uminus(
jit: &mut JITState,
asm: &mut Assembler,
@@ -10246,6 +10263,7 @@ fn get_gen_fn(opcode: VALUE) -> Option<InsnGenFn> {
YARVINSN_opt_ge => Some(gen_opt_ge),
YARVINSN_opt_mod => Some(gen_opt_mod),
YARVINSN_opt_ary_freeze => Some(gen_opt_ary_freeze),
+ YARVINSN_opt_hash_freeze => Some(gen_opt_hash_freeze),
YARVINSN_opt_str_freeze => Some(gen_opt_str_freeze),
YARVINSN_opt_str_uminus => Some(gen_opt_str_uminus),
YARVINSN_opt_newarray_send => Some(gen_opt_newarray_send),
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs
index 7492a28f22..03cb053fd3 100644
--- a/yjit/src/cruby_bindings.inc.rs
+++ b/yjit/src/cruby_bindings.inc.rs
@@ -784,163 +784,165 @@ pub const YARVINSN_sendforward: ruby_vminsn_type = 56;
pub const YARVINSN_opt_send_without_block: ruby_vminsn_type = 57;
pub const YARVINSN_objtostring: ruby_vminsn_type = 58;
pub const YARVINSN_opt_ary_freeze: ruby_vminsn_type = 59;
-pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 60;
-pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 61;
-pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 62;
-pub const YARVINSN_opt_newarray_send: ruby_vminsn_type = 63;
-pub const YARVINSN_invokesuper: ruby_vminsn_type = 64;
-pub const YARVINSN_invokesuperforward: ruby_vminsn_type = 65;
-pub const YARVINSN_invokeblock: ruby_vminsn_type = 66;
-pub const YARVINSN_leave: ruby_vminsn_type = 67;
-pub const YARVINSN_throw: ruby_vminsn_type = 68;
-pub const YARVINSN_jump: ruby_vminsn_type = 69;
-pub const YARVINSN_branchif: ruby_vminsn_type = 70;
-pub const YARVINSN_branchunless: ruby_vminsn_type = 71;
-pub const YARVINSN_branchnil: ruby_vminsn_type = 72;
-pub const YARVINSN_once: ruby_vminsn_type = 73;
-pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 74;
-pub const YARVINSN_opt_plus: ruby_vminsn_type = 75;
-pub const YARVINSN_opt_minus: ruby_vminsn_type = 76;
-pub const YARVINSN_opt_mult: ruby_vminsn_type = 77;
-pub const YARVINSN_opt_div: ruby_vminsn_type = 78;
-pub const YARVINSN_opt_mod: ruby_vminsn_type = 79;
-pub const YARVINSN_opt_eq: ruby_vminsn_type = 80;
-pub const YARVINSN_opt_neq: ruby_vminsn_type = 81;
-pub const YARVINSN_opt_lt: ruby_vminsn_type = 82;
-pub const YARVINSN_opt_le: ruby_vminsn_type = 83;
-pub const YARVINSN_opt_gt: ruby_vminsn_type = 84;
-pub const YARVINSN_opt_ge: ruby_vminsn_type = 85;
-pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 86;
-pub const YARVINSN_opt_and: ruby_vminsn_type = 87;
-pub const YARVINSN_opt_or: ruby_vminsn_type = 88;
-pub const YARVINSN_opt_aref: ruby_vminsn_type = 89;
-pub const YARVINSN_opt_aset: ruby_vminsn_type = 90;
-pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 91;
-pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 92;
-pub const YARVINSN_opt_length: ruby_vminsn_type = 93;
-pub const YARVINSN_opt_size: ruby_vminsn_type = 94;
-pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 95;
-pub const YARVINSN_opt_succ: ruby_vminsn_type = 96;
-pub const YARVINSN_opt_not: ruby_vminsn_type = 97;
-pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 98;
-pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 99;
-pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 100;
-pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 101;
-pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 102;
-pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 103;
-pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 104;
-pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 105;
-pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 106;
-pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 107;
-pub const YARVINSN_trace_nop: ruby_vminsn_type = 108;
-pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 109;
-pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 110;
-pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 111;
-pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 112;
-pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 113;
-pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 114;
-pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 115;
-pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 116;
-pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 117;
-pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 118;
-pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 119;
-pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 120;
-pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 121;
-pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 122;
-pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 123;
-pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 124;
-pub const YARVINSN_trace_putnil: ruby_vminsn_type = 125;
-pub const YARVINSN_trace_putself: ruby_vminsn_type = 126;
-pub const YARVINSN_trace_putobject: ruby_vminsn_type = 127;
-pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 128;
-pub const YARVINSN_trace_putstring: ruby_vminsn_type = 129;
-pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 130;
-pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 131;
-pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 132;
-pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 133;
-pub const YARVINSN_trace_intern: ruby_vminsn_type = 134;
-pub const YARVINSN_trace_newarray: ruby_vminsn_type = 135;
-pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 136;
-pub const YARVINSN_trace_duparray: ruby_vminsn_type = 137;
-pub const YARVINSN_trace_duphash: ruby_vminsn_type = 138;
-pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 139;
-pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 140;
-pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 141;
-pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 142;
-pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 143;
-pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 144;
-pub const YARVINSN_trace_newhash: ruby_vminsn_type = 145;
-pub const YARVINSN_trace_newrange: ruby_vminsn_type = 146;
-pub const YARVINSN_trace_pop: ruby_vminsn_type = 147;
-pub const YARVINSN_trace_dup: ruby_vminsn_type = 148;
-pub const YARVINSN_trace_dupn: ruby_vminsn_type = 149;
-pub const YARVINSN_trace_swap: ruby_vminsn_type = 150;
-pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 151;
-pub const YARVINSN_trace_topn: ruby_vminsn_type = 152;
-pub const YARVINSN_trace_setn: ruby_vminsn_type = 153;
-pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 154;
-pub const YARVINSN_trace_defined: ruby_vminsn_type = 155;
-pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 156;
-pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 157;
-pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 158;
-pub const YARVINSN_trace_checktype: ruby_vminsn_type = 159;
-pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 160;
-pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 161;
-pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 162;
-pub const YARVINSN_trace_send: ruby_vminsn_type = 163;
-pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 164;
-pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 165;
-pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 166;
-pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 167;
-pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 168;
-pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 169;
-pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 170;
-pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 171;
-pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 172;
-pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 173;
-pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 174;
-pub const YARVINSN_trace_leave: ruby_vminsn_type = 175;
-pub const YARVINSN_trace_throw: ruby_vminsn_type = 176;
-pub const YARVINSN_trace_jump: ruby_vminsn_type = 177;
-pub const YARVINSN_trace_branchif: ruby_vminsn_type = 178;
-pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 179;
-pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 180;
-pub const YARVINSN_trace_once: ruby_vminsn_type = 181;
-pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 182;
-pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 183;
-pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 184;
-pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 185;
-pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 186;
-pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 187;
-pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 188;
-pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 189;
-pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 190;
-pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 191;
-pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 192;
-pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 193;
-pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 194;
-pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 195;
-pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 196;
-pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 197;
-pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 198;
-pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 199;
-pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 200;
-pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 201;
-pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 202;
-pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 203;
-pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 204;
-pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 205;
-pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 206;
-pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 207;
-pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 208;
-pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 209;
-pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 210;
-pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 211;
-pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 212;
-pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 213;
-pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 214;
-pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 215;
-pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 216;
+pub const YARVINSN_opt_hash_freeze: ruby_vminsn_type = 60;
+pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 61;
+pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 62;
+pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 63;
+pub const YARVINSN_opt_newarray_send: ruby_vminsn_type = 64;
+pub const YARVINSN_invokesuper: ruby_vminsn_type = 65;
+pub const YARVINSN_invokesuperforward: ruby_vminsn_type = 66;
+pub const YARVINSN_invokeblock: ruby_vminsn_type = 67;
+pub const YARVINSN_leave: ruby_vminsn_type = 68;
+pub const YARVINSN_throw: ruby_vminsn_type = 69;
+pub const YARVINSN_jump: ruby_vminsn_type = 70;
+pub const YARVINSN_branchif: ruby_vminsn_type = 71;
+pub const YARVINSN_branchunless: ruby_vminsn_type = 72;
+pub const YARVINSN_branchnil: ruby_vminsn_type = 73;
+pub const YARVINSN_once: ruby_vminsn_type = 74;
+pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 75;
+pub const YARVINSN_opt_plus: ruby_vminsn_type = 76;
+pub const YARVINSN_opt_minus: ruby_vminsn_type = 77;
+pub const YARVINSN_opt_mult: ruby_vminsn_type = 78;
+pub const YARVINSN_opt_div: ruby_vminsn_type = 79;
+pub const YARVINSN_opt_mod: ruby_vminsn_type = 80;
+pub const YARVINSN_opt_eq: ruby_vminsn_type = 81;
+pub const YARVINSN_opt_neq: ruby_vminsn_type = 82;
+pub const YARVINSN_opt_lt: ruby_vminsn_type = 83;
+pub const YARVINSN_opt_le: ruby_vminsn_type = 84;
+pub const YARVINSN_opt_gt: ruby_vminsn_type = 85;
+pub const YARVINSN_opt_ge: ruby_vminsn_type = 86;
+pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 87;
+pub const YARVINSN_opt_and: ruby_vminsn_type = 88;
+pub const YARVINSN_opt_or: ruby_vminsn_type = 89;
+pub const YARVINSN_opt_aref: ruby_vminsn_type = 90;
+pub const YARVINSN_opt_aset: ruby_vminsn_type = 91;
+pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 92;
+pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 93;
+pub const YARVINSN_opt_length: ruby_vminsn_type = 94;
+pub const YARVINSN_opt_size: ruby_vminsn_type = 95;
+pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 96;
+pub const YARVINSN_opt_succ: ruby_vminsn_type = 97;
+pub const YARVINSN_opt_not: ruby_vminsn_type = 98;
+pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 99;
+pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 100;
+pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 101;
+pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 102;
+pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 103;
+pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 104;
+pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 105;
+pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 106;
+pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 107;
+pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 108;
+pub const YARVINSN_trace_nop: ruby_vminsn_type = 109;
+pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 110;
+pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 111;
+pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 112;
+pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 113;
+pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 114;
+pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 115;
+pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 116;
+pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 117;
+pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 118;
+pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 119;
+pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 120;
+pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 121;
+pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 122;
+pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 123;
+pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 124;
+pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 125;
+pub const YARVINSN_trace_putnil: ruby_vminsn_type = 126;
+pub const YARVINSN_trace_putself: ruby_vminsn_type = 127;
+pub const YARVINSN_trace_putobject: ruby_vminsn_type = 128;
+pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 129;
+pub const YARVINSN_trace_putstring: ruby_vminsn_type = 130;
+pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 131;
+pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 132;
+pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 133;
+pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 134;
+pub const YARVINSN_trace_intern: ruby_vminsn_type = 135;
+pub const YARVINSN_trace_newarray: ruby_vminsn_type = 136;
+pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 137;
+pub const YARVINSN_trace_duparray: ruby_vminsn_type = 138;
+pub const YARVINSN_trace_duphash: ruby_vminsn_type = 139;
+pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 140;
+pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 141;
+pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 142;
+pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 143;
+pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 144;
+pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 145;
+pub const YARVINSN_trace_newhash: ruby_vminsn_type = 146;
+pub const YARVINSN_trace_newrange: ruby_vminsn_type = 147;
+pub const YARVINSN_trace_pop: ruby_vminsn_type = 148;
+pub const YARVINSN_trace_dup: ruby_vminsn_type = 149;
+pub const YARVINSN_trace_dupn: ruby_vminsn_type = 150;
+pub const YARVINSN_trace_swap: ruby_vminsn_type = 151;
+pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 152;
+pub const YARVINSN_trace_topn: ruby_vminsn_type = 153;
+pub const YARVINSN_trace_setn: ruby_vminsn_type = 154;
+pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 155;
+pub const YARVINSN_trace_defined: ruby_vminsn_type = 156;
+pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 157;
+pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 158;
+pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 159;
+pub const YARVINSN_trace_checktype: ruby_vminsn_type = 160;
+pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 161;
+pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 162;
+pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 163;
+pub const YARVINSN_trace_send: ruby_vminsn_type = 164;
+pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 165;
+pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 166;
+pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 167;
+pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 168;
+pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 169;
+pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 170;
+pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 171;
+pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 172;
+pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 173;
+pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 174;
+pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 175;
+pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 176;
+pub const YARVINSN_trace_leave: ruby_vminsn_type = 177;
+pub const YARVINSN_trace_throw: ruby_vminsn_type = 178;
+pub const YARVINSN_trace_jump: ruby_vminsn_type = 179;
+pub const YARVINSN_trace_branchif: ruby_vminsn_type = 180;
+pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 181;
+pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 182;
+pub const YARVINSN_trace_once: ruby_vminsn_type = 183;
+pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 184;
+pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 185;
+pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 186;
+pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 187;
+pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 188;
+pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 189;
+pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 190;
+pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 191;
+pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 192;
+pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 193;
+pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 194;
+pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 195;
+pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 196;
+pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 197;
+pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 198;
+pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 199;
+pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 200;
+pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 201;
+pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 202;
+pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 203;
+pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 204;
+pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 205;
+pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 206;
+pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 207;
+pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 208;
+pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 209;
+pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 210;
+pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 211;
+pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 212;
+pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 213;
+pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 214;
+pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 215;
+pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 216;
+pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 217;
+pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 218;
pub type ruby_vminsn_type = u32;
pub type rb_iseq_callback = ::std::option::Option<
unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void),