From 14bda8d3c38113d32850e6f2169761d0a46fec10 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 22 Aug 2017 04:22:01 +0000 Subject: tool/instruction.rb: move logics to templates git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- template/insns_info.inc.tmpl | 58 +++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 22 deletions(-) (limited to 'template/insns_info.inc.tmpl') diff --git a/template/insns_info.inc.tmpl b/template/insns_info.inc.tmpl index c7f0094a7a..ffbe51860e 100644 --- a/template/insns_info.inc.tmpl +++ b/template/insns_info.inc.tmpl @@ -9,29 +9,39 @@ or tool/insns2vm.rb */ -<%= insn_type_chars %> +% TYPE_CHARS.each do |t, c| +#define <%=t%> '<%=c%>' +% end static const char *const insn_name_info[] = { -<%= insn_names %> +% @insns.each do |insn| + "<%= insn.name %>", +% end }; ASSERT_VM_INSTRUCTION_SIZE(insn_name_info); static const char *const insn_operand_info[] = { -<%= operands_info %> +% @insns.each do |insn| + "<% insn.opes.each {|type, _| %><%=TYPE_CHARS.fetch(op2typesig(type))%><%}%>", +% end }; ASSERT_VM_INSTRUCTION_SIZE(insn_operand_info); static const int insn_len_info[] = { -<%= operands_num_info %> +% @insns.each do |insn| + <%= insn.opes.size + 1 %>, +% end }; ASSERT_VM_INSTRUCTION_SIZE(insn_len_info); #ifdef USE_INSN_RET_NUM static const int insn_stack_push_num_info[] = { -<%= stack_num_info %> +% @insns.each do |insn| + <%= insn.rets.size %>, +% end }; ASSERT_VM_INSTRUCTION_SIZE(insn_stack_push_num_info); @@ -41,12 +51,16 @@ ASSERT_VM_INSTRUCTION_SIZE(insn_stack_push_num_info); static int insn_stack_increase(int depth, int insn, VALUE *opes) { - switch(insn){ -<%= stack_increase %> - default: - rb_bug("insn_sp_increase: unreachable"); - } - return 0; + switch (insn) { +% @insns.each do |insn| + case BIN(<%= insn.name %>): { + <%= insn.sp_increase_c_expr %> + } +% end + default: + rb_bug("insn_sp_increase: unreachable"); + } + return 0; } #endif @@ -55,37 +69,37 @@ insn_stack_increase(int depth, int insn, VALUE *opes) static int insn_len(VALUE insn) { - return insn_len_info[(int)insn]; + return insn_len_info[(int)insn]; } static const char * insn_name(VALUE insn) { - return insn_name_info[(int)insn]; + return insn_name_info[(int)insn]; } static const char * insn_op_types(VALUE insn) { - return insn_operand_info[(int)insn]; + return insn_operand_info[(int)insn]; } static int insn_op_type(VALUE insn, long pos) { - int len = insn_len(insn) - 1; - if(pos < len){ - return insn_operand_info[(int)insn][pos]; - } - else{ - return 0; - } + int len = insn_len(insn) - 1; + if (pos < len) { + return insn_operand_info[(int)insn][pos]; + } + else{ + return 0; + } } #ifdef USE_INSN_RET_NUM static int insn_ret_num(VALUE insn) { - return insn_stack_push_num_info[(int)insn]; + return insn_stack_push_num_info[(int)insn]; } #endif -- cgit v1.2.3