RFR (M): 8188224: Generalize Atomic::load/store to use templates

Erik Österlund erik.osterlund at oracle.com
Wed Oct 4 13:06:17 UTC 2017

Hi Coleen,

On 2017-10-04 14:08, coleen.phillimore at oracle.com wrote:
> So this change is becoming more familiar but I think it's because the 
> comment is repeated now for cmpxchg, add, and now load and store.   My 
> scanning ability is too limited to spot the differences.  I don't like 
> the duplicated comments at all.
> I don't know if this is possible and not with this change, but I think 
> there should be a class platformAtomic.hpp which consolidates these 
> comments and moves the platform* stuff out of atomic.hpp, to be 
> included or subclassed by atomic.hpp.  Then we can find our desired 
> Atomic::blah functions again.   I would like an RFE for this.

I see what you are saying. When you think about it, is almost as if we 
want the comments themselves to be template expanded for each operation. 
I will file an RFE for this.

> Otherwise, I've pattern matched this and it seems correct and am fine 
> with checking this in.
> http://cr.openjdk.java.net/~eosterlund/8188224/webrev.01/src/hotspot/os_cpu/windows_x86/atomic_windows_x86.hpp.udiff.html 
> These changes I really like because now we don't have to go hunting to 
> see that atomic::load/store is just *thing.

Thank you for the review!


> Thanks!
> Coleen
> On 10/3/17 8:58 AM, Erik Österlund wrote:
>> Hi David,
>> Thanks for the review.
>> The comments have been removed.
>> New full webrev:
>> http://cr.openjdk.java.net/~eosterlund/8188224/webrev.01/
>> New incremental webrev:
>> http://cr.openjdk.java.net/~eosterlund/8188224/webrev.00_01/
>> Thanks,
>> /Erik
>> On 2017-10-03 14:44, David Holmes wrote:
>>> Hi Erik,
>>> A lot of jumping through hoops just to do a direct load/store in the 
>>> bulk of cases - but okay, we're embracing templates.
>>> 66   // Atomically store to a location
>>> 67   // See comment above about using jlong atomics on 32-bit platforms
>>> The comment at #67 and the equivalent one for load can be deleted. 
>>> The "comment above" should only be referring to r-m-w atomic ops not 
>>> basic load and store. All platforms must have a means to do atomic 
>>> load/store of 64-bit due to Java volatile variables (eg by using 
>>> floating-point unit on 32-bit) but may not have cmpxchg<8> 
>>> capability. (I failed to convince the author of this when those 
>>> comments went in. ;-) )
>>> Cheers,
>>> David
>>> On 3/10/2017 10:29 PM, Erik Österlund wrote:
>>>> Hi,
>>>> The time has come to generalize Atomic::load/store with templates - 
>>>> the last operation to generalize in Atomic.
>>>> The design was inspired by Atomic::xchg and uses a similar 
>>>> mechanism to validate the passed in arguments. It was also designed 
>>>> with coming OrderAccess changes in mind. OrderAccess also contains 
>>>> loads and stores that will reuse the LoadImpl and StoreImpl 
>>>> infrastructure in Atomic::load/store. (the type checking for what 
>>>> is okay to pass in to Atomic::load/store is very much the same for 
>>>> OrderAccess::load_acquire/*store*).
>>>> One thing worth mentioning is that the bsd zero port (but notably 
>>>> not the linux zero port) had a leading fence for atomic stores of 
>>>> jint when #if !defined(ARM) && !defined(M68K) is true without any 
>>>> comment describing why. So I took the liberty of removing it. 
>>>> Atomic should not have any fencing at all - that is what 
>>>> OrderAccess is for. In fact Atomic does not promise any memory 
>>>> ordering semantics for loads and stores. Atomic merely provides 
>>>> relaxed accesses that are atomic. Worth mentioning nevertheless in 
>>>> case anyone wants to keep that jint Atomic::store fence on bsd zero 
>>>> !M68K && !ARM.
>>>> Bug:
>>>> https://bugs.openjdk.java.net/browse/JDK-8188224
>>>> Webrev:
>>>> http://cr.openjdk.java.net/~eosterlund/8188224/webrev.00/
>>>> Testing: JPRT, mach5 hs-tier3
>>>> Thanks,
>>>> /Erik

More information about the hotspot-dev mailing list