< prev index next >

src/cpu/sparc/vm/jniFastGetField_sparc.cpp

Print this page
rev 12906 : [mq]: gc_interface

@@ -65,13 +65,17 @@
   __ sethi (cnt_addrlit, O3);
   Address cnt_addr(O3, cnt_addrlit.low10());
   __ ld (cnt_addr, G4);
   __ andcc (G4, 1, G0);
   __ br (Assembler::notZero, false, Assembler::pn, label1);
-  __ delayed()->srl (O2, 2, O4);
-  __ andn (O1, JNIHandles::weak_tag_mask, O1);
-  __ ld_ptr (O1, 0, O5);
+  __ delayed()->andcc(O1, JNIHandles::weak_tag_mask, G0); // Test for jweak
+
+  // Annul the resolving load if it is a jweak
+  __ br(Assembler::notZero, true, Assembler::pt, label1);
+  __ delayed()->ld_ptr (O1, 0, O5);
+
+  __ srl(O2, 2, O4);
 
   assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
   speculative_load_pclist[count] = __ pc();
   switch (type) {
     case T_BOOLEAN: __ ldub (O5, O4, G3);  break;
< prev index next >