< prev index next >

src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp

Print this page
rev 13551 : imported patch gcinterface-aarch64-5.patch


2038     if (ret_type != T_FLOAT && ret_type != T_DOUBLE && ret_type != T_VOID) {
2039       restore_native_result(masm, ret_type, stack_slots);
2040     }
2041 
2042     __ bind(done);
2043   }
2044 
2045   Label dtrace_method_exit, dtrace_method_exit_done;
2046   {
2047     unsigned long offset;
2048     __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
2049     __ ldrb(rscratch1, Address(rscratch1, offset));
2050     __ cbnzw(rscratch1, dtrace_method_exit);
2051     __ bind(dtrace_method_exit_done);
2052   }
2053 
2054   __ reset_last_Java_frame(false);
2055 
2056   // Unbox oop result, e.g. JNIHandles::resolve result.
2057   if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
2058     Label done, not_weak;
2059     __ cbz(r0, done);           // Use NULL as-is.
2060     STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
2061     __ tbz(r0, 0, not_weak);    // Test for jweak tag.
2062     // Resolve jweak.
2063     __ ldr(r0, Address(r0, -JNIHandles::weak_tag_value));
2064     __ verify_oop(r0);
2065 #if INCLUDE_ALL_GCS
2066     if (UseG1GC) {
2067       __ g1_write_barrier_pre(noreg /* obj */,
2068                               r0 /* pre_val */,
2069                               rthread /* thread */,
2070                               rscratch2 /* tmp */,
2071                               true /* tosca_live */,
2072                               true /* expand_call */);
2073     }
2074 #endif // INCLUDE_ALL_GCS
2075     __ b(done);
2076     __ bind(not_weak);
2077     // Resolve (untagged) jobject.
2078     __ ldr(r0, Address(r0, 0));
2079     __ verify_oop(r0);
2080     __ bind(done);
2081   }
2082 
2083   if (CheckJNICalls) {
2084     // clear_pending_jni_exception_check
2085     __ str(zr, Address(rthread, JavaThread::pending_jni_exception_check_fn_offset()));
2086   }
2087 
2088   if (!is_critical_native) {
2089     // reset handle block
2090     __ ldr(r2, Address(rthread, JavaThread::active_handles_offset()));
2091     __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes()));
2092   }
2093 
2094   __ leave();
2095 
2096   if (!is_critical_native) {
2097     // Any exception pending?
2098     __ ldr(rscratch1, Address(rthread, in_bytes(Thread::pending_exception_offset())));
2099     __ cbnz(rscratch1, exception_pending);
2100   }




2038     if (ret_type != T_FLOAT && ret_type != T_DOUBLE && ret_type != T_VOID) {
2039       restore_native_result(masm, ret_type, stack_slots);
2040     }
2041 
2042     __ bind(done);
2043   }
2044 
2045   Label dtrace_method_exit, dtrace_method_exit_done;
2046   {
2047     unsigned long offset;
2048     __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
2049     __ ldrb(rscratch1, Address(rscratch1, offset));
2050     __ cbnzw(rscratch1, dtrace_method_exit);
2051     __ bind(dtrace_method_exit_done);
2052   }
2053 
2054   __ reset_last_Java_frame(false);
2055 
2056   // Unbox oop result, e.g. JNIHandles::resolve result.
2057   if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
2058     __ resolve_jobject(r0, rthread, rscratch2);






















2059   }
2060 
2061   if (CheckJNICalls) {
2062     // clear_pending_jni_exception_check
2063     __ str(zr, Address(rthread, JavaThread::pending_jni_exception_check_fn_offset()));
2064   }
2065 
2066   if (!is_critical_native) {
2067     // reset handle block
2068     __ ldr(r2, Address(rthread, JavaThread::active_handles_offset()));
2069     __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes()));
2070   }
2071 
2072   __ leave();
2073 
2074   if (!is_critical_native) {
2075     // Any exception pending?
2076     __ ldr(rscratch1, Address(rthread, in_bytes(Thread::pending_exception_offset())));
2077     __ cbnz(rscratch1, exception_pending);
2078   }


< prev index next >