/* -*- 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; }