< prev index next >

src/hotspot/cpu/x86/foreignGlobals_x86_64.cpp

Print this page

 30 #include "utilities/formatBuffer.hpp"
 31 
 32 bool ForeignGlobals::is_foreign_linker_supported() {
 33   return true;
 34 }
 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(XMMRegister reg) const {
 42     return _vector_argument_registers.contains(reg)
 43         || _vector_additional_volatile_registers.contains(reg);
 44 }
 45 
 46 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
 47   oop abi_oop = JNIHandles::resolve_non_null(jabi);
 48   ABIDescriptor abi;
 49 
 50   objArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
 51   parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
 52   parse_register_array(inputStorage, StorageType::VECTOR, abi._vector_argument_registers, as_XMMRegister);
 53 
 54   objArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
 55   parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
 56   parse_register_array(outputStorage, StorageType::VECTOR, abi._vector_return_registers, as_XMMRegister);
 57   objArrayOop subarray = oop_cast<objArrayOop>(outputStorage->obj_at((int) StorageType::X87));
 58   abi._X87_return_registers_noof = subarray->length();
 59 
 60   objArrayOop volatileStorage = jdk_internal_foreign_abi_ABIDescriptor::volatileStorage(abi_oop);
 61   parse_register_array(volatileStorage, StorageType::INTEGER, abi._integer_additional_volatile_registers, as_Register);
 62   parse_register_array(volatileStorage, StorageType::VECTOR, abi._vector_additional_volatile_registers, as_XMMRegister);
 63 
 64   abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
 65   abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
 66 
 67   abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
 68   abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
 69 
 70   return abi;
 71 }
 72 
 73 int RegSpiller::pd_reg_size(VMStorage reg) {
 74   if (reg.type() == StorageType::INTEGER) {
 75     return 8;
 76   } else if (reg.type() == StorageType::VECTOR) {
 77     return 16;
 78   }
 79   return 0; // stack and BAD
 80 }

 30 #include "utilities/formatBuffer.hpp"
 31 
 32 bool ForeignGlobals::is_foreign_linker_supported() {
 33   return true;
 34 }
 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(XMMRegister reg) const {
 42     return _vector_argument_registers.contains(reg)
 43         || _vector_additional_volatile_registers.contains(reg);
 44 }
 45 
 46 const ABIDescriptor ForeignGlobals::parse_abi_descriptor(jobject jabi) {
 47   oop abi_oop = JNIHandles::resolve_non_null(jabi);
 48   ABIDescriptor abi;
 49 
 50   refArrayOop inputStorage = jdk_internal_foreign_abi_ABIDescriptor::inputStorage(abi_oop);
 51   parse_register_array(inputStorage, StorageType::INTEGER, abi._integer_argument_registers, as_Register);
 52   parse_register_array(inputStorage, StorageType::VECTOR, abi._vector_argument_registers, as_XMMRegister);
 53 
 54   refArrayOop outputStorage = jdk_internal_foreign_abi_ABIDescriptor::outputStorage(abi_oop);
 55   parse_register_array(outputStorage, StorageType::INTEGER, abi._integer_return_registers, as_Register);
 56   parse_register_array(outputStorage, StorageType::VECTOR, abi._vector_return_registers, as_XMMRegister);
 57   refArrayOop subarray = oop_cast<refArrayOop>(outputStorage->obj_at((int) StorageType::X87));
 58   abi._X87_return_registers_noof = subarray->length();
 59 
 60   refArrayOop volatileStorage = jdk_internal_foreign_abi_ABIDescriptor::volatileStorage(abi_oop);
 61   parse_register_array(volatileStorage, StorageType::INTEGER, abi._integer_additional_volatile_registers, as_Register);
 62   parse_register_array(volatileStorage, StorageType::VECTOR, abi._vector_additional_volatile_registers, as_XMMRegister);
 63 
 64   abi._stack_alignment_bytes = jdk_internal_foreign_abi_ABIDescriptor::stackAlignment(abi_oop);
 65   abi._shadow_space_bytes = jdk_internal_foreign_abi_ABIDescriptor::shadowSpace(abi_oop);
 66 
 67   abi._scratch1 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch1(abi_oop));
 68   abi._scratch2 = parse_vmstorage(jdk_internal_foreign_abi_ABIDescriptor::scratch2(abi_oop));
 69 
 70   return abi;
 71 }
 72 
 73 int RegSpiller::pd_reg_size(VMStorage reg) {
 74   if (reg.type() == StorageType::INTEGER) {
 75     return 8;
 76   } else if (reg.type() == StorageType::VECTOR) {
 77     return 16;
 78   }
 79   return 0; // stack and BAD
 80 }
< prev index next >