--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp Wed Apr 18 15:57:19 2018 +0200
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp Wed Apr 18 10:39:40 2018 -0400
@@ -2108,7 +2108,7 @@
bind(not_weak);
// Resolve (untagged) jobject.
- bs->load_at(this, IN_ROOT | ON_STRONG_OOP_REF, T_OBJECT,
+ bs->load_at(this, IN_ROOT | IN_CONCURRENT_ROOT, T_OBJECT,
value, Address(value, 0), tmp, thread);
verify_oop(value);
bind(done);
@@ -3642,18 +3642,20 @@
}
// ((OopHandle)result).resolve();
-void MacroAssembler::resolve_oop_handle(Register result) {
+void MacroAssembler::resolve_oop_handle(Register result, Register tmp) {
// OopHandle::resolve is an indirection.
- ldr(result, Address(result, 0));
-}
-
-void MacroAssembler::load_mirror(Register dst, Register method) {
+ BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
+ bs->load_at(this, IN_ROOT | IN_CONCURRENT_ROOT, T_OBJECT,
+ result, Address(result, 0), tmp, rthread);
+}
+
+void MacroAssembler::load_mirror(Register dst, Register method, Register tmp) {
const int mirror_offset = in_bytes(Klass::java_mirror_offset());
ldr(dst, Address(rmethod, Method::const_offset()));
ldr(dst, Address(dst, ConstMethod::constants_offset()));
ldr(dst, Address(dst, ConstantPool::pool_holder_offset_in_bytes()));
ldr(dst, Address(dst, mirror_offset));
- resolve_oop_handle(dst);
+ resolve_oop_handle(dst, tmp);
}
void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp) {