summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb')
-rw-r--r--tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb39
1 files changed, 39 insertions, 0 deletions
diff --git a/tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb b/tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb
new file mode 100644
index 0000000000..16c10a9928
--- /dev/null
+++ b/tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb
@@ -0,0 +1,39 @@
+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 = {
+% RubyVM::Instructions.each_with_index do |insn, i|
+ <%= i %> => Instruction.new(
+ name: :<%= insn.name %>,
+ bin: <%= i %>, # BIN(<%= insn.name %>)
+ len: <%= insn.width %>, # insn_len
+% unless insn.name.start_with?('trace_')
+ 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
+ ),
+% end
+ }
+end