Unsafe compareAnd*

Trevor Watson trevor.d.watson at oracle.com
Fri Nov 18 07:58:58 UTC 2016


Thanks for the explanation Paul.

On 17/11/16 18:48, Paul Sandoz wrote:
> Hi Trevor,
>
> The compareAndSwapShort (non-instrinsic) implementation defers to the compareAndExchangeShortVolatile implementation, and the weakCompareAndSwapShortVolatile implementation defers to (the stronger) compareAndSwapShort implementation [*]:
>
> i.e. weakCompareAndSwapShortVolatile -> compareAndSwapShort -> compareAndExchangeShortVolatile
>
> @HotSpotIntrinsicCandidate
> public final short compareAndExchangeShortVolatile(Object o, long offset,
>                                          short expected,
>                                          short x) {
>     if ((offset & 3) == 3) {
>         throw new IllegalArgumentException("Update spans the word, not supported");
>     }
>
>> }
>
> @HotSpotIntrinsicCandidate
> public final boolean compareAndSwapShort(Object o, long offset,
>                                          short expected,
>                                          short x) {
>     return compareAndExchangeShortVolatile(o, offset, expected, x) == expected;
> }
>
> @HotSpotIntrinsicCandidate
> public final boolean weakCompareAndSwapShortVolatile(Object o, long offset,
>                                                      short expected,
>                                                      short x) {
>     return compareAndSwapShort(o, offset, expected, x);
> }
>
> I think that explains why you are observing failing Unsafe.weakCompareAndSwapShort() tests.
>
> Paul.
>
> [*] Note, we really need to change the names here to be consistent with the schema on VarHandles
>
>
>> On 17 Nov 2016, at 09:29, Trevor Watson <trevor.d.watson at oracle.com> wrote:
>>
>> I'm working on an implementation of the C2 code for compareAndExchangeShort on SPARC.
>>
>> I've only implemented this function so far, and no compareAndSwapShort equivalent.
>>
>> When I run the test in hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestShort.java it fails because Unsafe.compareAndSwapShort() returns an incorrect value. This test passes without my implementation of compareAndExchangeShort.
>>
>> If I comment out the Unsafe.compareAndSwapShort() tests, the Unsafe.compareAndExchangeShort tests run successfully but the Unsafe.weakCompareAndSwapShort() tests subsequently fail.
>>
>> Can anyone tell me why it might be that an implementation for CompareAndExchangeS would trigger a failure in Unsafe.compareAndSwapShort()?
>>
>> Thanks,
>> Trevor
>


More information about the hotspot-dev mailing list