/* * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2017 SAP SE. 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. *
*/
// This file specializes the assembler with interpreter-specific macros.
class InterpreterMacroAssembler: public MacroAssembler {
protected: // Interpreter specific version of call_VM_base(). virtualvoid call_VM_leaf_base(address entry_point); virtualvoid call_VM_leaf_base(address entry_point, bool allow_relocation);
// Helper routine for frame allocation/deallocation. // Compute the delta by which the caller's SP has to // be adjusted to accommodate for the non-argument locals. void compute_extra_locals_size_in_bytes(Register args_size, Register locals_size, Register delta);
// dispatch routines 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 normal table via Z_bytecode (assume Z_bytecode is loaded already). void dispatch_only_normal(TosState state); void dispatch_normal(TosState state); void dispatch_next(TosState state, int step = 0, bool generate_poll = false); void dispatch_next_noverify_oop(TosState state, int step = 0); void dispatch_via(TosState state, address* table);
void narrow(Register result, Register ret_type);
// Jump to an invoked target. void prepare_to_jump_from_interpreted(Register method); void jump_from_interpreted(Register method, Register temp);
// Removes the current activation (incl. unlocking of monitors). // Additionally this code is used for earlyReturn in which case we // want to skip throwing an exception and installing an exception. void remove_activation(TosState state, Register return_pc, bool throw_monitor_exception = true, bool install_monitor_exception = true, bool notify_jvmti = true);
// Generate a subtype check: branch to ok_is_subtype if sub_klass is // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3. void gen_subtype_check(Register sub_klass, Register super_klass, Register tmp1, Register tmp2, Label &ok_is_subtype);
void push_i( Register r = Z_tos); void push_ptr( Register r = Z_tos); void push_l( Register r = Z_tos); void push_f(FloatRegister f = Z_ftos); void push_d(FloatRegister f = Z_ftos);
// Helpers for swap and dup. void load_ptr(int n, Register val); void store_ptr(int n, Register val);
void pop (TosState state); // transition vtos -> state void push(TosState state); // transition state -> vtos void empty_expression_stack(void);
#ifdef ASSERT void verify_sp(Register Rsp, Register Rtemp); void verify_esp(Register Resp, Register Rtemp); // Verify that Resp points to a word in the operand stack. #endif// ASSERT
Address first_local_in_stack(); staticint top_most_monitor_byte_offset(); // Offset in bytes to top of monitor block.
Address top_most_monitor(); void compute_stack_base(Register Rdest);
// support for JVMTI/Dtrace typedefenum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode; void notify_method_entry(); void notify_method_exit(bool native_method, TosState state, NotifyMethodExitMode mode);
// Pop the topmost TOP_IJAVA_FRAME and set it's sender_sp as new Z_SP. // The return pc is loaded into the Register return_pc. void pop_interpreter_frame(Register return_pc, Register tmp1, Register tmp2);
};
#endif// CPU_S390_INTERP_MASM_S390_HPP
¤ Dauer der Verarbeitung: 0.25 Sekunden
(vorverarbeitet)
¤
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.