< prev index next >

src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp

Print this page
rev 11463 : Backport Traversal GC


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




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


< prev index next >