RFR (M): 8188813: Generalize OrderAccess to use templates

Erik Österlund erik.osterlund at oracle.com
Fri Oct 6 06:48:26 UTC 2017


Hi David,

On fre, 2017-10-06 at 16:01 +1000, David Holmes wrote:
> Hi Erik,
> 
> On 5/10/2017 11:55 PM, Erik Österlund wrote:
> > 
> > Hi,
> > 
> > Now that Atomic has been generalized with templates, the same
> > should to 
> > be done to OrderAccess.
> > 
> > Bug:
> > https://bugs.openjdk.java.net/browse/JDK-8188813
> > 
> > Webrev:
> > http://cr.openjdk.java.net/~eosterlund/8188813/webrev.00/
> Well I didn't see anything too scary looking. :) I assume we'll drop
> the 
> ptr variants at some stage.

Yes, that is indeed the plan.

> One query:
> 
> src/hotspot/share/gc/shared/cardTableModRefBS.inline.hpp
> 
> Can you declare "volatile jbyte* byte = ..." to avoid the volatile
> cast 
> on the orderAccess call?

Sure. Fixed.

> 
> > 
> > Testing: mach5 hs-tier3
> > 
> > Since Atomic already has a mechanism for type checking generic
> > arguments 
> > for Atomic::load/store, and OrderAccess also is a bunch of
> > semantically 
> > decorated loads and stores, I decided to reuse the template wheel
> > that 
> > was already invented (Atomic::LoadImpl and Atomic::StoreImpl).
> > Therefore, I made OrderAccess privately inherit Atomic so that
> > this 
> > infrastructure could be reused. A whole bunch of code has been
> > nuked 
> > with this generalization.
> Good!

:)

> 
> > 
> > It is worth noting that I have added PrimitiveConversion
> > functionality 
> > for doubles and floats which translates to using the union trick
> > for 
> > casting double to and from int64_t and float to and from int32_t
> > when 
> > passing down doubles and ints to the API. I need the former two,
> > because 
> > Java supports volatile double and volatile float, and therefore
> > runtime 
> > support for that needs to be able to use floats and doubles. I
> > also 
> I didn't quite follow that. What parts of the runtime need to operate
> on 
> volatile float/double Java fields?

At the moment, there are multiple places that support the use of Java-
volatile float/double.

Some examples:
* The static interpreter supports Java-volatile getfield/putfield (cf.
cppInterpreter_zero.cpp:588, bytecodeInterpreter.cpp:2023)
* unsafe supports getters and setters of Java-volatile doubles/floats
(cf. unsafe.cpp:476).

This support is not accidental. The Java language allows the use of
volatile floats and doubles. Therefore we must support them in our
runtime.

Thanks for the review.

/Erik

> 
> > 
> > added PrimitiveConversion functionality for the subclasses of oop 
> > (instanceOop and friends). The base class oop already supported
> > this, so 
> > it seemed natural that the subclasses should support it too.
> Ok.
> 
> Thanks,
> David
> -----
> 
> > 
> > Thanks,
> > /Erik


More information about the hotspot-dev mailing list