зеркало из https://github.com/github/ruby.git
68 строки
1.6 KiB
C
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);
|