ZJIT: Drop trace_zjit_* instructions (#13189)

This commit is contained in:
Takashi Kokubun 2025-04-28 09:25:56 -07:00 committed by GitHub
parent 926411171d
commit 58e3aa0224
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
Notes: git 2025-04-28 16:26:11 +00:00
Merged-By: k0kubun <takashikkbn@gmail.com>
7 changed files with 293 additions and 296 deletions

57
iseq.c
View File

@ -3283,7 +3283,7 @@ iseq_data_to_ary(const rb_iseq_t *iseq)
VALUE exception = rb_ary_new(); /* [[....]] */ VALUE exception = rb_ary_new(); /* [[....]] */
VALUE misc = rb_hash_new(); VALUE misc = rb_hash_new();
static ID insn_syms[VM_INSTRUCTION_SIZE/2]; /* w/o-trace only */ static ID insn_syms[VM_BARE_INSTRUCTION_SIZE]; /* w/o-trace only */
struct st_table *labels_table = st_init_numtable(); struct st_table *labels_table = st_init_numtable();
VALUE labels_wrapper = TypedData_Wrap_Struct(0, &label_wrapper, labels_table); VALUE labels_wrapper = TypedData_Wrap_Struct(0, &label_wrapper, labels_table);
@ -3745,17 +3745,21 @@ rb_iseq_defined_string(enum defined_type type)
return rb_fstring_cstr(estr); return rb_fstring_cstr(estr);
} }
/* A map from encoded_insn to insn_data: decoded insn number, its len, // A map from encoded_insn to insn_data: decoded insn number, its len,
* non-trace version of encoded insn, and trace version. */ // decoded ZJIT insn number, non-trace version of encoded insn,
// trace version, and zjit version.
static st_table *encoded_insn_data; static st_table *encoded_insn_data;
typedef struct insn_data_struct { typedef struct insn_data_struct {
int insn; int insn;
int insn_len; int insn_len;
void *notrace_encoded_insn; void *notrace_encoded_insn;
void *trace_encoded_insn; void *trace_encoded_insn;
#if USE_ZJIT
int zjit_insn;
void *zjit_encoded_insn;
#endif
} insn_data_t; } insn_data_t;
static insn_data_t insn_data[VM_INSTRUCTION_SIZE/2]; static insn_data_t insn_data[VM_BARE_INSTRUCTION_SIZE];
void void
rb_free_encoded_insn_data(void) rb_free_encoded_insn_data(void)
@ -3772,27 +3776,33 @@ rb_vm_encoded_insn_data_table_init(void)
#else #else
#define INSN_CODE(insn) (insn) #define INSN_CODE(insn) (insn)
#endif #endif
st_data_t insn; encoded_insn_data = st_init_numtable_with_size(VM_BARE_INSTRUCTION_SIZE);
encoded_insn_data = st_init_numtable_with_size(VM_INSTRUCTION_SIZE / 2);
for (insn = 0; insn < VM_INSTRUCTION_SIZE/2; insn++) { for (int insn = 0; insn < VM_BARE_INSTRUCTION_SIZE; insn++) {
st_data_t key1 = (st_data_t)INSN_CODE(insn); insn_data[insn].insn = insn;
st_data_t key2 = (st_data_t)INSN_CODE(insn + VM_INSTRUCTION_SIZE/2);
insn_data[insn].insn = (int)insn;
insn_data[insn].insn_len = insn_len(insn); insn_data[insn].insn_len = insn_len(insn);
if (insn != BIN(opt_invokebuiltin_delegate_leave)) { // When tracing :return events, we convert opt_invokebuiltin_delegate_leave + leave into
insn_data[insn].notrace_encoded_insn = (void *) key1; // opt_invokebuiltin_delegate + trace_leave. https://github.com/ruby/ruby/pull/3256
insn_data[insn].trace_encoded_insn = (void *) key2; int notrace_insn = (insn != BIN(opt_invokebuiltin_delegate_leave)) ? insn : BIN(opt_invokebuiltin_delegate);
} insn_data[insn].notrace_encoded_insn = (void *)INSN_CODE(notrace_insn);
else { insn_data[insn].trace_encoded_insn = (void *)INSN_CODE(notrace_insn + VM_BARE_INSTRUCTION_SIZE);
insn_data[insn].notrace_encoded_insn = (void *) INSN_CODE(BIN(opt_invokebuiltin_delegate));
insn_data[insn].trace_encoded_insn = (void *) INSN_CODE(BIN(opt_invokebuiltin_delegate) + VM_INSTRUCTION_SIZE/2);
}
st_data_t key1 = (st_data_t)INSN_CODE(insn);
st_data_t key2 = (st_data_t)INSN_CODE(insn + VM_BARE_INSTRUCTION_SIZE);
st_add_direct(encoded_insn_data, key1, (st_data_t)&insn_data[insn]); st_add_direct(encoded_insn_data, key1, (st_data_t)&insn_data[insn]);
st_add_direct(encoded_insn_data, key2, (st_data_t)&insn_data[insn]); st_add_direct(encoded_insn_data, key2, (st_data_t)&insn_data[insn]);
#if USE_ZJIT
int zjit_insn = vm_bare_insn_to_zjit_insn(insn);
insn_data[insn].zjit_insn = zjit_insn;
insn_data[insn].zjit_encoded_insn = (insn != zjit_insn) ? (void *)INSN_CODE(zjit_insn) : 0;
if (insn != zjit_insn) {
st_data_t key3 = (st_data_t)INSN_CODE(zjit_insn);
st_add_direct(encoded_insn_data, key3, (st_data_t)&insn_data[insn]);
}
#endif
} }
} }
@ -3821,8 +3831,13 @@ rb_vm_insn_addr2opcode(const void *addr)
insn_data_t *e = (insn_data_t *)val; insn_data_t *e = (insn_data_t *)val;
int opcode = e->insn; int opcode = e->insn;
if (addr == e->trace_encoded_insn) { if (addr == e->trace_encoded_insn) {
opcode += VM_INSTRUCTION_SIZE/2; opcode += VM_BARE_INSTRUCTION_SIZE;
} }
#if USE_ZJIT
else if (addr == e->zjit_encoded_insn) {
opcode = e->zjit_insn;
}
#endif
return opcode; return opcode;
} }

View File

@ -17,6 +17,6 @@ RubyVM::Instructions = RubyVM::BareInstructions.to_a + \
RubyVM::OperandsUnifications.to_a + \ RubyVM::OperandsUnifications.to_a + \
RubyVM::InstructionsUnifications.to_a RubyVM::InstructionsUnifications.to_a
require_relative 'zjit_instructions'
require_relative 'trace_instructions' require_relative 'trace_instructions'
require_relative 'zjit_instructions'
RubyVM::Instructions.freeze RubyVM::Instructions.freeze

View File

@ -58,6 +58,10 @@ class RubyVM::TraceInstructions
return false return false
end end
def zjit_profile?
return false
end
private private
@instances = RubyVM::Instructions.map {|i| new i } @instances = RubyVM::Instructions.map {|i| new i }

View File

@ -25,6 +25,8 @@ enum ruby_vminsn_type {
VM_INSTRUCTION_SIZE VM_INSTRUCTION_SIZE
}; };
#define VM_BARE_INSTRUCTION_SIZE <%= RubyVM::Instructions.count { |i| i.name !~ /\A(trace|zjit)_/ } %>
#define ASSERT_VM_INSTRUCTION_SIZE(array) \ #define ASSERT_VM_INSTRUCTION_SIZE(array) \
STATIC_ASSERT(numberof_##array, numberof(array) == VM_INSTRUCTION_SIZE) STATIC_ASSERT(numberof_##array, numberof(array) == VM_INSTRUCTION_SIZE)

View File

@ -838,142 +838,130 @@ pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 107;
pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 108; pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 108;
pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 109; pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 109;
pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 110; pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 110;
pub const YARVINSN_zjit_opt_send_without_block: ruby_vminsn_type = 111; pub const YARVINSN_trace_nop: ruby_vminsn_type = 111;
pub const YARVINSN_zjit_opt_plus: ruby_vminsn_type = 112; pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 112;
pub const YARVINSN_zjit_opt_minus: ruby_vminsn_type = 113; pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 113;
pub const YARVINSN_zjit_opt_mult: ruby_vminsn_type = 114; pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 114;
pub const YARVINSN_zjit_opt_div: ruby_vminsn_type = 115; pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 115;
pub const YARVINSN_zjit_opt_mod: ruby_vminsn_type = 116; pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 116;
pub const YARVINSN_zjit_opt_eq: ruby_vminsn_type = 117; pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 117;
pub const YARVINSN_zjit_opt_neq: ruby_vminsn_type = 118; pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 118;
pub const YARVINSN_zjit_opt_lt: ruby_vminsn_type = 119; pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 119;
pub const YARVINSN_zjit_opt_le: ruby_vminsn_type = 120; pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 120;
pub const YARVINSN_zjit_opt_gt: ruby_vminsn_type = 121; pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 121;
pub const YARVINSN_zjit_opt_ge: ruby_vminsn_type = 122; pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 122;
pub const YARVINSN_trace_nop: ruby_vminsn_type = 123; pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 123;
pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 124; pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 124;
pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 125; pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 125;
pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 126; pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 126;
pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 127; pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 127;
pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 128; pub const YARVINSN_trace_putnil: ruby_vminsn_type = 128;
pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 129; pub const YARVINSN_trace_putself: ruby_vminsn_type = 129;
pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 130; pub const YARVINSN_trace_putobject: ruby_vminsn_type = 130;
pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 131; pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 131;
pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 132; pub const YARVINSN_trace_putstring: ruby_vminsn_type = 132;
pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 133; pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 133;
pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 134; pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 134;
pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 135; pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 135;
pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 136; pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 136;
pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 137; pub const YARVINSN_trace_intern: ruby_vminsn_type = 137;
pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 138; pub const YARVINSN_trace_newarray: ruby_vminsn_type = 138;
pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 139; pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 139;
pub const YARVINSN_trace_putnil: ruby_vminsn_type = 140; pub const YARVINSN_trace_duparray: ruby_vminsn_type = 140;
pub const YARVINSN_trace_putself: ruby_vminsn_type = 141; pub const YARVINSN_trace_duphash: ruby_vminsn_type = 141;
pub const YARVINSN_trace_putobject: ruby_vminsn_type = 142; pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 142;
pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 143; pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 143;
pub const YARVINSN_trace_putstring: ruby_vminsn_type = 144; pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 144;
pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 145; pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 145;
pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 146; pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 146;
pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 147; pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 147;
pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 148; pub const YARVINSN_trace_newhash: ruby_vminsn_type = 148;
pub const YARVINSN_trace_intern: ruby_vminsn_type = 149; pub const YARVINSN_trace_newrange: ruby_vminsn_type = 149;
pub const YARVINSN_trace_newarray: ruby_vminsn_type = 150; pub const YARVINSN_trace_pop: ruby_vminsn_type = 150;
pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 151; pub const YARVINSN_trace_dup: ruby_vminsn_type = 151;
pub const YARVINSN_trace_duparray: ruby_vminsn_type = 152; pub const YARVINSN_trace_dupn: ruby_vminsn_type = 152;
pub const YARVINSN_trace_duphash: ruby_vminsn_type = 153; pub const YARVINSN_trace_swap: ruby_vminsn_type = 153;
pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 154; pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 154;
pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 155; pub const YARVINSN_trace_topn: ruby_vminsn_type = 155;
pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 156; pub const YARVINSN_trace_setn: ruby_vminsn_type = 156;
pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 157; pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 157;
pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 158; pub const YARVINSN_trace_defined: ruby_vminsn_type = 158;
pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 159; pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 159;
pub const YARVINSN_trace_newhash: ruby_vminsn_type = 160; pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 160;
pub const YARVINSN_trace_newrange: ruby_vminsn_type = 161; pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 161;
pub const YARVINSN_trace_pop: ruby_vminsn_type = 162; pub const YARVINSN_trace_checktype: ruby_vminsn_type = 162;
pub const YARVINSN_trace_dup: ruby_vminsn_type = 163; pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 163;
pub const YARVINSN_trace_dupn: ruby_vminsn_type = 164; pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 164;
pub const YARVINSN_trace_swap: ruby_vminsn_type = 165; pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 165;
pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 166; pub const YARVINSN_trace_send: ruby_vminsn_type = 166;
pub const YARVINSN_trace_topn: ruby_vminsn_type = 167; pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 167;
pub const YARVINSN_trace_setn: ruby_vminsn_type = 168; pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 168;
pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 169; pub const YARVINSN_trace_opt_new: ruby_vminsn_type = 169;
pub const YARVINSN_trace_defined: ruby_vminsn_type = 170; pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 170;
pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 171; pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 171;
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 172; pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 172;
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 173; pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 173;
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 174; pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 174;
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 175; pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 175;
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 176; pub const YARVINSN_trace_opt_duparray_send: ruby_vminsn_type = 176;
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 177; pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 177;
pub const YARVINSN_trace_send: ruby_vminsn_type = 178; pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 178;
pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 179; pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 179;
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 180; pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 180;
pub const YARVINSN_trace_opt_new: ruby_vminsn_type = 181; pub const YARVINSN_trace_leave: ruby_vminsn_type = 181;
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 182; pub const YARVINSN_trace_throw: ruby_vminsn_type = 182;
pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 183; pub const YARVINSN_trace_jump: ruby_vminsn_type = 183;
pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 184; pub const YARVINSN_trace_branchif: ruby_vminsn_type = 184;
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 185; pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 185;
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 186; pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 186;
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 187; pub const YARVINSN_trace_once: ruby_vminsn_type = 187;
pub const YARVINSN_trace_opt_duparray_send: ruby_vminsn_type = 188; pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 188;
pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 189; pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 189;
pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 190; pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 190;
pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 191; pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 191;
pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 192; pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 192;
pub const YARVINSN_trace_leave: ruby_vminsn_type = 193; pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 193;
pub const YARVINSN_trace_throw: ruby_vminsn_type = 194; pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 194;
pub const YARVINSN_trace_jump: ruby_vminsn_type = 195; pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 195;
pub const YARVINSN_trace_branchif: ruby_vminsn_type = 196; pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 196;
pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 197; pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 197;
pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 198; pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 198;
pub const YARVINSN_trace_once: ruby_vminsn_type = 199; pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 199;
pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 200; pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 200;
pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 201; pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 201;
pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 202; pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 202;
pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 203; pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 203;
pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 204; pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 204;
pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 205; pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 205;
pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 206; pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 206;
pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 207; pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 207;
pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 208; pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 208;
pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 209; pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 209;
pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 210; pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 210;
pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 211; pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 211;
pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 212; pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 212;
pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 213; pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 213;
pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 214; pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 214;
pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 215; pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 215;
pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 216; pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 216;
pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 217; pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 217;
pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 218; pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 218;
pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 219; pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 219;
pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 220; pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 220;
pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 221; pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 221;
pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 222; pub const YARVINSN_zjit_opt_send_without_block: ruby_vminsn_type = 222;
pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 223; pub const YARVINSN_zjit_opt_plus: ruby_vminsn_type = 223;
pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 224; pub const YARVINSN_zjit_opt_minus: ruby_vminsn_type = 224;
pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 225; pub const YARVINSN_zjit_opt_mult: ruby_vminsn_type = 225;
pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 226; pub const YARVINSN_zjit_opt_div: ruby_vminsn_type = 226;
pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 227; pub const YARVINSN_zjit_opt_mod: ruby_vminsn_type = 227;
pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 228; pub const YARVINSN_zjit_opt_eq: ruby_vminsn_type = 228;
pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 229; pub const YARVINSN_zjit_opt_neq: ruby_vminsn_type = 229;
pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 230; pub const YARVINSN_zjit_opt_lt: ruby_vminsn_type = 230;
pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 231; pub const YARVINSN_zjit_opt_le: ruby_vminsn_type = 231;
pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 232; pub const YARVINSN_zjit_opt_gt: ruby_vminsn_type = 232;
pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 233; pub const YARVINSN_zjit_opt_ge: ruby_vminsn_type = 233;
pub const YARVINSN_trace_zjit_opt_send_without_block: ruby_vminsn_type = 234; pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 234;
pub const YARVINSN_trace_zjit_opt_plus: ruby_vminsn_type = 235;
pub const YARVINSN_trace_zjit_opt_minus: ruby_vminsn_type = 236;
pub const YARVINSN_trace_zjit_opt_mult: ruby_vminsn_type = 237;
pub const YARVINSN_trace_zjit_opt_div: ruby_vminsn_type = 238;
pub const YARVINSN_trace_zjit_opt_mod: ruby_vminsn_type = 239;
pub const YARVINSN_trace_zjit_opt_eq: ruby_vminsn_type = 240;
pub const YARVINSN_trace_zjit_opt_neq: ruby_vminsn_type = 241;
pub const YARVINSN_trace_zjit_opt_lt: ruby_vminsn_type = 242;
pub const YARVINSN_trace_zjit_opt_le: ruby_vminsn_type = 243;
pub const YARVINSN_trace_zjit_opt_gt: ruby_vminsn_type = 244;
pub const YARVINSN_trace_zjit_opt_ge: ruby_vminsn_type = 245;
pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 246;
pub type ruby_vminsn_type = u32; pub type ruby_vminsn_type = u32;
pub type rb_iseq_callback = ::std::option::Option< pub type rb_iseq_callback = ::std::option::Option<
unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void), unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void),

4
zjit.c
View File

@ -664,7 +664,7 @@ rb_zjit_profile_enable(const rb_iseq_t *iseq)
unsigned int insn_idx = 0; unsigned int insn_idx = 0;
while (insn_idx < iseq->body->iseq_size) { while (insn_idx < iseq->body->iseq_size) {
int insn = rb_vm_insn_decode(iseq->body->iseq_encoded[insn_idx]); int insn = rb_vm_insn_addr2opcode((void *)iseq->body->iseq_encoded[insn_idx]);
int zjit_insn = vm_bare_insn_to_zjit_insn(insn); int zjit_insn = vm_bare_insn_to_zjit_insn(insn);
if (insn != zjit_insn) { if (insn != zjit_insn) {
iseq->body->iseq_encoded[insn_idx] = (VALUE)insn_table[zjit_insn]; iseq->body->iseq_encoded[insn_idx] = (VALUE)insn_table[zjit_insn];
@ -682,7 +682,7 @@ rb_zjit_profile_disable(const rb_iseq_t *iseq)
unsigned int insn_idx = 0; unsigned int insn_idx = 0;
while (insn_idx < iseq->body->iseq_size) { while (insn_idx < iseq->body->iseq_size) {
int insn = rb_vm_insn_decode(iseq->body->iseq_encoded[insn_idx]); int insn = rb_vm_insn_addr2opcode((void *)iseq->body->iseq_encoded[insn_idx]);
int bare_insn = vm_zjit_insn_to_bare_insn(insn); int bare_insn = vm_zjit_insn_to_bare_insn(insn);
if (insn != bare_insn) { if (insn != bare_insn) {
iseq->body->iseq_encoded[insn_idx] = (VALUE)insn_table[bare_insn]; iseq->body->iseq_encoded[insn_idx] = (VALUE)insn_table[bare_insn];

View File

@ -594,142 +594,130 @@ pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 107;
pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 108; pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 108;
pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 109; pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 109;
pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 110; pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 110;
pub const YARVINSN_zjit_opt_send_without_block: ruby_vminsn_type = 111; pub const YARVINSN_trace_nop: ruby_vminsn_type = 111;
pub const YARVINSN_zjit_opt_plus: ruby_vminsn_type = 112; pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 112;
pub const YARVINSN_zjit_opt_minus: ruby_vminsn_type = 113; pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 113;
pub const YARVINSN_zjit_opt_mult: ruby_vminsn_type = 114; pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 114;
pub const YARVINSN_zjit_opt_div: ruby_vminsn_type = 115; pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 115;
pub const YARVINSN_zjit_opt_mod: ruby_vminsn_type = 116; pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 116;
pub const YARVINSN_zjit_opt_eq: ruby_vminsn_type = 117; pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 117;
pub const YARVINSN_zjit_opt_neq: ruby_vminsn_type = 118; pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 118;
pub const YARVINSN_zjit_opt_lt: ruby_vminsn_type = 119; pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 119;
pub const YARVINSN_zjit_opt_le: ruby_vminsn_type = 120; pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 120;
pub const YARVINSN_zjit_opt_gt: ruby_vminsn_type = 121; pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 121;
pub const YARVINSN_zjit_opt_ge: ruby_vminsn_type = 122; pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 122;
pub const YARVINSN_trace_nop: ruby_vminsn_type = 123; pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 123;
pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 124; pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 124;
pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 125; pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 125;
pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 126; pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 126;
pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 127; pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 127;
pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 128; pub const YARVINSN_trace_putnil: ruby_vminsn_type = 128;
pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 129; pub const YARVINSN_trace_putself: ruby_vminsn_type = 129;
pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 130; pub const YARVINSN_trace_putobject: ruby_vminsn_type = 130;
pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 131; pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 131;
pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 132; pub const YARVINSN_trace_putstring: ruby_vminsn_type = 132;
pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 133; pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 133;
pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 134; pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 134;
pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 135; pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 135;
pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 136; pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 136;
pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 137; pub const YARVINSN_trace_intern: ruby_vminsn_type = 137;
pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 138; pub const YARVINSN_trace_newarray: ruby_vminsn_type = 138;
pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 139; pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 139;
pub const YARVINSN_trace_putnil: ruby_vminsn_type = 140; pub const YARVINSN_trace_duparray: ruby_vminsn_type = 140;
pub const YARVINSN_trace_putself: ruby_vminsn_type = 141; pub const YARVINSN_trace_duphash: ruby_vminsn_type = 141;
pub const YARVINSN_trace_putobject: ruby_vminsn_type = 142; pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 142;
pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 143; pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 143;
pub const YARVINSN_trace_putstring: ruby_vminsn_type = 144; pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 144;
pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 145; pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 145;
pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 146; pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 146;
pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 147; pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 147;
pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 148; pub const YARVINSN_trace_newhash: ruby_vminsn_type = 148;
pub const YARVINSN_trace_intern: ruby_vminsn_type = 149; pub const YARVINSN_trace_newrange: ruby_vminsn_type = 149;
pub const YARVINSN_trace_newarray: ruby_vminsn_type = 150; pub const YARVINSN_trace_pop: ruby_vminsn_type = 150;
pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 151; pub const YARVINSN_trace_dup: ruby_vminsn_type = 151;
pub const YARVINSN_trace_duparray: ruby_vminsn_type = 152; pub const YARVINSN_trace_dupn: ruby_vminsn_type = 152;
pub const YARVINSN_trace_duphash: ruby_vminsn_type = 153; pub const YARVINSN_trace_swap: ruby_vminsn_type = 153;
pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 154; pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 154;
pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 155; pub const YARVINSN_trace_topn: ruby_vminsn_type = 155;
pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 156; pub const YARVINSN_trace_setn: ruby_vminsn_type = 156;
pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 157; pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 157;
pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 158; pub const YARVINSN_trace_defined: ruby_vminsn_type = 158;
pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 159; pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 159;
pub const YARVINSN_trace_newhash: ruby_vminsn_type = 160; pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 160;
pub const YARVINSN_trace_newrange: ruby_vminsn_type = 161; pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 161;
pub const YARVINSN_trace_pop: ruby_vminsn_type = 162; pub const YARVINSN_trace_checktype: ruby_vminsn_type = 162;
pub const YARVINSN_trace_dup: ruby_vminsn_type = 163; pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 163;
pub const YARVINSN_trace_dupn: ruby_vminsn_type = 164; pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 164;
pub const YARVINSN_trace_swap: ruby_vminsn_type = 165; pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 165;
pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 166; pub const YARVINSN_trace_send: ruby_vminsn_type = 166;
pub const YARVINSN_trace_topn: ruby_vminsn_type = 167; pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 167;
pub const YARVINSN_trace_setn: ruby_vminsn_type = 168; pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 168;
pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 169; pub const YARVINSN_trace_opt_new: ruby_vminsn_type = 169;
pub const YARVINSN_trace_defined: ruby_vminsn_type = 170; pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 170;
pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 171; pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 171;
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 172; pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 172;
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 173; pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 173;
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 174; pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 174;
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 175; pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 175;
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 176; pub const YARVINSN_trace_opt_duparray_send: ruby_vminsn_type = 176;
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 177; pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 177;
pub const YARVINSN_trace_send: ruby_vminsn_type = 178; pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 178;
pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 179; pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 179;
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 180; pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 180;
pub const YARVINSN_trace_opt_new: ruby_vminsn_type = 181; pub const YARVINSN_trace_leave: ruby_vminsn_type = 181;
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 182; pub const YARVINSN_trace_throw: ruby_vminsn_type = 182;
pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 183; pub const YARVINSN_trace_jump: ruby_vminsn_type = 183;
pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 184; pub const YARVINSN_trace_branchif: ruby_vminsn_type = 184;
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 185; pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 185;
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 186; pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 186;
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 187; pub const YARVINSN_trace_once: ruby_vminsn_type = 187;
pub const YARVINSN_trace_opt_duparray_send: ruby_vminsn_type = 188; pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 188;
pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 189; pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 189;
pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 190; pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 190;
pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 191; pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 191;
pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 192; pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 192;
pub const YARVINSN_trace_leave: ruby_vminsn_type = 193; pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 193;
pub const YARVINSN_trace_throw: ruby_vminsn_type = 194; pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 194;
pub const YARVINSN_trace_jump: ruby_vminsn_type = 195; pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 195;
pub const YARVINSN_trace_branchif: ruby_vminsn_type = 196; pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 196;
pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 197; pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 197;
pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 198; pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 198;
pub const YARVINSN_trace_once: ruby_vminsn_type = 199; pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 199;
pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 200; pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 200;
pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 201; pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 201;
pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 202; pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 202;
pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 203; pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 203;
pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 204; pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 204;
pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 205; pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 205;
pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 206; pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 206;
pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 207; pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 207;
pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 208; pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 208;
pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 209; pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 209;
pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 210; pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 210;
pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 211; pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 211;
pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 212; pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 212;
pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 213; pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 213;
pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 214; pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 214;
pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 215; pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 215;
pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 216; pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 216;
pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 217; pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 217;
pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 218; pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 218;
pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 219; pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 219;
pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 220; pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 220;
pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 221; pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 221;
pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 222; pub const YARVINSN_zjit_opt_send_without_block: ruby_vminsn_type = 222;
pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 223; pub const YARVINSN_zjit_opt_plus: ruby_vminsn_type = 223;
pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 224; pub const YARVINSN_zjit_opt_minus: ruby_vminsn_type = 224;
pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 225; pub const YARVINSN_zjit_opt_mult: ruby_vminsn_type = 225;
pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 226; pub const YARVINSN_zjit_opt_div: ruby_vminsn_type = 226;
pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 227; pub const YARVINSN_zjit_opt_mod: ruby_vminsn_type = 227;
pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 228; pub const YARVINSN_zjit_opt_eq: ruby_vminsn_type = 228;
pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 229; pub const YARVINSN_zjit_opt_neq: ruby_vminsn_type = 229;
pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 230; pub const YARVINSN_zjit_opt_lt: ruby_vminsn_type = 230;
pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 231; pub const YARVINSN_zjit_opt_le: ruby_vminsn_type = 231;
pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 232; pub const YARVINSN_zjit_opt_gt: ruby_vminsn_type = 232;
pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 233; pub const YARVINSN_zjit_opt_ge: ruby_vminsn_type = 233;
pub const YARVINSN_trace_zjit_opt_send_without_block: ruby_vminsn_type = 234; pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 234;
pub const YARVINSN_trace_zjit_opt_plus: ruby_vminsn_type = 235;
pub const YARVINSN_trace_zjit_opt_minus: ruby_vminsn_type = 236;
pub const YARVINSN_trace_zjit_opt_mult: ruby_vminsn_type = 237;
pub const YARVINSN_trace_zjit_opt_div: ruby_vminsn_type = 238;
pub const YARVINSN_trace_zjit_opt_mod: ruby_vminsn_type = 239;
pub const YARVINSN_trace_zjit_opt_eq: ruby_vminsn_type = 240;
pub const YARVINSN_trace_zjit_opt_neq: ruby_vminsn_type = 241;
pub const YARVINSN_trace_zjit_opt_lt: ruby_vminsn_type = 242;
pub const YARVINSN_trace_zjit_opt_le: ruby_vminsn_type = 243;
pub const YARVINSN_trace_zjit_opt_gt: ruby_vminsn_type = 244;
pub const YARVINSN_trace_zjit_opt_ge: ruby_vminsn_type = 245;
pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 246;
pub type ruby_vminsn_type = u32; pub type ruby_vminsn_type = u32;
pub type rb_iseq_callback = ::std::option::Option< pub type rb_iseq_callback = ::std::option::Option<
unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void), unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void),