Request for review(S): 6991512: G1 barriers fail with 64bit C1
Igor Veresov
igor.veresov at oracle.com
Tue Oct 12 17:12:44 PDT 2010
This fixes two problems:
1. On x64, c1_LIR.hpp:401,
# assert(is_single_cpu() && !is_virtual()) failed: type check
Which is due to passing a pointer to T_LONG instead of T_OBJECT to G1
post-barrier when emitting LIR for CompareAndSwap intrinsic. The fix is
to create a register with an appropriate type when CASing an object
reference.
2. On sparc, assembler_sparc.hpp:843,
# assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1))
failed: value out of range
This one is due to the limited jump range of branch-on-reg-value
instruction. The solution is to use cmp+brx since the jump target is not
guaranteed to be in 16 bit range (the target is a continuation of a stub).
Webrev: http://cr.openjdk.java.net/~iveresov/6991512/webrev.00/
Tested with a couple of failed nightlies.
Thanks,
igor
More information about the hotspot-compiler-dev
mailing list