2024 Label dtrace_method_exit, dtrace_method_exit_done; 2025 { 2026 unsigned long offset; 2027 __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset); 2028 __ ldrb(rscratch1, Address(rscratch1, offset)); 2029 __ cbnzw(rscratch1, dtrace_method_exit); 2030 __ bind(dtrace_method_exit_done); 2031 } 2032 2033 __ reset_last_Java_frame(false, true); 2034 2035 // Unpack oop result 2036 if (ret_type == T_OBJECT || ret_type == T_ARRAY) { 2037 Label L; 2038 __ cbz(r0, L); 2039 __ ldr(r0, Address(r0, 0)); 2040 __ bind(L); 2041 __ verify_oop(r0); 2042 } 2043 2044 if (!is_critical_native) { 2045 // reset handle block 2046 __ ldr(r2, Address(rthread, JavaThread::active_handles_offset())); 2047 __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes())); 2048 } 2049 2050 __ leave(); 2051 2052 if (!is_critical_native) { 2053 // Any exception pending? 2054 __ ldr(rscratch1, Address(rthread, in_bytes(Thread::pending_exception_offset()))); 2055 __ cbnz(rscratch1, exception_pending); 2056 } 2057 2058 // record exit from native wrapper code 2059 if (NotifySimulator) { 2060 __ notify(Assembler::method_reentry); 2061 } 2062 2063 // We're done | 2024 Label dtrace_method_exit, dtrace_method_exit_done; 2025 { 2026 unsigned long offset; 2027 __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset); 2028 __ ldrb(rscratch1, Address(rscratch1, offset)); 2029 __ cbnzw(rscratch1, dtrace_method_exit); 2030 __ bind(dtrace_method_exit_done); 2031 } 2032 2033 __ reset_last_Java_frame(false, true); 2034 2035 // Unpack oop result 2036 if (ret_type == T_OBJECT || ret_type == T_ARRAY) { 2037 Label L; 2038 __ cbz(r0, L); 2039 __ ldr(r0, Address(r0, 0)); 2040 __ bind(L); 2041 __ verify_oop(r0); 2042 } 2043 2044 if (CheckJNICalls) { 2045 // clear_pending_jni_exception_check 2046 __ str(zr, Address(rthread, JavaThread::pending_jni_exception_check_fn_offset()); 2047 } 2048 2049 if (!is_critical_native) { 2050 // reset handle block 2051 __ ldr(r2, Address(rthread, JavaThread::active_handles_offset())); 2052 __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes())); 2053 } 2054 2055 __ leave(); 2056 2057 if (!is_critical_native) { 2058 // Any exception pending? 2059 __ ldr(rscratch1, Address(rthread, in_bytes(Thread::pending_exception_offset()))); 2060 __ cbnz(rscratch1, exception_pending); 2061 } 2062 2063 // record exit from native wrapper code 2064 if (NotifySimulator) { 2065 __ notify(Assembler::method_reentry); 2066 } 2067 2068 // We're done |