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) {
|