--- old/src/cpu/aarch64/vm/templateTable_aarch64.cpp 2017-04-29 08:23:59.761718500 -0700 +++ new/src/cpu/aarch64/vm/templateTable_aarch64.cpp 2017-04-29 08:23:59.601712512 -0700 @@ -3372,8 +3372,7 @@ __ br(Assembler::NE, slow_case); // get InstanceKlass - __ lea(r4, Address(r4, r3, Address::lsl(3))); - __ ldr(r4, Address(r4, sizeof(ConstantPool))); + __ load_resolved_klass_at_offset(r4, r3, r4, rscratch1); // make sure klass is initialized & doesn't have finalizer // make sure klass is fully initialized @@ -3526,8 +3525,7 @@ // Get superklass in r0 and subklass in r3 __ bind(quicked); __ mov(r3, r0); // Save object in r3; r0 needed for subtype check - __ lea(r0, Address(r2, r19, Address::lsl(3))); - __ ldr(r0, Address(r0, sizeof(ConstantPool))); + __ load_resolved_klass_at_offset(r2, r19, r0, rscratch1); // r0 = klass __ bind(resolved); __ load_klass(r19, r3); @@ -3583,16 +3581,7 @@ // Get superklass in r0 and subklass in r3 __ bind(quicked); __ load_klass(r3, r0); - //__ load_resolved_klass_at_offset(r2, r19, r0); - Register cpool = r2; - Register index = r19; - Register klass = r0; - Register tmp = klass; - __ lea(tmp, Address(cpool, index, Address::lsl(3))); - __ ldrh(index, Address(tmp, sizeof(ConstantPool))); // index = resolved_klass_index - __ ldr(tmp, Address(cpool, ConstantPool::resolved_klasses_offset_in_bytes())); // tmp = cpool->_resolved_klasses - __ lea(tmp, Address(tmp, index, Address::lsl(3))); - __ ldr(klass, Address(tmp, Array::base_offset_in_bytes())); + __ load_resolved_klass_at_offset(r2, r19, r0, rscratch1); __ bind(resolved);