1929 {
1930 unsigned long offset;
1931 __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
1932 __ ldrb(rscratch1, Address(rscratch1, offset));
1933 __ cbnzw(rscratch1, dtrace_method_exit);
1934 __ bind(dtrace_method_exit_done);
1935 }
1936
1937 __ reset_last_Java_frame(false);
1938
1939 // Unbox oop result, e.g. JNIHandles::resolve result.
1940 if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
1941 Label done, not_weak;
1942 __ cbz(r0, done); // Use NULL as-is.
1943 STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
1944 __ tbz(r0, 0, not_weak); // Test for jweak tag.
1945 // Resolve jweak.
1946 __ ldr(r0, Address(r0, -JNIHandles::weak_tag_value));
1947 __ verify_oop(r0);
1948 #if INCLUDE_ALL_GCS
1949 if (UseG1GC) {
1950 __ g1_write_barrier_pre(noreg /* obj */,
1951 r0 /* pre_val */,
1952 rthread /* thread */,
1953 rscratch2 /* tmp */,
1954 true /* tosca_live */,
1955 true /* expand_call */);
1956 }
1957 #endif // INCLUDE_ALL_GCS
1958 __ b(done);
1959 __ bind(not_weak);
1960 // Resolve (untagged) jobject.
1961 __ ldr(r0, Address(r0, 0));
1962 __ verify_oop(r0);
1963 __ bind(done);
1964 }
1965
1966 if (!is_critical_native) {
1967 // reset handle block
1968 __ ldr(r2, Address(rthread, JavaThread::active_handles_offset()));
1969 __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes()));
|
1929 {
1930 unsigned long offset;
1931 __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
1932 __ ldrb(rscratch1, Address(rscratch1, offset));
1933 __ cbnzw(rscratch1, dtrace_method_exit);
1934 __ bind(dtrace_method_exit_done);
1935 }
1936
1937 __ reset_last_Java_frame(false);
1938
1939 // Unbox oop result, e.g. JNIHandles::resolve result.
1940 if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
1941 Label done, not_weak;
1942 __ cbz(r0, done); // Use NULL as-is.
1943 STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
1944 __ tbz(r0, 0, not_weak); // Test for jweak tag.
1945 // Resolve jweak.
1946 __ ldr(r0, Address(r0, -JNIHandles::weak_tag_value));
1947 __ verify_oop(r0);
1948 #if INCLUDE_ALL_GCS
1949 if (UseG1GC || (UseShenandoahGC && ShenandoahSATBBarrier)) {
1950 __ g1_write_barrier_pre(noreg /* obj */,
1951 r0 /* pre_val */,
1952 rthread /* thread */,
1953 rscratch2 /* tmp */,
1954 true /* tosca_live */,
1955 true /* expand_call */);
1956 }
1957 #endif // INCLUDE_ALL_GCS
1958 __ b(done);
1959 __ bind(not_weak);
1960 // Resolve (untagged) jobject.
1961 __ ldr(r0, Address(r0, 0));
1962 __ verify_oop(r0);
1963 __ bind(done);
1964 }
1965
1966 if (!is_critical_native) {
1967 // reset handle block
1968 __ ldr(r2, Address(rthread, JavaThread::active_handles_offset()));
1969 __ str(zr, Address(r2, JNIHandleBlock::top_offset_in_bytes()));
|