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