--- old/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp 2019-01-24 17:47:01.247880422 +0000 +++ new/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp 2019-01-24 17:47:00.387842205 +0000 @@ -1302,7 +1302,11 @@ void MacroAssembler::verify_oop(Register reg, const char* s) { - if (!VerifyOops) return; + if (!VerifyOops || VerifyAdapterSharing) { + // Below address of the code string confuses VerifyAdapterSharing + // because it may differ between otherwise equivalent adapters. + return; + } // Pass register number to verify_oop_subroutine const char* b = NULL; @@ -1332,7 +1336,11 @@ } void MacroAssembler::verify_oop_addr(Address addr, const char* s) { - if (!VerifyOops) return; + if (!VerifyOops || VerifyAdapterSharing) { + // Below address of the code string confuses VerifyAdapterSharing + // because it may differ between otherwise equivalent adapters. + return; + } const char* b = NULL; { @@ -1435,6 +1443,10 @@ call_VM_leaf_base(entry_point, 3); } +void MacroAssembler::super_call_VM_leaf(address entry_point) { + MacroAssembler::call_VM_leaf_base(entry_point, 1); +} + void MacroAssembler::super_call_VM_leaf(address entry_point, Register arg_0) { pass_arg0(this, arg_0); MacroAssembler::call_VM_leaf_base(entry_point, 1); @@ -1484,6 +1496,39 @@ } } +void MacroAssembler::test_klass_is_value(Register klass, Register temp_reg, Label& is_value) { + ldrw(temp_reg, Address(klass, Klass::access_flags_offset())); + andr(temp_reg, temp_reg, JVM_ACC_VALUE); + cbnz(temp_reg, is_value); +} + +void MacroAssembler::test_field_is_flattenable(Register flags, Register temp_reg, Label& is_flattenable) { + (void) temp_reg; // keep signature uniform with x86 + tbnz(flags, ConstantPoolCacheEntry::is_flattenable_field_shift, is_flattenable); +} + +void MacroAssembler::test_field_is_not_flattenable(Register flags, Register temp_reg, Label& not_flattenable) { + (void) temp_reg; // keep signature uniform with x86 + tbz(flags, ConstantPoolCacheEntry::is_flattenable_field_shift, not_flattenable); +} + +void MacroAssembler::test_field_is_flattened(Register flags, Register temp_reg, Label& is_flattened) { + (void) temp_reg; // keep signature uniform with x86 + tbnz(flags, ConstantPoolCacheEntry::is_flattened_field_shift, is_flattened); +} + +void MacroAssembler::test_flat_array_klass(Register klass, Register temp_reg, Label& is_flattened) { + ldrw(temp_reg, Address(klass, Klass::layout_helper_offset())); + asrw(temp_reg, temp_reg, Klass::_lh_array_tag_shift); + cmpw(temp_reg, Klass::_lh_array_tag_vt_value); + br(Assembler::EQ, is_flattened); +} + +void MacroAssembler::test_flat_array_oop(Register oop, Register temp_reg, Label& is_flattened) { + load_klass(temp_reg, oop); + test_flat_array_klass(temp_reg, temp_reg, is_flattened); +} + // MacroAssembler protected routines needed to implement // public methods @@ -5850,3 +5895,10 @@ pop(saved_regs, sp); } + +// DMS TODO ValueType MachVVEPNode support +void MacroAssembler::unpack_value_args(Compile* C) { + // Not implemented + guarantee(false, "Support for MachVVEPNode is not implemented"); +} +