summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb
blob: 6004504c060974a5fcf2f1d6f14d70479f5c7c6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% # Copyright (c) 2018 Takashi Kokubun.  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.
%
% # JIT: Move pc so that catch table lookup condition is met. If the ISeq might not catch an exception,
% # the pc motion is optimized away and thus pc should be set properly before `goto cancel`.
        if (body->catch_except_p) {
            fprintf(f, "    reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
        }
%
% # JIT: move sp to use or preserve stack variables
        fprintf(f, "    reg_cfp->sp = (VALUE *)reg_cfp->bp + %d;\n", b->stack_size + 1 - <%= insn.pops.size %>); /* POPN(INSN_ATTR(popn)); */