/* * Copyright (c) 2008, 2022, 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. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
// Template interpreter specific version of call_VM_helper virtualvoid call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions);
// base routine for all dispatches typedefenum { DispatchDefault, DispatchNormal } DispatchTableMode; void dispatch_base(TosState state, DispatchTableMode table_mode, bool verifyoop = true, bool generate_poll = false);
// Converts return value in R0/R1 (interpreter calling conventions) to TOS cached value. void convert_retval_to_tos(TosState state); // Converts TOS cached value to return value in R0/R1 (according to interpreter calling conventions). void convert_tos_to_retval(TosState state);
// JVMTI ForceEarlyReturn support void load_earlyret_value(TosState state);
// Helpers for swap and dup void load_ptr(int n, Register val); void store_ptr(int n, Register val);
// Generate a subtype check: branch to not_subtype if sub_klass is // not a subtype of super_klass. // Profiling code for the subtype check failure (profile_typecheck_failed) // should be explicitly generated by the caller in the not_subtype case. // Blows Rtemp, tmp1, tmp2. void gen_subtype_check(Register Rsub_klass, Register Rsuper_klass,
Label ¬_subtype, Register tmp1, Register tmp2);
// Dispatching void dispatch_prolog(TosState state, int step = 0); void dispatch_epilog(TosState state, int step = 0); void dispatch_only(TosState state, bool generate_poll = false); // dispatch by R3_bytecode void dispatch_only_normal(TosState state); // dispatch normal table by R3_bytecode void dispatch_only_noverify(TosState state); void dispatch_next(TosState state, int step = 0, bool generate_poll = false); // load R3_bytecode from [Rbcp + step] and dispatch by R3_bytecode
// jump to an invoked target void prepare_to_jump_from_interpreted(); void jump_from_interpreted(Register method);
void narrow(Register result);
// Returning from interpreted functions // // Removes the current activation (incl. unlocking of monitors) // and sets up the return address. This code is also used for // exception unwindwing. In that case, we do not want to throw // IllegalMonitorStateExceptions, since that might get us into an // infinite rethrow exception loop. // Additionally this code is used for popFrame and earlyReturn. // In popFrame case we want to skip throwing an exception, // installing an exception, and notifying jvmdi. // In earlyReturn case we only want to skip throwing an exception // and installing an exception. void remove_activation(TosState state, Register ret_addr, bool throw_monitor_exception = true, bool install_monitor_exception = true, bool notify_jvmdi = true);
// At certain points in the method invocation the monitor of // synchronized methods hasn't been entered yet. // To correctly handle exceptions at these points, we set the thread local // variable _do_not_unlock_if_synchronized to true. The remove_activation will // check this flag. void set_do_not_unlock_if_synchronized(bool flag, Register tmp);
// Debugging void interp_verify_oop(Register reg, TosState state, constchar* file, int line); // only if +VerifyOops && state == atos
void verify_FPU(int stack_depth, TosState state = ftos) { // No VFP state verification is required for ARM
}
// Sets mdp. Blows reg_tmp1, reg_tmp2. Index could be the same as reg_tmp2. void profile_switch_case(Register mdp, Register index, Register reg_tmp1, Register reg_tmp2);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.