< prev index next >

src/hotspot/cpu/aarch64/foreignGlobals_aarch64.cpp

Print this page

 33 #include "utilities/formatBuffer.hpp"
 34 
 35 bool ForeignGlobals::is_foreign_linker_supported() {
 36   return true;
 37 }
 38 
 39 bool ABIDescriptor::is_volatile_reg(Register reg) const {
 40   return _integer_argument_registers.contains(reg)
 41     || _integer_additional_volatile_registers.contains(reg);
 42 }
 43 
 44 bool ABIDescriptor::is_volatile_reg(FloatRegister reg) const {
 45     return _vector_argument_registers.contains(reg)
 46         || _vector_additional_volatile_registers.contains(reg);
 47 }
 48 
 49 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
 50   oop abi_oop = JNIHandles::resolve_non_null(jabi);
 51   ABIDescriptor abi;
 52 
 53   objArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
 54   parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
 55   parse_register_array(inputStorage, StorageType::VECTOR, abi._vector_argument_registers, as_FloatRegister);
 56 
 57   objArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
 58   parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
 59   parse_register_array(outputStorage, StorageType::VECTOR, abi._vector_return_registers, as_FloatRegister);
 60 
 61   objArrayOop volatileStorage = jdk_internal_foreign_abi_ABIDescriptor::volatileStorage(abi_oop);
 62   parse_register_array(volatileStorage, StorageType::INTEGER, abi._integer_additional_volatile_registers, as_Register);
 63   parse_register_array(volatileStorage, StorageType::VECTOR, abi._vector_additional_volatile_registers, as_FloatRegister);
 64 
 65   abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
 66   abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
 67 
 68   abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
 69   abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
 70 
 71   return abi;
 72 }
 73 
 74 int RegSpiller::pd_reg_size(VMStorage reg) {
 75   if (reg.type() == StorageType::INTEGER) {
 76     return 8;
 77   } else if (reg.type() == StorageType::VECTOR) {
 78     return 16;   // Always spill/unspill Q registers
 79   }
 80   return 0; // stack and BAD
 81 }

 33 #include "utilities/formatBuffer.hpp"
 34 
 35 bool ForeignGlobals::is_foreign_linker_supported() {
 36   return true;
 37 }
 38 
 39 bool ABIDescriptor::is_volatile_reg(Register reg) const {
 40   return _integer_argument_registers.contains(reg)
 41     || _integer_additional_volatile_registers.contains(reg);
 42 }
 43 
 44 bool ABIDescriptor::is_volatile_reg(FloatRegister reg) const {
 45     return _vector_argument_registers.contains(reg)
 46         || _vector_additional_volatile_registers.contains(reg);
 47 }
 48 
 49 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
 50   oop abi_oop = JNIHandles::resolve_non_null(jabi);
 51   ABIDescriptor abi;
 52 
 53   refArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
 54   parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
 55   parse_register_array(inputStorage, StorageType::VECTOR, abi._vector_argument_registers, as_FloatRegister);
 56 
 57   refArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
 58   parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
 59   parse_register_array(outputStorage, StorageType::VECTOR, abi._vector_return_registers, as_FloatRegister);
 60 
 61   refArrayOop volatileStorage = jdk_internal_foreign_abi_ABIDescriptor::volatileStorage(abi_oop);
 62   parse_register_array(volatileStorage, StorageType::INTEGER, abi._integer_additional_volatile_registers, as_Register);
 63   parse_register_array(volatileStorage, StorageType::VECTOR, abi._vector_additional_volatile_registers, as_FloatRegister);
 64 
 65   abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
 66   abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
 67 
 68   abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
 69   abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
 70 
 71   return abi;
 72 }
 73 
 74 int RegSpiller::pd_reg_size(VMStorage reg) {
 75   if (reg.type() == StorageType::INTEGER) {
 76     return 8;
 77   } else if (reg.type() == StorageType::VECTOR) {
 78     return 16;   // Always spill/unspill Q registers
 79   }
 80   return 0; // stack and BAD
 81 }
< prev index next >