27 #include "runtime/jniHandles.hpp"
28 #include "runtime/jniHandles.inline.hpp"
29 #include "oops/typeArrayOop.inline.hpp"
30 #include "oops/oopCast.inline.hpp"
31 #include "prims/foreignGlobals.hpp"
32 #include "prims/foreignGlobals.inline.hpp"
33 #include "prims/vmstorage.hpp"
34 #include "utilities/formatBuffer.hpp"
35
36 #define __ masm->
37
38 bool ForeignGlobals::is_foreign_linker_supported() {
39 return true;
40 }
41
42 // Stubbed out, implement later
43 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
44 oop abi_oop = JNIHandles::resolve_non_null(jabi);
45 ABIDescriptor abi;
46
47 objArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
48 parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
49 parse_register_array(inputStorage, StorageType::FLOAT, abi._float_argument_registers, as_FloatRegister);
50
51 objArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
52 parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
53 parse_register_array(outputStorage, StorageType::FLOAT, abi._float_return_registers, as_FloatRegister);
54
55 abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
56 abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
57
58 abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
59 abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
60
61 return abi;
62 }
63
64 int RegSpiller::pd_reg_size(VMStorage reg) {
65 if (reg.type() == StorageType::INTEGER || reg.type() == StorageType::FLOAT) {
66 return 8;
67 }
68 return 0; // stack and BAD
69 }
70
71 void RegSpiller::pd_store_reg(MacroAssembler* masm, int offset, VMStorage reg) {
|
27 #include "runtime/jniHandles.hpp"
28 #include "runtime/jniHandles.inline.hpp"
29 #include "oops/typeArrayOop.inline.hpp"
30 #include "oops/oopCast.inline.hpp"
31 #include "prims/foreignGlobals.hpp"
32 #include "prims/foreignGlobals.inline.hpp"
33 #include "prims/vmstorage.hpp"
34 #include "utilities/formatBuffer.hpp"
35
36 #define __ masm->
37
38 bool ForeignGlobals::is_foreign_linker_supported() {
39 return true;
40 }
41
42 // Stubbed out, implement later
43 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
44 oop abi_oop = JNIHandles::resolve_non_null(jabi);
45 ABIDescriptor abi;
46
47 refArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
48 parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
49 parse_register_array(inputStorage, StorageType::FLOAT, abi._float_argument_registers, as_FloatRegister);
50
51 refArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
52 parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
53 parse_register_array(outputStorage, StorageType::FLOAT, abi._float_return_registers, as_FloatRegister);
54
55 abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
56 abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
57
58 abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
59 abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
60
61 return abi;
62 }
63
64 int RegSpiller::pd_reg_size(VMStorage reg) {
65 if (reg.type() == StorageType::INTEGER || reg.type() == StorageType::FLOAT) {
66 return 8;
67 }
68 return 0; // stack and BAD
69 }
70
71 void RegSpiller::pd_store_reg(MacroAssembler* masm, int offset, VMStorage reg) {
|