Path: blob/master/src/hotspot/cpu/aarch64/foreign_globals_aarch64.cpp
40930 views
/*1* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.2* Copyright (c) 2019, Arm Limited. All rights reserved.3* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.4*5* This code is free software; you can redistribute it and/or modify it6* under the terms of the GNU General Public License version 2 only, as7* published by the Free Software Foundation.8*9* This code is distributed in the hope that it will be useful, but WITHOUT10* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or11* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License12* version 2 for more details (a copy is included in the LICENSE file that13* accompanied this code).14*15* You should have received a copy of the GNU General Public License version16* 2 along with this work; if not, write to the Free Software Foundation,17* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.18*19* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA20* or visit www.oracle.com if you need additional information or have any21* questions.22*/2324#include "precompiled.hpp"25#include "runtime/jniHandles.hpp"26#include "runtime/jniHandles.inline.hpp"27#include "oops/typeArrayOop.inline.hpp"28#include "prims/foreign_globals.hpp"29#include "prims/foreign_globals.inline.hpp"3031bool ABIDescriptor::is_volatile_reg(Register reg) const {32return _integer_argument_registers.contains(reg)33|| _integer_additional_volatile_registers.contains(reg);34}3536bool ABIDescriptor::is_volatile_reg(FloatRegister reg) const {37return _vector_argument_registers.contains(reg)38|| _vector_additional_volatile_registers.contains(reg);39}4041#define INTEGER_TYPE 042#define VECTOR_TYPE 14344const ABIDescriptor ForeignGlobals::parse_abi_descriptor_impl(jobject jabi) const {45oop abi_oop = JNIHandles::resolve_non_null(jabi);46ABIDescriptor abi;4748objArrayOop inputStorage = cast<objArrayOop>(abi_oop->obj_field(ABI.inputStorage_offset));49loadArray(inputStorage, INTEGER_TYPE, abi._integer_argument_registers, as_Register);50loadArray(inputStorage, VECTOR_TYPE, abi._vector_argument_registers, as_FloatRegister);5152objArrayOop outputStorage = cast<objArrayOop>(abi_oop->obj_field(ABI.outputStorage_offset));53loadArray(outputStorage, INTEGER_TYPE, abi._integer_return_registers, as_Register);54loadArray(outputStorage, VECTOR_TYPE, abi._vector_return_registers, as_FloatRegister);5556objArrayOop volatileStorage = cast<objArrayOop>(abi_oop->obj_field(ABI.volatileStorage_offset));57loadArray(volatileStorage, INTEGER_TYPE, abi._integer_additional_volatile_registers, as_Register);58loadArray(volatileStorage, VECTOR_TYPE, abi._vector_additional_volatile_registers, as_FloatRegister);5960abi._stack_alignment_bytes = abi_oop->int_field(ABI.stackAlignment_offset);61abi._shadow_space_bytes = abi_oop->int_field(ABI.shadowSpace_offset);6263return abi;64}6566const BufferLayout ForeignGlobals::parse_buffer_layout_impl(jobject jlayout) const {67oop layout_oop = JNIHandles::resolve_non_null(jlayout);68BufferLayout layout;6970layout.stack_args_bytes = layout_oop->long_field(BL.stack_args_bytes_offset);71layout.stack_args = layout_oop->long_field(BL.stack_args_offset);72layout.arguments_next_pc = layout_oop->long_field(BL.arguments_next_pc_offset);7374typeArrayOop input_offsets = cast<typeArrayOop>(layout_oop->obj_field(BL.input_type_offsets_offset));75layout.arguments_integer = (size_t) input_offsets->long_at(INTEGER_TYPE);76layout.arguments_vector = (size_t) input_offsets->long_at(VECTOR_TYPE);7778typeArrayOop output_offsets = cast<typeArrayOop>(layout_oop->obj_field(BL.output_type_offsets_offset));79layout.returns_integer = (size_t) output_offsets->long_at(INTEGER_TYPE);80layout.returns_vector = (size_t) output_offsets->long_at(VECTOR_TYPE);8182layout.buffer_size = layout_oop->long_field(BL.size_offset);8384return layout;85}8687const CallRegs ForeignGlobals::parse_call_regs_impl(jobject jconv) const {88ShouldNotCallThis();89return {};90}919293