On 19/08/2016 11:29 PM, Aleksey Shipilev wrote:
On 08/19/2016 03:03 PM, David Holmes wrote:
On 19/08/2016 7:37 PM, Aleksey Shipilev wrote:
On 08/19/2016 12:26 PM, David Holmes wrote:
On 19/08/2016 5:40 PM, Aleksey Shipilev wrote:
On 08/19/2016 10:13 AM, David Holmes wrote:
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 ??

@HotSpotIntrinsicCandidate marks Java methods that are declared in
vmSymbols.hpp, and the VM code checks it. So, removing @HSIC without
modifying vmSymbols.hpp would blow up like that.

Anyway, I think you have to leave @HSIC methods untouched, because C2
would intrinsify them directly. To cater for the unsafe.cpp slow path,
do a separate method:

    @HotSpotIntrinsicCandidate
    public final byte compareAndExchangeByteVolatile(Object o, long
offset,
                                                     byte expected,
                                                     byte x) {
        compareAndExchangeByte0(o, long, expected, x);
    }

    public final native byte compareAndExchangeByte0(...);

...and then do an entry point for it in unsafe.cpp.

Okay that was the easy part.

Now where do I find out the conditional compilation syntax for the
X-VarHandle.java.template file?

The template itself is driven by Spp preprocessor, the same one used
thorough JDK. It is called during build via
./jdk/make/gensrc/GensrcVarHandles.gmk.

Yes but I don't know the syntax.

If you find Spp.java in the forest, there is a comment section about the
syntax:
   ./jdk/make/src/classes/build/tools/spp/Spp.java


But why do you need to change VH templates? VH implementations call
Unsafe, see:

        @ForceInline
        static $type$ compareAndExchange(FieldInstanceReadWrite handle,
Object holder, $type$ expected, $type$ value) {
            return
UNSAFE.compareAndExchange$Type$Volatile(Objects.requireNonNull(handle.receiverType.cast(holder)),

                                               handle.fieldOffset,

{#if[Object]?handle.fieldType.cast(expected):expected},

{#if[Object]?handle.fieldType.cast(value):value});
        }

...so once you do the Unsafe part above, everything should be linked
together. The jtreg tests exercise VH byte ops, so you can run them.

I was only making a change to the Byte version so the template needs to
be specialized for Byte to call CompareAndExchangeByte0.

I get that.

But I still think X-VarHandle.template change is unnecessary. The code
for byte CAS generated from X-VarHandle.template calls
Unsafe.compareAnd{Swap,Exchange}*. Why can't you leave VH template
alone, and call CompareAndExchangeByte0 from
Unsafe.compareAndExchangeByteVolatile, like I suggested before?

Ah I misunderstood. But even if I change this Java version, the intrinsic will do what it currently does, so this would only work -Xint mode. Anyway I'll figure something out on Monday.

Thanks,
David

     @HotSpotIntrinsicCandidate
     public final byte compareAndExchangeByteVolatile(Object o,
                                                      long  offset,
                                                      byte expected,
                                                     byte x) {
         compareAndExchangeByte0(o, long, expected, x);
     }

     public final native byte compareAndExchangeByte0(...);

VH tests have a least one testing mode which does not intrinsify Unsafe
methods, i.e. -Xint. compareAndExchangeByte0 path would be visited there.

-Aleksey


Reply via email to