Request for review(XS): 7005241: C1: SEGV in java.util.concurrent.LinkedTransferQueue.xfer() with compressed oops

Tom Rodriguez tom.rodriguez at oracle.com
Tue Dec 7 17:48:27 PST 2010


On Dec 7, 2010, at 5:11 PM, Igor Veresov wrote:

> Implementation of the CAS primitive for x64 compressed oops was incorrect. It kills rscratch2 register (r11), which is allocatable in C1. Also, we don't need to restore cmpval as it's never used after that, so we need only one temporary register, which can be scratch1.

You can't just kill cmpval without telling the allocator.  I'm actually a little unclear why we don't get into trouble with the existing code about that since cmpxchg kills rax if compare fails.  I don't see anything that indicates that cmpval is killed.  Does the load_item_force somehow keep us from reusing cmpval afterwards?

tom

> 
> Webrev: http://cr.openjdk.java.net/~iveresov/7005241/webrev.00
> 
> Tested with the failed nightly test.
> 
> Thanks,
> igor
> 



More information about the hotspot-compiler-dev mailing list