mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
324b6d306d
* iseq.c (rb_insn_operand_intern): show local variable operand name in unified instructions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60732 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
78 lines
1.7 KiB
C
78 lines
1.7 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;
|
|
}
|
|
|
|
int
|
|
rb_insn_unified_local_var_level(VALUE insn)
|
|
{
|
|
#ifdef OPT_OPERANDS_UNIFICATION
|
|
/* optimize rule */
|
|
switch (insn) {
|
|
% opt_insns_map.each do |originsn, optinsns|
|
|
% optinsns.each {|opti|
|
|
case BIN(<%=opti.name%>):
|
|
% opti.defopes.each {|opinfo|
|
|
% next if opinfo[1] == '*'
|
|
return <%=opinfo[1]%>;
|
|
% break
|
|
% }
|
|
% }
|
|
% end
|
|
|
|
default:
|
|
/* do nothing */;
|
|
break;
|
|
}
|
|
#endif
|
|
return -1;
|
|
}
|