< prev index next >
src/cpu/sparc/vm/jniFastGetField_sparc.cpp
Print this page
rev 12906 : [mq]: gc_interface
*** 65,77 ****
__ 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);
assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
speculative_load_pclist[count] = __ pc();
switch (type) {
case T_BOOLEAN: __ ldub (O5, O4, G3); break;
--- 65,81 ----
__ 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()->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 >