зеркало из https://github.com/github/ruby.git
55 строки
1.3 KiB
C
55 строки
1.3 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/optinsn.inc.tmpl'
|
|
or tool/insns2vm.rb
|
|
*/
|
|
|
|
static INSN *
|
|
insn_operands_unification(INSN *insnobj)
|
|
{
|
|
#ifdef OPT_OPERANDS_UNIFICATION
|
|
/* optimize rule */
|
|
switch(insnobj->insn_id){
|
|
% opt_insns_map.each do |originsn, optinsns|
|
|
case BIN(<%=originsn.name%>):
|
|
% optinsns.each {|opti|
|
|
if (
|
|
% opti.defopes.each_with_index {|opinfo, i|
|
|
% next if opinfo[1] == '*'
|
|
insnobj->operands[<%=i%>] == <%=val_as_type(opinfo)%> &&
|
|
% }
|
|
1) {
|
|
% idx = 0
|
|
% opti.defopes.each_with_index {|opinfo, n|
|
|
% if opinfo[1] == '*'
|
|
% if idx != n
|
|
insnobj->operands[<%=idx%>] = insnobj->operands[<%=n%>];
|
|
% end
|
|
% idx += 1
|
|
% end
|
|
% }
|
|
insnobj->insn_id = BIN(<%=opti.name%>);
|
|
insnobj->operand_size = <%=idx%>;
|
|
break;
|
|
}
|
|
% }
|
|
break;
|
|
% end
|
|
|
|
default:
|
|
/* do nothing */;
|
|
break;
|
|
}
|
|
#endif
|
|
return insnobj;
|
|
}
|
|
|