[9] RFR (XS): C2: Broken cmpxchgb encoding on x86
Paul Sandoz
paul.sandoz at oracle.com
Wed Aug 17 18:22:53 UTC 2016
Hi Vladimir,
Thanks for chasing this down. This REX encoding is quite confusing.
So it appears on the windows platform we sometimes get unlucky in whatever the value of the bl register is and the register chosen to represent the boolean mask value:
jdk/internal/misc/Unsafe.getAndBitwiseAndBoolean(Ljava/lang/Object;JZ)Z [0x000000000cd1c5c0, 0x000000000cd1c678] 184 bytes
Argument 0 is unknown.RIP: 0xcd1c5c0 Code size: 0x000000b8
[Entry Point]
[Constants]
# {method} {0x000000002dcd6578} 'getAndBitwiseAndBoolean' '(Ljava/lang/Object;JZ)Z' in 'jdk/internal/misc/Unsafe'
# this: rdx:rdx = 'jdk/internal/misc/Unsafe'
# parm0: r8:r8 = 'java/lang/Object'
# parm1: r9:r9 = long
# parm2: rdi = boolean
On my mac i observe the following which works out:
jdk/internal/misc/Unsafe.getAndBitwiseAndBoolean(Ljava/lang/Object;JZ)Z [0x0000000112555620, 0x00000001125556f8] 216 bytes
[Entry Point]
[Constants]
# {method} {0x000000011ea3efc8} 'getAndBitwiseAndBoolean' '(Ljava/lang/Object;JZ)Z' in 'jdk/internal/misc/Unsafe'
# this: rsi:rsi = 'jdk/internal/misc/Unsafe'
# parm0: rdx:rdx = 'java/lang/Object'
# parm1: rcx:rcx = long
# parm2: r8 = boolean
Paul.
> On 17 Aug 2016, at 09:56, Vladimir Ivanov <vladimir.x.ivanov at oracle.com> wrote:
>
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160817/e49aedd8/signature.asc>
More information about the hotspot-compiler-dev
mailing list