summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/views/_mjit_compile_send_guard.erb
blob: 7bdb2a3ebfdce2a4230f10da2e2ca77c3e9103ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% # 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: Invalidate call cache if it requires vm_search_method. This allows to inline some of following things.
            fprintf(f, "    if (UNLIKELY(GET_GLOBAL_METHOD_STATE() != %"PRI_SERIALT_PREFIX"u ||\n", cc->method_state);
            fprintf(f, "        RCLASS_SERIAL(CLASS_OF(stack[%d])) != %"PRI_SERIALT_PREFIX"u)) {\n", b->stack_size - 1 - argc, cc->class_serial);
            fprintf(f, "        reg_cfp->pc = original_body_iseq + %d;\n", pos);
            fprintf(f, "        reg_cfp->sp = (VALUE *)reg_cfp->bp + %d;\n", b->stack_size + 1);
            fprintf(f, "        goto cancel;\n");
            fprintf(f, "    }\n");