< 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 >