< prev index next >
src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
Print this page
*** 2053,2085 ****
__ reset_last_Java_frame(false);
// Unbox oop result, e.g. JNIHandles::resolve result.
if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
! Label done, not_weak;
! __ cbz(r0, done); // Use NULL as-is.
! STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
! __ tbz(r0, 0, not_weak); // Test for jweak tag.
! // Resolve jweak.
! __ ldr(r0, Address(r0, -JNIHandles::weak_tag_value));
! __ verify_oop(r0);
! #if INCLUDE_ALL_GCS
! if (UseG1GC) {
! __ g1_write_barrier_pre(noreg /* obj */,
! r0 /* pre_val */,
! rthread /* thread */,
! rscratch2 /* tmp */,
! true /* tosca_live */,
! true /* expand_call */);
! }
! #endif // INCLUDE_ALL_GCS
! __ b(done);
! __ bind(not_weak);
! // Resolve (untagged) jobject.
! __ ldr(r0, Address(r0, 0));
! __ verify_oop(r0);
! __ bind(done);
}
if (CheckJNICalls) {
// clear_pending_jni_exception_check
__ str(zr, Address(rthread, JavaThread::pending_jni_exception_check_fn_offset()));
--- 2053,2063 ----
__ reset_last_Java_frame(false);
// Unbox oop result, e.g. JNIHandles::resolve result.
if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
! __ resolve_jobject(r0, rthread, rscratch2);
}
if (CheckJNICalls) {
// clear_pending_jni_exception_check
__ str(zr, Address(rthread, JavaThread::pending_jni_exception_check_fn_offset()));
< prev index next >