Mercurial > hg > truffle
diff src/share/vm/c1/c1_LIRGenerator.cpp @ 12955:252d541466ea
8008242: VerifyOops is broken on SPARC
Summary: Fixed displacement issues in SPARC macroassembler and ensure that getClass intrinsic temporary result is T_METADATA
Reviewed-by: kvn, twisti
author | morris |
---|---|
date | Fri, 18 Oct 2013 12:15:32 -0700 |
parents | ce0cc25bc5e2 |
children | 5ccbab1c69f3 |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LIRGenerator.cpp Fri Oct 18 09:36:35 2013 +0000 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Fri Oct 18 12:15:32 2013 -0700 @@ -1265,6 +1265,7 @@ LIRItem rcvr(x->argument_at(0), this); rcvr.load_item(); + LIR_Opr temp = new_register(T_METADATA); LIR_Opr result = rlock_result(x); // need to perform the null check on the rcvr @@ -1272,8 +1273,11 @@ if (x->needs_null_check()) { info = state_for(x); } - __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), result, info); - __ move_wide(new LIR_Address(result, in_bytes(Klass::java_mirror_offset()), T_OBJECT), result); + + // FIXME T_ADDRESS should actually be T_METADATA but it can't because the + // meaning of these two is mixed up (see JDK-8026837). + __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), temp, info); + __ move_wide(new LIR_Address(temp, in_bytes(Klass::java_mirror_offset()), T_OBJECT), result); }