< prev index next >

src/hotspot/cpu/riscv/foreignGlobals_riscv.cpp

Print this page

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

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