/
githubmirror
/
panama-vector
Обзор
Документация
Войти
/
githubmirror
/
panama-vector
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/hotspot/cpu/zero/frame_zero.hpp
94 строки
3 KB
David Simms
8389219: Implement JEP 401: Value Objects (Preview)
31 июл 2026, 03:45
31 июл 2026, 03:45
cc278db
Код
Авторство
О чём код?
/* * Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc. * 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. * */ #ifndef CPU_ZERO_FRAME_ZERO_HPP #define CPU_ZERO_FRAME_ZERO_HPP // A frame represents a physical stack frame on the Zero stack. public: enum { metadata_words = 0, // size, in words, of metadata at frame bottom, i.e. it is not part of the // caller/callee overlap metadata_words_at_bottom = metadata_words, // size, in words, of frame metadata at the frame top, i.e. it is located // between a callee frame and its stack arguments, where it is part // of the caller/callee overlap metadata_words_at_top = 0, // in bytes frame_alignment = 16, // size, in words, of maximum shift in frame position due to alignment align_wiggle = 1 }; // Constructor public: frame(ZeroFrame* zeroframe, intptr_t* sp); private: ZeroFrame* _zeroframe; public: const ZeroFrame *zeroframe() const { return _zeroframe; } intptr_t* fp() const { return (intptr_t *) zeroframe(); } inline interpreterState get_interpreterState() const; public: const EntryFrame *zero_entryframe() const { return zeroframe()->as_entry_frame(); } const InterpreterFrame *zero_interpreterframe() const { return zeroframe()->as_interpreter_frame(); } public: bool is_fake_stub_frame() const; public: frame sender_for_nonentry_frame(RegisterMap* map) const; public: void zero_print_on_error(int index, outputStream* st, char* buf, int buflen) const; inline address* sender_pc_addr() const; template <typename RegisterMapT> static void update_map_with_saved_link(RegisterMapT* map, intptr_t** link_addr); intptr_t* repair_sender_sp(intptr_t* sender_sp, intptr_t** saved_fp_addr) const; static intptr_t* repair_sender_sp(nmethod* nm, intptr_t* sp, intptr_t** saved_fp_addr); bool was_augmented_on_entry(int& real_size) const; #endif // CPU_ZERO_FRAME_ZERO_HPP