< prev index next >

src/hotspot/share/interpreter/templateInterpreterGenerator.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 82,100 **** } #endif // !PRODUCT { CodeletMark cm(_masm, "return entry points"); const int index_size = sizeof(u2); ! for (int i = 0; i < Interpreter::number_of_return_entries; i++) { Interpreter::_return_entry[i] = EntryPoint( ! generate_return_entry_for(itos, i, index_size), ! generate_return_entry_for(itos, i, index_size), ! generate_return_entry_for(itos, i, index_size), ! generate_return_entry_for(itos, i, index_size), generate_return_entry_for(atos, i, index_size), ! generate_return_entry_for(itos, i, index_size), generate_return_entry_for(ltos, i, index_size), generate_return_entry_for(ftos, i, index_size), generate_return_entry_for(dtos, i, index_size), generate_return_entry_for(vtos, i, index_size) ); --- 82,102 ---- } #endif // !PRODUCT { CodeletMark cm(_masm, "return entry points"); const int index_size = sizeof(u2); ! Interpreter::_return_entry[0] = EntryPoint(); ! for (int i = 1; i < Interpreter::number_of_return_entries; i++) { ! address return_itos = generate_return_entry_for(itos, i, index_size); Interpreter::_return_entry[i] = EntryPoint( ! return_itos, ! return_itos, ! return_itos, ! return_itos, generate_return_entry_for(atos, i, index_size), ! return_itos, generate_return_entry_for(ltos, i, index_size), generate_return_entry_for(ftos, i, index_size), generate_return_entry_for(dtos, i, index_size), generate_return_entry_for(vtos, i, index_size) );
*** 132,159 **** generate_earlyret_entry_for(dtos), generate_earlyret_entry_for(vtos) ); } - { CodeletMark cm(_masm, "deoptimization entry points"); - for (int i = 0; i < Interpreter::number_of_deopt_entries; i++) { - Interpreter::_deopt_entry[i] = - EntryPoint( - generate_deopt_entry_for(itos, i), - generate_deopt_entry_for(itos, i), - generate_deopt_entry_for(itos, i), - generate_deopt_entry_for(itos, i), - generate_deopt_entry_for(atos, i), - generate_deopt_entry_for(itos, i), - generate_deopt_entry_for(ltos, i), - generate_deopt_entry_for(ftos, i), - generate_deopt_entry_for(dtos, i), - generate_deopt_entry_for(vtos, i) - ); - } - } - { CodeletMark cm(_masm, "result handlers for native calls"); // The various result converter stublets. int is_generated[Interpreter::number_of_result_handlers]; memset(is_generated, 0, sizeof(is_generated)); --- 134,143 ----
*** 248,257 **** --- 232,266 ---- set_entry_points_for_all_bytes(); // installation of code in other places in the runtime // (ExcutableCodeManager calls not needed to copy the entries) set_safepoints_for_all_bytes(); + + { CodeletMark cm(_masm, "deoptimization entry points"); + Interpreter::_deopt_entry[0] = EntryPoint(); + Interpreter::_deopt_entry[0].set_entry(vtos, generate_deopt_entry_for(vtos, 0)); + for (int i = 1; i < Interpreter::number_of_deopt_entries; i++) { + address deopt_itos = generate_deopt_entry_for(itos, i); + Interpreter::_deopt_entry[i] = + EntryPoint( + deopt_itos, /* btos */ + deopt_itos, /* ztos */ + deopt_itos, /* ctos */ + deopt_itos, /* stos */ + generate_deopt_entry_for(atos, i), + deopt_itos, /* itos */ + generate_deopt_entry_for(ltos, i), + generate_deopt_entry_for(ftos, i), + generate_deopt_entry_for(dtos, i), + generate_deopt_entry_for(vtos, i) + ); + } + address return_continuation = Interpreter::_normal_table.entry(Bytecodes::_return).entry(vtos); + vmassert(return_continuation != NULL, "return entry not generated yet"); + Interpreter::_deopt_reexecute_return_entry = generate_deopt_entry_for(vtos, 0, return_continuation); + } + } //------------------------------------------------------------------------------------------------------------------------ address TemplateInterpreterGenerator::generate_error_exit(const char* msg) {
< prev index next >