diff options
Diffstat (limited to 'template/optunifs.inc.tmpl')
-rw-r--r-- | template/optunifs.inc.tmpl | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/template/optunifs.inc.tmpl b/template/optunifs.inc.tmpl index 63ac4d85ca..3ac5872346 100644 --- a/template/optunifs.inc.tmpl +++ b/template/optunifs.inc.tmpl @@ -27,9 +27,40 @@ UNIFIED_insn_nameB, ...}; */ -<%= unif_insns_each %> -<%= unif_insns %> -<%= unif_insns_data %> +% unif_insns_data = @insns.find_all {|insn| !insn.is_sc}.map do |insn| +% size = insn.unifs.size +% if size > 0 +% name = "UNIFIED_#{insn.name}" +% insn.unifs.sort_by{|unif| -unif[1].size}.each_with_index do |(uni_insn, uni_insns), i| +% uni_insns = uni_insns[1..-1] +static const int <%=name%>_<%=i%>[] = { + BIN(<%=uni_insn.name%>), <%=uni_insns.size + 2%>, + <% uni_insns.map{|e| -%> +BIN(<%=e.name%>),<% -%> +% } + +}; +% end + +static const int *const <%=name%>[] = {(int *)<%=size+1%>, +% size.times do |e| + <%=name%>_<%=e%>, +% end +}; +% name +% end +% end + +static const int *const *const unified_insns_data[] = {<%#-%> +% unif_insns_data.each_with_index do |insn, i| +% if (i%8).zero? + + <% -%> +% end + <%=insn || "0"%>,<%#-%> +% end + +}; #undef GET_INSN_NAME |