[9] RFR (XS): C2: Broken cmpxchgb encoding on x86

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Aug 17 16:56:34 UTC 2016


http://cr.openjdk.java.net/~vlivanov/8164103/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8164103

Newly introduced compareAndSwapB/compareAndExchangeB rules on x64 
incorrectly encodes cmpxchgb instruction when new value is in DIL (RDI) 
register.

What was missing is REX prefix. The fix is to use REX_breg_mem which 
takes care of that case [1].

The bug was found by new VarHandle tests on bitwise atomics [2]. So, I 
decided not to duplicate the failing test in hotspot repository. 8161444 
will be integrated after the fix is in.

Testing: failing test, VarHandle tests (existing and new), RBT 
(hs-tier0-comp, in progress).

Thanks!

Best regards,
Vladimir Ivanov

[1] 
http://hg.openjdk.java.net/jdk9/hs-comp/hotspot/file/031f53ef620a/src/cpu/x86/vm/x86_64.ad#l2375

[2] https://jbs.oracle.com/browse/JDK-8161444


More information about the hotspot-compiler-dev mailing list