Testing hotspot's Atomic::cmpxchg(jbyte*) ?
David Holmes
david.holmes at oracle.com
Fri Aug 19 07:13:43 UTC 2016
Hi Aleksey,
On 19/08/2016 4:31 PM, Aleksey Shipilev wrote:
> On 08/19/2016 08:15 AM, David Holmes wrote:
>> I need to test the jbyte version of Atomic::cmpxchg in the VM, but so
>> far it doesn't seem to be the case that any library code will actually
>> invoke it. At the top Java level there is no AtomicByte class. Unsafe
>> defines compareAndSwapByte variants but implements them using
>> compareAndSwapInt and isolating the byte of interest. VarHandles seems
>> to have direct *SwapByte operations but I can't figure out what they map
>> to - there are VM intrinsics but again I can't the actual implementation
>> to see if it uses Atomic::cmpxchg(jbyte*).
>
> VarHandles byte CAS/CAE map to Unsafe. Therefore they will use the
> Java-ish compareAndExchangeByte from Unsafe, without touching
> Atomic::cmpxchg(jbyte).
>
> In retrospect, we did that before Atomic::cmpxchg(jbyte) was available.
We did? I thought the VM jbyte version was old, while the Unsafe version
was new ??
Anyway ...
> Now it might be cleaner to ditch Java version from Unsafe, and make
> native entry points like Unsafe_CompareAnd{Exchange,Swap}{Byte,Short}
> which would call relevant Atomic::cmpxchg-s.
I tried commenting out the Java-ish version and defining one that would
call Atomic::cmpxchg from unsafe.cpp in the VM. However something is
complaining about the intrinisics - I removed the
HotspotIntrinsicCandidate annotation as I don't want any intrinisics,
but I get a build error:
Compiler intrinsic is defined for method
[jdk.internal.misc.Unsafe.compareAndSwapByte(Ljava/lang/Object;JBB)Z],
but the method is not annotated with @HotSpotIntrinsicCandidate. Exiting.
No idea where this is coming from or how I can disable it ??
Thanks,
David
> Then, regular jdk/test/java/lang/invoke/varhandles and
> hotspot/tests/compiler/unsafe tests would exercise that path, as they
> run in interpreter too.
>
> Thanks,
> -Aleksey
>
More information about the core-libs-dev
mailing list