Linux premium180.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
LiteSpeed
: 162.0.209.168 | : 216.73.216.187
Cant Read [ /etc/named.conf ]
8.3.30
nortrmdp
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
opt /
alt /
ruby32 /
share /
ruby /
ruby_vm /
mjit /
[ HOME SHELL ]
Name
Size
Permission
Action
c_pointer.rb
9.02
KB
-rw-r--r--
c_type.rb
2.49
KB
-rw-r--r--
compiler.rb
39.42
KB
-rw-r--r--
hooks.rb
915
B
-rw-r--r--
instruction.rb
66.32
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : instruction.rb
module RubyVM::MJIT # :nodoc: all Instruction = Struct.new( :name, :bin, :len, :expr, :declarations, :preamble, :opes, :pops, :rets, :always_leaf?, :leaf_without_check_ints?, :handles_sp?, ) INSNS = { 0 => Instruction.new( name: :nop, bin: 0, # BIN(nop) len: 1, # insn_len expr: <<-EXPR, { /* none */ } EXPR declarations: [], preamble: [], opes: [], pops: [], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 1 => Instruction.new( name: :getlocal, bin: 1, # BIN(getlocal) len: 3, # insn_len expr: <<-EXPR, { val = *(vm_get_ep(GET_EP(), level) - idx); RB_DEBUG_COUNTER_INC(lvar_get); (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 2 => Instruction.new( name: :setlocal, bin: 2, # BIN(setlocal) len: 3, # insn_len expr: <<-EXPR, { vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val); RB_DEBUG_COUNTER_INC(lvar_set); (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 3 => Instruction.new( name: :getblockparam, bin: 3, # BIN(getblockparam) len: 3, # insn_len expr: <<-EXPR, { const VALUE *ep = vm_get_ep(GET_EP(), level); VM_ASSERT(VM_ENV_LOCAL_P(ep)); if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) { val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep)); vm_env_write(ep, -(int)idx, val); VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM); } else { val = *(ep - idx); RB_DEBUG_COUNTER_INC(lvar_get); (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0); } } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 4 => Instruction.new( name: :setblockparam, bin: 4, # BIN(setblockparam) len: 3, # insn_len expr: <<-EXPR, { const VALUE *ep = vm_get_ep(GET_EP(), level); VM_ASSERT(VM_ENV_LOCAL_P(ep)); vm_env_write(ep, -(int)idx, val); RB_DEBUG_COUNTER_INC(lvar_set); (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0); VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 5 => Instruction.new( name: :getblockparamproxy, bin: 5, # BIN(getblockparamproxy) len: 3, # insn_len expr: <<-EXPR, { const VALUE *ep = vm_get_ep(GET_EP(), level); VM_ASSERT(VM_ENV_LOCAL_P(ep)); if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) { VALUE block_handler = VM_ENV_BLOCK_HANDLER(ep); if (block_handler) { switch (vm_block_handler_type(block_handler)) { case block_handler_type_iseq: case block_handler_type_ifunc: val = rb_block_param_proxy; break; case block_handler_type_symbol: val = rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler)); goto INSN_LABEL(set); case block_handler_type_proc: val = VM_BH_TO_PROC(block_handler); goto INSN_LABEL(set); default: VM_UNREACHABLE(getblockparamproxy); } } else { val = Qnil; INSN_LABEL(set): vm_env_write(ep, -(int)idx, val); VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM); } } else { val = *(ep - idx); RB_DEBUG_COUNTER_INC(lvar_get); (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0); } } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}, {:decl=>"rb_num_t level", :type=>"rb_num_t", :name=>"level"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 6 => Instruction.new( name: :getspecial, bin: 6, # BIN(getspecial) len: 3, # insn_len expr: <<-EXPR, { val = vm_getspecial(ec, GET_LEP(), key, type); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) key, type"], preamble: [], opes: [{:decl=>"rb_num_t key", :type=>"rb_num_t", :name=>"key"}, {:decl=>"rb_num_t type", :type=>"rb_num_t", :name=>"type"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 7 => Instruction.new( name: :setspecial, bin: 7, # BIN(setspecial) len: 2, # insn_len expr: <<-EXPR, { lep_svar_set(ec, GET_LEP(), key, obj); } EXPR declarations: ["MAYBE_UNUSED(VALUE) obj", "MAYBE_UNUSED(rb_num_t) key"], preamble: [], opes: [{:decl=>"rb_num_t key", :type=>"rb_num_t", :name=>"key"}], pops: [{:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 8 => Instruction.new( name: :getinstancevariable, bin: 8, # BIN(getinstancevariable) len: 3, # insn_len expr: <<-EXPR, { val = vm_getinstancevariable(GET_ISEQ(), GET_SELF(), id, ic); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(IVC) ic", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"IVC ic", :type=>"IVC", :name=>"ic"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 9 => Instruction.new( name: :setinstancevariable, bin: 9, # BIN(setinstancevariable) len: 3, # insn_len expr: <<-EXPR, { vm_setinstancevariable(GET_ISEQ(), GET_SELF(), id, val, ic); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(IVC) ic", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"IVC ic", :type=>"IVC", :name=>"ic"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 10 => Instruction.new( name: :getclassvariable, bin: 10, # BIN(getclassvariable) len: 3, # insn_len expr: <<-EXPR, { rb_control_frame_t *cfp = GET_CFP(); val = vm_getclassvariable(GET_ISEQ(), cfp, id, ic); } EXPR declarations: ["MAYBE_UNUSED(ICVARC) ic", "MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ICVARC ic", :type=>"ICVARC", :name=>"ic"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 11 => Instruction.new( name: :setclassvariable, bin: 11, # BIN(setclassvariable) len: 3, # insn_len expr: <<-EXPR, { vm_ensure_not_refinement_module(GET_SELF()); vm_setclassvariable(GET_ISEQ(), GET_CFP(), id, val, ic); } EXPR declarations: ["MAYBE_UNUSED(ICVARC) ic", "MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ICVARC ic", :type=>"ICVARC", :name=>"ic"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 12 => Instruction.new( name: :opt_getconstant_path, bin: 12, # BIN(opt_getconstant_path) len: 2, # insn_len expr: <<-EXPR, { const ID *segments = ic->segments; struct iseq_inline_constant_cache_entry *ice = ic->entry; if (ice && vm_ic_hit_p(ice, GET_EP())) { val = ice->value; VM_ASSERT(val == vm_get_ev_const_chain(ec, segments)); } else { ruby_vm_constant_cache_misses++; val = vm_get_ev_const_chain(ec, segments); vm_ic_track_const_chain(GET_CFP(), ic, segments); // Because leaf=false, we need to undo the PC increment to get the address to this instruction // INSN_ATTR(width) == 2 vm_ic_update(GET_ISEQ(), ic, val, GET_EP(), GET_PC() - 2); } } EXPR declarations: ["MAYBE_UNUSED(IC) ic", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"IC ic", :type=>"IC", :name=>"ic"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 13 => Instruction.new( name: :getconstant, bin: 13, # BIN(getconstant) len: 2, # insn_len expr: <<-EXPR, { val = vm_get_ev_const(ec, klass, id, allow_nil == Qtrue, 0); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(VALUE) allow_nil, klass, val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}], pops: [{:decl=>"VALUE klass", :type=>"VALUE", :name=>"klass"}, {:decl=>"VALUE allow_nil", :type=>"VALUE", :name=>"allow_nil"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 14 => Instruction.new( name: :setconstant, bin: 14, # BIN(setconstant) len: 2, # insn_len expr: <<-EXPR, { vm_check_if_namespace(cbase); vm_ensure_not_refinement_module(GET_SELF()); rb_const_set(cbase, id, val); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(VALUE) cbase, val"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}, {:decl=>"VALUE cbase", :type=>"VALUE", :name=>"cbase"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 15 => Instruction.new( name: :getglobal, bin: 15, # BIN(getglobal) len: 2, # insn_len expr: <<-EXPR, { val = rb_gvar_get(gid); } EXPR declarations: ["MAYBE_UNUSED(ID) gid", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID gid", :type=>"ID", :name=>"gid"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 16 => Instruction.new( name: :setglobal, bin: 16, # BIN(setglobal) len: 2, # insn_len expr: <<-EXPR, { rb_gvar_set(gid, val); } EXPR declarations: ["MAYBE_UNUSED(ID) gid", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ID gid", :type=>"ID", :name=>"gid"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 17 => Instruction.new( name: :putnil, bin: 17, # BIN(putnil) len: 1, # insn_len expr: <<-EXPR, { val = Qnil; } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 18 => Instruction.new( name: :putself, bin: 18, # BIN(putself) len: 1, # insn_len expr: <<-EXPR, { val = GET_SELF(); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 19 => Instruction.new( name: :putobject, bin: 19, # BIN(putobject) len: 2, # insn_len expr: <<-EXPR, { /* */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 20 => Instruction.new( name: :putspecialobject, bin: 20, # BIN(putspecialobject) len: 2, # insn_len expr: <<-EXPR, { enum vm_special_object_type type; type = (enum vm_special_object_type)value_type; val = vm_get_special_object(GET_EP(), type); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) value_type"], preamble: [], opes: [{:decl=>"rb_num_t value_type", :type=>"rb_num_t", :name=>"value_type"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 21 => Instruction.new( name: :putstring, bin: 21, # BIN(putstring) len: 2, # insn_len expr: <<-EXPR, { val = rb_ec_str_resurrect(ec, str); } EXPR declarations: ["MAYBE_UNUSED(VALUE) str, val"], preamble: [], opes: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 22 => Instruction.new( name: :concatstrings, bin: 22, # BIN(concatstrings) len: 2, # insn_len expr: <<-EXPR, { val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num)); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 23 => Instruction.new( name: :anytostring, bin: 23, # BIN(anytostring) len: 1, # insn_len expr: <<-EXPR, { val = rb_obj_as_string_result(str, val); } EXPR declarations: ["MAYBE_UNUSED(VALUE) str, val"], preamble: [], opes: [], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}, {:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 24 => Instruction.new( name: :toregexp, bin: 24, # BIN(toregexp) len: 3, # insn_len expr: <<-EXPR, { const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt)); val = rb_reg_new_ary(ary, (int)opt); rb_ary_clear(ary); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) cnt, opt"], preamble: [], opes: [{:decl=>"rb_num_t opt", :type=>"rb_num_t", :name=>"opt"}, {:decl=>"rb_num_t cnt", :type=>"rb_num_t", :name=>"cnt"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 25 => Instruction.new( name: :intern, bin: 25, # BIN(intern) len: 1, # insn_len expr: <<-EXPR, { sym = rb_str_intern(str); } EXPR declarations: ["MAYBE_UNUSED(VALUE) str, sym"], preamble: [], opes: [], pops: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}], rets: [{:decl=>"VALUE sym", :type=>"VALUE", :name=>"sym"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 26 => Instruction.new( name: :newarray, bin: 26, # BIN(newarray) len: 2, # insn_len expr: <<-EXPR, { val = rb_ec_ary_new_from_values(ec, num, STACK_ADDR_FROM_TOP(num)); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 27 => Instruction.new( name: :newarraykwsplat, bin: 27, # BIN(newarraykwsplat) len: 2, # insn_len expr: <<-EXPR, { if (RHASH_EMPTY_P(*STACK_ADDR_FROM_TOP(1))) { val = rb_ary_new4(num-1, STACK_ADDR_FROM_TOP(num)); } else { val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num)); } } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 28 => Instruction.new( name: :duparray, bin: 28, # BIN(duparray) len: 2, # insn_len expr: <<-EXPR, { RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary)); val = rb_ary_resurrect(ary); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ary, val"], preamble: [], opes: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 29 => Instruction.new( name: :duphash, bin: 29, # BIN(duphash) len: 2, # insn_len expr: <<-EXPR, { RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1); val = rb_hash_resurrect(hash); } EXPR declarations: ["MAYBE_UNUSED(VALUE) hash, val"], preamble: [], opes: [{:decl=>"VALUE hash", :type=>"VALUE", :name=>"hash"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 30 => Instruction.new( name: :expandarray, bin: 30, # BIN(expandarray) len: 3, # insn_len expr: <<-EXPR, { vm_expandarray(GET_SP(), ary, num, (int)flag); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ary", "MAYBE_UNUSED(rb_num_t) flag, num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}, {:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}], pops: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 31 => Instruction.new( name: :concatarray, bin: 31, # BIN(concatarray) len: 1, # insn_len expr: <<-EXPR, { ary = vm_concat_array(ary1, ary2); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ary, ary1, ary2"], preamble: [], opes: [], pops: [{:decl=>"VALUE ary1", :type=>"VALUE", :name=>"ary1"}, {:decl=>"VALUE ary2", :type=>"VALUE", :name=>"ary2"}], rets: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 32 => Instruction.new( name: :splatarray, bin: 32, # BIN(splatarray) len: 2, # insn_len expr: <<-EXPR, { obj = vm_splat_array(flag, ary); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ary, flag, obj"], preamble: [], opes: [{:decl=>"VALUE flag", :type=>"VALUE", :name=>"flag"}], pops: [{:decl=>"VALUE ary", :type=>"VALUE", :name=>"ary"}], rets: [{:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 33 => Instruction.new( name: :newhash, bin: 33, # BIN(newhash) len: 2, # insn_len expr: <<-EXPR, { RUBY_DTRACE_CREATE_HOOK(HASH, num); if (num) { val = rb_hash_new_with_size(num / 2); rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val); } else { val = rb_hash_new(); } } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 34 => Instruction.new( name: :newrange, bin: 34, # BIN(newrange) len: 2, # insn_len expr: <<-EXPR, { val = rb_range_new(low, high, (int)flag); } EXPR declarations: ["MAYBE_UNUSED(VALUE) high, low, val", "MAYBE_UNUSED(rb_num_t) flag"], preamble: [], opes: [{:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}], pops: [{:decl=>"VALUE low", :type=>"VALUE", :name=>"low"}, {:decl=>"VALUE high", :type=>"VALUE", :name=>"high"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 35 => Instruction.new( name: :pop, bin: 35, # BIN(pop) len: 1, # insn_len expr: <<-EXPR, { (void)val; /* none */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 36 => Instruction.new( name: :dup, bin: 36, # BIN(dup) len: 1, # insn_len expr: <<-EXPR, { val1 = val2 = val; } EXPR declarations: ["MAYBE_UNUSED(VALUE) val, val1, val2"], preamble: [], opes: [], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [{:decl=>"VALUE val1", :type=>"VALUE", :name=>"val1"}, {:decl=>"VALUE val2", :type=>"VALUE", :name=>"val2"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 37 => Instruction.new( name: :dupn, bin: 37, # BIN(dupn) len: 2, # insn_len expr: <<-EXPR, { void *dst = GET_SP(); void *src = STACK_ADDR_FROM_TOP(n); MEMCPY(dst, src, VALUE, n); } EXPR declarations: ["MAYBE_UNUSED(rb_num_t) n"], preamble: [], opes: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}], pops: [], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 38 => Instruction.new( name: :swap, bin: 38, # BIN(swap) len: 1, # insn_len expr: <<-EXPR, { /* none */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) obj, val"], preamble: [], opes: [], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}, {:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 39 => Instruction.new( name: :opt_reverse, bin: 39, # BIN(opt_reverse) len: 2, # insn_len expr: <<-EXPR, { rb_num_t i; VALUE *sp = STACK_ADDR_FROM_TOP(n); for (i=0; i<n/2; i++) { VALUE v0 = sp[i]; VALUE v1 = TOPN(i); sp[i] = v1; TOPN(i) = v0; } } EXPR declarations: ["MAYBE_UNUSED(rb_num_t) n"], preamble: [], opes: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}], pops: [], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 40 => Instruction.new( name: :topn, bin: 40, # BIN(topn) len: 2, # insn_len expr: <<-EXPR, { val = TOPN(n); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) n"], preamble: [], opes: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 41 => Instruction.new( name: :setn, bin: 41, # BIN(setn) len: 2, # insn_len expr: <<-EXPR, { TOPN(n) = val; } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) n"], preamble: [], opes: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 42 => Instruction.new( name: :adjuststack, bin: 42, # BIN(adjuststack) len: 2, # insn_len expr: <<-EXPR, { /* none */ } EXPR declarations: ["MAYBE_UNUSED(rb_num_t) n"], preamble: [], opes: [{:decl=>"rb_num_t n", :type=>"rb_num_t", :name=>"n"}], pops: [], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 43 => Instruction.new( name: :defined, bin: 43, # BIN(defined) len: 4, # insn_len expr: <<-EXPR, { val = Qnil; if (vm_defined(ec, GET_CFP(), op_type, obj, v)) { val = pushval; } } EXPR declarations: ["MAYBE_UNUSED(VALUE) obj, pushval, v, val", "MAYBE_UNUSED(rb_num_t) op_type"], preamble: [], opes: [{:decl=>"rb_num_t op_type", :type=>"rb_num_t", :name=>"op_type"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}, {:decl=>"VALUE pushval", :type=>"VALUE", :name=>"pushval"}], pops: [{:decl=>"VALUE v", :type=>"VALUE", :name=>"v"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 44 => Instruction.new( name: :checkmatch, bin: 44, # BIN(checkmatch) len: 2, # insn_len expr: <<-EXPR, { result = vm_check_match(ec, target, pattern, flag); } EXPR declarations: ["MAYBE_UNUSED(VALUE) pattern, result, target", "MAYBE_UNUSED(rb_num_t) flag"], preamble: [], opes: [{:decl=>"rb_num_t flag", :type=>"rb_num_t", :name=>"flag"}], pops: [{:decl=>"VALUE target", :type=>"VALUE", :name=>"target"}, {:decl=>"VALUE pattern", :type=>"VALUE", :name=>"pattern"}], rets: [{:decl=>"VALUE result", :type=>"VALUE", :name=>"result"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 45 => Instruction.new( name: :checkkeyword, bin: 45, # BIN(checkkeyword) len: 3, # insn_len expr: <<-EXPR, { ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP()); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ret", "MAYBE_UNUSED(lindex_t) keyword_index, kw_bits_index"], preamble: [], opes: [{:decl=>"lindex_t kw_bits_index", :type=>"lindex_t", :name=>"kw_bits_index"}, {:decl=>"lindex_t keyword_index", :type=>"lindex_t", :name=>"keyword_index"}], pops: [], rets: [{:decl=>"VALUE ret", :type=>"VALUE", :name=>"ret"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 46 => Instruction.new( name: :checktype, bin: 46, # BIN(checktype) len: 2, # insn_len expr: <<-EXPR, { ret = RBOOL(TYPE(val) == (int)type); } EXPR declarations: ["MAYBE_UNUSED(VALUE) ret, val", "MAYBE_UNUSED(rb_num_t) type"], preamble: [], opes: [{:decl=>"rb_num_t type", :type=>"rb_num_t", :name=>"type"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [{:decl=>"VALUE ret", :type=>"VALUE", :name=>"ret"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 47 => Instruction.new( name: :defineclass, bin: 47, # BIN(defineclass) len: 4, # insn_len expr: <<-EXPR, { VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super); rb_iseq_check(class_iseq); /* enter scope */ vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass, GET_BLOCK_HANDLER(), (VALUE)vm_cref_push(ec, klass, NULL, FALSE, FALSE), ISEQ_BODY(class_iseq)->iseq_encoded, GET_SP(), ISEQ_BODY(class_iseq)->local_table_size, ISEQ_BODY(class_iseq)->stack_max); RESTORE_REGS(); NEXT_INSN(); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(ISEQ) class_iseq", "MAYBE_UNUSED(VALUE) cbase, super, val", "MAYBE_UNUSED(rb_num_t) flags"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ class_iseq", :type=>"ISEQ", :name=>"class_iseq"}, {:decl=>"rb_num_t flags", :type=>"rb_num_t", :name=>"flags"}], pops: [{:decl=>"VALUE cbase", :type=>"VALUE", :name=>"cbase"}, {:decl=>"VALUE super", :type=>"VALUE", :name=>"super"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 48 => Instruction.new( name: :definemethod, bin: 48, # BIN(definemethod) len: 3, # insn_len expr: <<-EXPR, { vm_define_method(ec, Qnil, id, (VALUE)iseq, FALSE); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(ISEQ) iseq"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}], pops: [], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 49 => Instruction.new( name: :definesmethod, bin: 49, # BIN(definesmethod) len: 3, # insn_len expr: <<-EXPR, { vm_define_method(ec, obj, id, (VALUE)iseq, TRUE); } EXPR declarations: ["MAYBE_UNUSED(ID) id", "MAYBE_UNUSED(ISEQ) iseq", "MAYBE_UNUSED(VALUE) obj"], preamble: [], opes: [{:decl=>"ID id", :type=>"ID", :name=>"id"}, {:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}], pops: [{:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 50 => Instruction.new( name: :send, bin: 50, # BIN(send) len: 3, # insn_len expr: <<-EXPR, { VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false); val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method); if (val == Qundef) { RESTORE_REGS(); NEXT_INSN(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(ISEQ) blockiseq", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 51 => Instruction.new( name: :opt_send_without_block, bin: 51, # BIN(opt_send_without_block) len: 2, # insn_len expr: <<-EXPR, { VALUE bh = VM_BLOCK_HANDLER_NONE; val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method); if (val == Qundef) { RESTORE_REGS(); NEXT_INSN(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 52 => Instruction.new( name: :objtostring, bin: 52, # BIN(objtostring) len: 2, # insn_len expr: <<-EXPR, { val = vm_objtostring(GET_ISEQ(), recv, cd); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 53 => Instruction.new( name: :opt_str_freeze, bin: 53, # BIN(opt_str_freeze) len: 3, # insn_len expr: <<-EXPR, { val = vm_opt_str_freeze(str, BOP_FREEZE, idFreeze); if (val == Qundef) { PUSH(rb_str_resurrect(str)); CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) str, val"], preamble: [], opes: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 54 => Instruction.new( name: :opt_nil_p, bin: 54, # BIN(opt_nil_p) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_nil_p(GET_ISEQ(), cd, recv); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 55 => Instruction.new( name: :opt_str_uminus, bin: 55, # BIN(opt_str_uminus) len: 3, # insn_len expr: <<-EXPR, { val = vm_opt_str_freeze(str, BOP_UMINUS, idUMinus); if (val == Qundef) { PUSH(rb_str_resurrect(str)); CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) str, val"], preamble: [], opes: [{:decl=>"VALUE str", :type=>"VALUE", :name=>"str"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 56 => Instruction.new( name: :opt_newarray_max, bin: 56, # BIN(opt_newarray_max) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_newarray_max(ec, num, STACK_ADDR_FROM_TOP(num)); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 57 => Instruction.new( name: :opt_newarray_min, bin: 57, # BIN(opt_newarray_min) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_newarray_min(ec, num, STACK_ADDR_FROM_TOP(num)); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) num"], preamble: [], opes: [{:decl=>"rb_num_t num", :type=>"rb_num_t", :name=>"num"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 58 => Instruction.new( name: :invokesuper, bin: 58, # BIN(invokesuper) len: 3, # insn_len expr: <<-EXPR, { VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true); val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super); if (val == Qundef) { RESTORE_REGS(); NEXT_INSN(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(ISEQ) blockiseq", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}, {:decl=>"ISEQ blockiseq", :type=>"ISEQ", :name=>"blockiseq"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 59 => Instruction.new( name: :invokeblock, bin: 59, # BIN(invokeblock) len: 2, # insn_len expr: <<-EXPR, { VALUE bh = VM_BLOCK_HANDLER_NONE; val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock); if (val == Qundef) { RESTORE_REGS(); NEXT_INSN(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 60 => Instruction.new( name: :leave, bin: 60, # BIN(leave) len: 1, # insn_len expr: <<-EXPR, { if (OPT_CHECKED_RUN) { const VALUE *const bp = vm_base_ptr(GET_CFP()); if (GET_SP() != bp) { vm_stack_consistency_error(ec, GET_CFP(), bp); } } if (vm_pop_frame(ec, GET_CFP(), GET_EP())) { #if OPT_CALL_THREADED_CODE rb_ec_thread_ptr(ec)->retval = val; return 0; #else return val; #endif } else { RESTORE_REGS(); } } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 61 => Instruction.new( name: :throw, bin: 61, # BIN(throw) len: 2, # insn_len expr: <<-EXPR, { val = vm_throw(ec, GET_CFP(), throw_state, throwobj); THROW_EXCEPTION(val); /* unreachable */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) throwobj, val", "MAYBE_UNUSED(rb_num_t) throw_state"], preamble: [], opes: [{:decl=>"rb_num_t throw_state", :type=>"rb_num_t", :name=>"throw_state"}], pops: [{:decl=>"VALUE throwobj", :type=>"VALUE", :name=>"throwobj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 62 => Instruction.new( name: :jump, bin: 62, # BIN(jump) len: 2, # insn_len expr: <<-EXPR, { RUBY_VM_CHECK_INTS(ec); JUMP(dst); } EXPR declarations: ["MAYBE_UNUSED(OFFSET) dst"], preamble: [], opes: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}], pops: [], rets: [], always_leaf?: false, leaf_without_check_ints?: true, handles_sp?: false, ), 63 => Instruction.new( name: :branchif, bin: 63, # BIN(branchif) len: 2, # insn_len expr: <<-EXPR, { if (RTEST(val)) { RUBY_VM_CHECK_INTS(ec); JUMP(dst); } } EXPR declarations: ["MAYBE_UNUSED(OFFSET) dst", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: true, handles_sp?: false, ), 64 => Instruction.new( name: :branchunless, bin: 64, # BIN(branchunless) len: 2, # insn_len expr: <<-EXPR, { if (!RTEST(val)) { RUBY_VM_CHECK_INTS(ec); JUMP(dst); } } EXPR declarations: ["MAYBE_UNUSED(OFFSET) dst", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: true, handles_sp?: false, ), 65 => Instruction.new( name: :branchnil, bin: 65, # BIN(branchnil) len: 2, # insn_len expr: <<-EXPR, { if (NIL_P(val)) { RUBY_VM_CHECK_INTS(ec); JUMP(dst); } } EXPR declarations: ["MAYBE_UNUSED(OFFSET) dst", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"OFFSET dst", :type=>"OFFSET", :name=>"dst"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: false, leaf_without_check_ints?: true, handles_sp?: false, ), 66 => Instruction.new( name: :once, bin: 66, # BIN(once) len: 3, # insn_len expr: <<-EXPR, { val = vm_once_dispatch(ec, iseq, ise); } EXPR declarations: ["MAYBE_UNUSED(ISE) ise", "MAYBE_UNUSED(ISEQ) iseq", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"ISEQ iseq", :type=>"ISEQ", :name=>"iseq"}, {:decl=>"ISE ise", :type=>"ISE", :name=>"ise"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: true, ), 67 => Instruction.new( name: :opt_case_dispatch, bin: 67, # BIN(opt_case_dispatch) len: 3, # insn_len expr: <<-EXPR, { OFFSET dst = vm_case_dispatch(hash, else_offset, key); if (dst) { JUMP(dst); } } EXPR declarations: ["MAYBE_UNUSED(CDHASH) hash", "MAYBE_UNUSED(OFFSET) else_offset", "MAYBE_UNUSED(VALUE) key"], preamble: [], opes: [{:decl=>"CDHASH hash", :type=>"CDHASH", :name=>"hash"}, {:decl=>"OFFSET else_offset", :type=>"OFFSET", :name=>"else_offset"}], pops: [{:decl=>"VALUE key", :type=>"VALUE", :name=>"key"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 68 => Instruction.new( name: :opt_plus, bin: 68, # BIN(opt_plus) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_plus(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 69 => Instruction.new( name: :opt_minus, bin: 69, # BIN(opt_minus) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_minus(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 70 => Instruction.new( name: :opt_mult, bin: 70, # BIN(opt_mult) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_mult(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 71 => Instruction.new( name: :opt_div, bin: 71, # BIN(opt_div) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_div(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 72 => Instruction.new( name: :opt_mod, bin: 72, # BIN(opt_mod) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_mod(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 73 => Instruction.new( name: :opt_eq, bin: 73, # BIN(opt_eq) len: 2, # insn_len expr: <<-EXPR, { val = opt_equality(GET_ISEQ(), recv, obj, cd); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 74 => Instruction.new( name: :opt_neq, bin: 74, # BIN(opt_neq) len: 3, # insn_len expr: <<-EXPR, { val = vm_opt_neq(GET_ISEQ(), cd, cd_eq, recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd, cd_eq", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd_eq", :type=>"CALL_DATA", :name=>"cd_eq"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 75 => Instruction.new( name: :opt_lt, bin: 75, # BIN(opt_lt) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_lt(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 76 => Instruction.new( name: :opt_le, bin: 76, # BIN(opt_le) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_le(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 77 => Instruction.new( name: :opt_gt, bin: 77, # BIN(opt_gt) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_gt(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 78 => Instruction.new( name: :opt_ge, bin: 78, # BIN(opt_ge) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_ge(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 79 => Instruction.new( name: :opt_ltlt, bin: 79, # BIN(opt_ltlt) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_ltlt(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 80 => Instruction.new( name: :opt_and, bin: 80, # BIN(opt_and) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_and(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 81 => Instruction.new( name: :opt_or, bin: 81, # BIN(opt_or) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_or(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 82 => Instruction.new( name: :opt_aref, bin: 82, # BIN(opt_aref) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_aref(recv, obj); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 83 => Instruction.new( name: :opt_aset, bin: 83, # BIN(opt_aset) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_aset(recv, obj, set); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj, recv, set, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE obj", :type=>"VALUE", :name=>"obj"}, {:decl=>"VALUE set", :type=>"VALUE", :name=>"set"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 84 => Instruction.new( name: :opt_aset_with, bin: 84, # BIN(opt_aset_with) len: 3, # insn_len expr: <<-EXPR, { VALUE tmp = vm_opt_aset_with(recv, key, val); if (tmp != Qundef) { val = tmp; } else { #ifndef MJIT_HEADER TOPN(0) = rb_str_resurrect(key); PUSH(val); #endif CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) key, recv, val"], preamble: [], opes: [{:decl=>"VALUE key", :type=>"VALUE", :name=>"key"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}, {:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 85 => Instruction.new( name: :opt_aref_with, bin: 85, # BIN(opt_aref_with) len: 3, # insn_len expr: <<-EXPR, { val = vm_opt_aref_with(recv, key); if (val == Qundef) { #ifndef MJIT_HEADER PUSH(rb_str_resurrect(key)); #endif CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) key, recv, val"], preamble: [], opes: [{:decl=>"VALUE key", :type=>"VALUE", :name=>"key"}, {:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 86 => Instruction.new( name: :opt_length, bin: 86, # BIN(opt_length) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_length(recv, BOP_LENGTH); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 87 => Instruction.new( name: :opt_size, bin: 87, # BIN(opt_size) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_length(recv, BOP_SIZE); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 88 => Instruction.new( name: :opt_empty_p, bin: 88, # BIN(opt_empty_p) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_empty_p(recv); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 89 => Instruction.new( name: :opt_succ, bin: 89, # BIN(opt_succ) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_succ(recv); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 90 => Instruction.new( name: :opt_not, bin: 90, # BIN(opt_not) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_not(GET_ISEQ(), cd, recv); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) recv, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE recv", :type=>"VALUE", :name=>"recv"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 91 => Instruction.new( name: :opt_regexpmatch2, bin: 91, # BIN(opt_regexpmatch2) len: 2, # insn_len expr: <<-EXPR, { val = vm_opt_regexpmatch2(obj2, obj1); if (val == Qundef) { CALL_SIMPLE_METHOD(); } } EXPR declarations: ["MAYBE_UNUSED(CALL_DATA) cd", "MAYBE_UNUSED(VALUE) obj1, obj2, val"], preamble: [], opes: [{:decl=>"CALL_DATA cd", :type=>"CALL_DATA", :name=>"cd"}], pops: [{:decl=>"VALUE obj2", :type=>"VALUE", :name=>"obj2"}, {:decl=>"VALUE obj1", :type=>"VALUE", :name=>"obj1"}], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 92 => Instruction.new( name: :invokebuiltin, bin: 92, # BIN(invokebuiltin) len: 2, # insn_len expr: <<-EXPR, { val = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc)); } EXPR declarations: ["MAYBE_UNUSED(RB_BUILTIN) bf", "MAYBE_UNUSED(VALUE) val"], preamble: [], opes: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 93 => Instruction.new( name: :opt_invokebuiltin_delegate, bin: 93, # BIN(opt_invokebuiltin_delegate) len: 3, # insn_len expr: <<-EXPR, { val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index); } EXPR declarations: ["MAYBE_UNUSED(RB_BUILTIN) bf", "MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) index"], preamble: [], opes: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}, {:decl=>"rb_num_t index", :type=>"rb_num_t", :name=>"index"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 94 => Instruction.new( name: :opt_invokebuiltin_delegate_leave, bin: 94, # BIN(opt_invokebuiltin_delegate_leave) len: 3, # insn_len expr: <<-EXPR, { val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index); /* leave fastpath */ /* TracePoint/return fallbacks this insn to opt_invokebuiltin_delegate */ if (vm_pop_frame(ec, GET_CFP(), GET_EP())) { #if OPT_CALL_THREADED_CODE rb_ec_thread_ptr(ec)->retval = val; return 0; #else return val; #endif } else { RESTORE_REGS(); } } EXPR declarations: ["MAYBE_UNUSED(RB_BUILTIN) bf", "MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(rb_num_t) index"], preamble: [], opes: [{:decl=>"RB_BUILTIN bf", :type=>"RB_BUILTIN", :name=>"bf"}, {:decl=>"rb_num_t index", :type=>"rb_num_t", :name=>"index"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: false, leaf_without_check_ints?: false, handles_sp?: false, ), 95 => Instruction.new( name: :getlocal_WC_0, bin: 95, # BIN(getlocal_WC_0) len: 2, # insn_len expr: <<-EXPR, { val = *(vm_get_ep(GET_EP(), level) - idx); RB_DEBUG_COUNTER_INC(lvar_get); (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [" const rb_num_t level = 0;"], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 96 => Instruction.new( name: :getlocal_WC_1, bin: 96, # BIN(getlocal_WC_1) len: 2, # insn_len expr: <<-EXPR, { val = *(vm_get_ep(GET_EP(), level) - idx); RB_DEBUG_COUNTER_INC(lvar_get); (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [" const rb_num_t level = 1;"], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 97 => Instruction.new( name: :setlocal_WC_0, bin: 97, # BIN(setlocal_WC_0) len: 2, # insn_len expr: <<-EXPR, { vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val); RB_DEBUG_COUNTER_INC(lvar_set); (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [" const rb_num_t level = 0;"], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 98 => Instruction.new( name: :setlocal_WC_1, bin: 98, # BIN(setlocal_WC_1) len: 2, # insn_len expr: <<-EXPR, { vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val); RB_DEBUG_COUNTER_INC(lvar_set); (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0); } EXPR declarations: ["MAYBE_UNUSED(VALUE) val", "MAYBE_UNUSED(lindex_t) idx", "MAYBE_UNUSED(rb_num_t) level"], preamble: [" const rb_num_t level = 1;"], opes: [{:decl=>"lindex_t idx", :type=>"lindex_t", :name=>"idx"}], pops: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], rets: [], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 99 => Instruction.new( name: :putobject_INT2FIX_0_, bin: 99, # BIN(putobject_INT2FIX_0_) len: 1, # insn_len expr: <<-EXPR, { /* */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [" const VALUE val = INT2FIX(0);"], opes: [], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), 100 => Instruction.new( name: :putobject_INT2FIX_1_, bin: 100, # BIN(putobject_INT2FIX_1_) len: 1, # insn_len expr: <<-EXPR, { /* */ } EXPR declarations: ["MAYBE_UNUSED(VALUE) val"], preamble: [" const VALUE val = INT2FIX(1);"], opes: [], pops: [], rets: [{:decl=>"VALUE val", :type=>"VALUE", :name=>"val"}], always_leaf?: true, leaf_without_check_ints?: false, handles_sp?: false, ), } private_constant(*constants) end
Close