ruby/template/optunifs.inc.tmpl

68 строки
1.6 KiB
C

/* -*-c-*- *********************************************************/
/*******************************************************************/
/*******************************************************************/
/**
This file is for threaded code.
----
This file is auto generated by insns2vm.rb
DO NOT TOUCH!
If you want to fix something, you must edit 'template/optunifs.inc.tmpl'
or tool/insns2vm.rb
*/
/*
static const int UNIFIED_insn_name_1[] = {id, size, ...};
static const int UNIFIED_insn_name_2[] = {id, size, ...};
...
static const int *const UNIFIED_insn_name[] = {size,
UNIFIED_insn_name_1,
UNIFIED_insn_name_2, ...};
...
static const int *const *const unified_insns_data[] = {
UNIFIED_insn_nameA,
UNIFIED_insn_nameB, ...};
*/
% 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
ASSERT_VM_INSTRUCTION_SIZE(unified_insns_data);