зеркало из https://github.com/github/ruby.git
72 строки
1.6 KiB
Plaintext
72 строки
1.6 KiB
Plaintext
/* -*- C -*- */
|
|
|
|
%# Copyright (c) 2017 Urabe, Shyouhei. All rights reserved.
|
|
%#
|
|
%# This file is a part of the programming language Ruby. Permission is hereby
|
|
%# granted, to either redistribute and/or modify this file, provided that the
|
|
%# conditions mentioned in the file COPYING are met. Consult the file for
|
|
%# details.
|
|
<%= render 'copyright' -%>
|
|
<%= render 'notice', locals: {
|
|
this_file: 'is for threaded code',
|
|
edit: __FILE__,
|
|
} -%>
|
|
|
|
static INSN *
|
|
insn_operands_unification(INSN *iobj)
|
|
{
|
|
#ifdef OPT_OPERANDS_UNIFICATION
|
|
VALUE *op = iobj->operands;
|
|
|
|
switch (iobj->insn_id) {
|
|
default:
|
|
/* do nothing */;
|
|
break;
|
|
|
|
% RubyVM::OperandsUnifications.each_group do |orig, unifs|
|
|
case <%= orig.bin %>:
|
|
% unifs.each do |insn|
|
|
|
|
/* <%= insn.pretty_name %> */
|
|
if ( <%= insn.condition('op') %> ) {
|
|
% insn.opes.each_with_index do |o, x|
|
|
% n = insn.operand_shift_of(o)
|
|
% if n != 0 then
|
|
op[<%= x %>] = op[<%= x + n %>];
|
|
% end
|
|
% end
|
|
iobj->insn_id = <%= insn.bin %>;
|
|
iobj->operand_size = <%= insn.opes.size %>;
|
|
break;
|
|
}
|
|
% end
|
|
|
|
break;
|
|
% end
|
|
}
|
|
#endif
|
|
return iobj;
|
|
}
|
|
|
|
int
|
|
rb_insn_unified_local_var_level(VALUE insn)
|
|
{
|
|
#ifdef OPT_OPERANDS_UNIFICATION
|
|
/* optimize rule */
|
|
switch (insn) {
|
|
default:
|
|
return -1; /* do nothing */;
|
|
% RubyVM::OperandsUnifications.each_group do |orig, unifs|
|
|
% unifs.each do|insn|
|
|
case <%= insn.bin %>:
|
|
% insn.spec.map{|(var,val)|val}.reject{|i| i == '*' }.each do |val|
|
|
return <%= val %>;
|
|
% break
|
|
% end
|
|
% end
|
|
% end
|
|
}
|
|
#endif
|
|
return -1;
|
|
}
|