< prev index next >

src/cpu/sparc/vm/sharedRuntime_sparc.cpp

Print this page
rev 12906 : [mq]: gc_interface

*** 2519,2550 **** __ verify_thread(); // G2_thread must be correct __ reset_last_Java_frame(); // Unbox oop result, e.g. JNIHandles::resolve value in I0. if (ret_type == T_OBJECT || ret_type == T_ARRAY) { - Label done, not_weak; - __ br_null(I0, false, Assembler::pn, done); // Use NULL as-is. - __ delayed()->andcc(I0, JNIHandles::weak_tag_mask, G0); // Test for jweak - __ brx(Assembler::zero, true, Assembler::pt, not_weak); - __ delayed()->ld_ptr(I0, 0, I0); // Maybe resolve (untagged) jobject. - // Resolve jweak. - __ ld_ptr(I0, -JNIHandles::weak_tag_value, I0); - #if INCLUDE_ALL_GCS - if (UseG1GC) { - // Copy to O0 because macro doesn't allow pre_val in input reg. __ mov(I0, O0); ! __ g1_write_barrier_pre(noreg /* obj */, ! noreg /* index */, ! 0 /* offset */, ! O0 /* pre_val */, ! G3_scratch /* tmp */, ! true /* preserve_o_regs */); ! } ! #endif // INCLUDE_ALL_GCS ! __ bind(not_weak); ! __ verify_oop(I0); ! __ bind(done); } if (CheckJNICalls) { // clear_pending_jni_exception_check __ st_ptr(G0, G2_thread, JavaThread::pending_jni_exception_check_fn_offset()); --- 2519,2531 ---- __ verify_thread(); // G2_thread must be correct __ reset_last_Java_frame(); // Unbox oop result, e.g. JNIHandles::resolve value in I0. if (ret_type == T_OBJECT || ret_type == T_ARRAY) { __ mov(I0, O0); ! __ resolve_jobject(O0, G3_scratch); ! __ mov(O0, I0); } if (CheckJNICalls) { // clear_pending_jni_exception_check __ st_ptr(G0, G2_thread, JavaThread::pending_jni_exception_check_fn_offset());
< prev index next >