/* * Copyright (c) 2000, 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. *
*/
// This class is responsible of mapping items (locals, monitors, spill // slots and registers) to their frame location // // The monitors are specified by a consecutive index, although each monitor entry // occupies two words. The monitor_index is 0.._num_monitors // The spill index is similar to local index; it is in range 0..(open) // // The CPU registers are mapped using a fixed table; register with number 0 // is the most used one.
// stack grow direction --> SP // +----------+---+----------+-------+------------------------+-----+ // |arguments | x | monitors | spill | reserved argument area | ABI | // +----------+---+----------+-------+------------------------+-----+ // // x = ABI area (SPARC) or return address and link (i486) // ABI = ABI area (SPARC) or nothing (i486)
class FrameMap : public CompilationResourceObj { public: enum {
nof_cpu_regs = pd_nof_cpu_regs_frame_map,
nof_fpu_regs = pd_nof_fpu_regs_frame_map,
// platform dependent hook used to check that frame is properly // addressable on the platform. Used by arm, ppc to verify that all // stack addresses are valid. bool validate_frame();
// for outgoing calls, these also update the reserved area to // include space for arguments and any ABI area.
CallingConvention* c_calling_convention(const BasicTypeArray* signature);
CallingConvention* java_calling_convention(const BasicTypeArray* signature, bool outgoing);
// deopt support
ByteSize sp_offset_for_orig_pc() { return sp_offset_for_monitor_base(_num_monitors); }
// Creates Location describing desired slot and returns it via pointer // to Location object. Returns true if the stack frame offset was legal // (as defined by Location::legal_offset_in_bytes()), false otherwise. // Do not use the returned location if this returns false. bool location_for_sp_offset(ByteSize byte_offset_from_sp,
Location::Type loc_type, Location* loc) const;
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.