< prev index next >
src/cpu/aarch64/vm/templateTable_aarch64.cpp
Print this page
@@ -3370,12 +3370,11 @@
__ ldarb(rscratch1, rscratch1);
__ cmp(rscratch1, JVM_CONSTANT_Class);
__ 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
__ ldrb(rscratch1, Address(r4, InstanceKlass::init_state_offset()));
__ cmp(rscratch1, InstanceKlass::fully_initialized);
@@ -3524,12 +3523,11 @@
__ b(resolved);
// 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);
// Generate subtype check. Blows r2, r5. Object in r3.
@@ -3581,20 +3579,11 @@
__ b(resolved);
// 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<Klass*>::base_offset_in_bytes()));
+ __ load_resolved_klass_at_offset(r2, r19, r0, rscratch1);
__ bind(resolved);
// Generate subtype check. Blows r2, r5
// Superklass in r0. Subklass in r3.
< prev index next >