diff options
Diffstat (limited to 'tool/ruby_vm/views')
-rw-r--r-- | tool/ruby_vm/views/_leaf_helpers.erb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tool/ruby_vm/views/_leaf_helpers.erb b/tool/ruby_vm/views/_leaf_helpers.erb index 1735db2196..ed2b5dec49 100644 --- a/tool/ruby_vm/views/_leaf_helpers.erb +++ b/tool/ruby_vm/views/_leaf_helpers.erb @@ -10,6 +10,31 @@ #include "iseq.h" +extern const bool rb_vm_insn_leaf_p[]; + +#ifdef RUBY_VM_INSNS_INFO +const bool rb_vm_insn_leaf_p[] = { +% RubyVM::Instructions.each_slice(20) do |insns| + <%= insns.map do |insn| + if insn.is_a?(RubyVM::BareInstructions) + insn.always_leaf? ? '1' : '0' + else + '0' + end + end.join(', ') + %>, +% end +}; +#endif + +CONSTFUNC(MAYBE_UNUSED(static bool insn_leaf_p(VALUE insn))); + +bool +insn_leaf_p(VALUE insn) +{ + return rb_vm_insn_leaf_p[insn]; +} + // This is used to tell MJIT that this insn would be leaf if CHECK_INTS didn't exist. // It should be used only when RUBY_VM_CHECK_INTS is directly written in insns.def. static bool leafness_of_check_ints = false; |