module RubyVM::MJIT Instruction = Struct.new( :name, :bin, :len, :expr, :declarations, :preamble, :opes, :pops, :rets, :always_leaf?, :leaf_without_check_ints?, :handles_sp?, ) INSNS = { % RubyVM::Instructions.each_with_index do |insn, i| % next if insn.name.start_with?('trace_') <%= i %> => Instruction.new( name: :<%= insn.name %>, bin: <%= i %>, # BIN(<%= insn.name %>) len: <%= insn.width %>, # insn_len expr: <<-EXPR, <%= insn.expr.expr.dump.sub(/\A"/, '').sub(/"\z/, '').gsub(/\\n/, "\n").gsub(/\\t/, ' ' * 8) %> EXPR declarations: <%= insn.declarations.inspect %>, preamble: <%= insn.preamble.map(&:expr).inspect %>, opes: <%= insn.opes.inspect %>, pops: <%= insn.pops.inspect %>, rets: <%= insn.rets.inspect %>, always_leaf?: <%= insn.always_leaf? %>, leaf_without_check_ints?: <%= insn.leaf_without_check_ints? %>, handles_sp?: <%= insn.handles_sp? %>, ), % end } private_constant(*constants) end