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