< prev index next >

src/cpu/aarch64/vm/templateTable_aarch64.cpp

Print this page

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, Red Hat Inc. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as

@@ -3581,12 +3581,20 @@
   __ b(resolved);
 
   // Get superklass in r0 and subklass in r3
   __ bind(quicked);
   __ load_klass(r3, r0);
-  __ lea(r0, Address(r2, r19, Address::lsl(3)));
-  __ ldr(r0, Address(r0, sizeof(ConstantPool)));
+  //__ 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()));
 
   __ bind(resolved);
 
   // Generate subtype check.  Blows r2, r5
   // Superklass in r0.  Subklass in r3.
< prev index next >