1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/tool/ruby_vm/views/optinsn.inc.erb
shyouhei 069e9ff52c tool/ruby_vm support for pre-2.3 BASERUBY
as requested by devs, support for BASERUBY prior to 2.3

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61785 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-12 08:38:10 +00:00

71 lines
1.7 KiB
Text

/* -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*- */
%# 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;
}