< prev index next >
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
Print this page
rev 12644 : 8175086: [BACKOUT] fix for JDK-8166188
Reviewed-by: kbarrett, jwilhelm, dcubed
*** 1,7 ****
/*
! * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 2752,2785 ****
// Clear "last Java frame" SP and PC.
__ verify_thread(); // G2_thread must be correct
__ reset_last_Java_frame();
! // Unbox oop result, e.g. JNIHandles::resolve value in I0.
if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
! Label done, not_weak;
! __ br_null(I0, false, Assembler::pn, done); // Use NULL as-is.
! __ delayed()->andcc(I0, JNIHandles::weak_tag_mask, G0); // Test for jweak
! __ brx(Assembler::zero, true, Assembler::pt, not_weak);
! __ delayed()->ld_ptr(I0, 0, I0); // Maybe resolve (untagged) jobject.
! // Resolve jweak.
! __ ld_ptr(I0, -JNIHandles::weak_tag_value, I0);
! #if INCLUDE_ALL_GCS
! if (UseG1GC) {
! // Copy to O0 because macro doesn't allow pre_val in input reg.
! __ mov(I0, O0);
! __ g1_write_barrier_pre(noreg /* obj */,
! noreg /* index */,
! 0 /* offset */,
! O0 /* pre_val */,
! G3_scratch /* tmp */,
! true /* preserve_o_regs */);
! }
! #endif // INCLUDE_ALL_GCS
! __ bind(not_weak);
__ verify_oop(I0);
- __ bind(done);
}
if (CheckJNICalls) {
// clear_pending_jni_exception_check
__ st_ptr(G0, G2_thread, JavaThread::pending_jni_exception_check_fn_offset());
--- 2752,2770 ----
// Clear "last Java frame" SP and PC.
__ verify_thread(); // G2_thread must be correct
__ reset_last_Java_frame();
! // Unpack oop result
if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
! Label L;
! __ addcc(G0, I0, G0);
! __ brx(Assembler::notZero, true, Assembler::pt, L);
! __ delayed()->ld_ptr(I0, 0, I0);
! __ mov(G0, I0);
! __ bind(L);
__ verify_oop(I0);
}
if (CheckJNICalls) {
// clear_pending_jni_exception_check
__ st_ptr(G0, G2_thread, JavaThread::pending_jni_exception_check_fn_offset());
< prev index next >