mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
6760773: UseCompressedOops is broken with UseParNewGC
Sparc code for gen_subtype_check was doing an ld for a compressed oop with the sign bit set so not comparing, leading to a ClassCastException. Reviewed-by: phh, never, acorn, kvn, xlu
This commit is contained in:
parent
8eb2e02296
commit
0cecb67ae7
2 changed files with 3 additions and 3 deletions
|
@ -906,7 +906,7 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
|
||||||
|
|
||||||
// load next super to check
|
// load next super to check
|
||||||
if (UseCompressedOops) {
|
if (UseCompressedOops) {
|
||||||
ld( Rtmp2, arrayOopDesc::base_offset_in_bytes(T_OBJECT), Rtmp3);
|
lduw( Rtmp2, arrayOopDesc::base_offset_in_bytes(T_OBJECT), Rtmp3);
|
||||||
// Bump array pointer forward one oop
|
// Bump array pointer forward one oop
|
||||||
add( Rtmp2, 4, Rtmp2 );
|
add( Rtmp2, 4, Rtmp2 );
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -956,7 +956,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
// Load a little early; will load 1 off the end of the array.
|
// Load a little early; will load 1 off the end of the array.
|
||||||
// Ok for now; revisit if we have other uses of this routine.
|
// Ok for now; revisit if we have other uses of this routine.
|
||||||
if (UseCompressedOops) {
|
if (UseCompressedOops) {
|
||||||
__ ld(L1_ary_ptr,0,L2_super);// Will load a little early
|
__ lduw(L1_ary_ptr,0,L2_super);// Will load a little early
|
||||||
} else {
|
} else {
|
||||||
__ ld_ptr(L1_ary_ptr,0,L2_super);// Will load a little early
|
__ ld_ptr(L1_ary_ptr,0,L2_super);// Will load a little early
|
||||||
}
|
}
|
||||||
|
@ -973,7 +973,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
__ subcc(L2_super,L4_ooptmp,Rret); // Check for match; zero in Rret for a hit
|
__ subcc(L2_super,L4_ooptmp,Rret); // Check for match; zero in Rret for a hit
|
||||||
__ br( Assembler::notEqual, false, Assembler::pt, loop );
|
__ br( Assembler::notEqual, false, Assembler::pt, loop );
|
||||||
__ delayed()->ld(L1_ary_ptr,0,L2_super);// Will load a little early
|
__ delayed()->lduw(L1_ary_ptr,0,L2_super);// Will load a little early
|
||||||
#else
|
#else
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue