2007-02-02 18:21:41 +03:00
|
|
|
/* -*-c-*- *********************************************************/
|
|
|
|
/*******************************************************************/
|
|
|
|
/*******************************************************************/
|
|
|
|
/**
|
|
|
|
This file is for threaded code.
|
2008-12-09 10:14:13 +03:00
|
|
|
|
2007-02-02 18:21:41 +03:00
|
|
|
----
|
|
|
|
This file is auto generated by insns2vm.rb
|
|
|
|
DO NOT TOUCH!
|
|
|
|
|
|
|
|
If you want to fix something, you must edit 'template/optinsn.inc.tmpl'
|
2014-04-17 10:53:05 +04:00
|
|
|
or tool/insns2vm.rb
|
2007-02-02 18:21:41 +03:00
|
|
|
*/
|
|
|
|
|
|
|
|
static INSN *
|
2017-08-22 07:22:01 +03:00
|
|
|
insn_operands_unification(INSN *insnobj)
|
|
|
|
{
|
2007-02-02 18:21:41 +03:00
|
|
|
#ifdef OPT_OPERANDS_UNIFICATION
|
2017-08-22 07:22:01 +03:00
|
|
|
/* 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
|
2007-02-02 18:21:41 +03:00
|
|
|
|
2017-08-22 07:22:01 +03:00
|
|
|
default:
|
|
|
|
/* do nothing */;
|
|
|
|
break;
|
|
|
|
}
|
2007-02-02 18:21:41 +03:00
|
|
|
#endif
|
2017-08-22 07:22:01 +03:00
|
|
|
return insnobj;
|
2007-02-02 18:21:41 +03:00
|
|
|
}
|
|
|
|
|