RFR (S): 8193063: Enabling narrowOop values for RawAccess accesses
Erik Österlund
erik.osterlund at oracle.com
Tue Jan 9 11:09:52 UTC 2018
Hi Kim,
Thank you for the review.
Incremental webrev:
http://cr.openjdk.java.net/~eosterlund/8193063/webrev.00_01/
Full webrev:
http://cr.openjdk.java.net/~eosterlund/8193063/webrev.01/
On 2018-01-08 20:23, Kim Barrett wrote:
>> On Dec 5, 2017, at 9:49 AM, Erik Österlund <erik.osterlund at oracle.com> wrote:
>>
>> Hi,
>>
>> In order to replace oopDesc::load_heap_oop() but with stricter memory ordering properties, like MO_VOLATILE, some Access tweaks are required to allow RawAccess<>::oop_load() to return narrowOop values.
>>
>> I made the necessary changes to allow narrowOop values for all RawAccess operations that have an address (not the _at variants).
>>
>> While I am at it, I thought I'd clean up a few things that bug me:
>>
>> * The decorator verification for memory ordering specifically did not work as I originally intended, leading to harder to decipher compiler errors deeper down when using the wrong memory ordering decorators
> I kind of wish that had been dealt with separately. Oh well.
>
>> * An unnecessary include of oop.inline.hpp was removed from the G1 barrier set.
>>
>> This change helps solving the following bug:
>> https://bugs.openjdk.java.net/browse/JDK-8129440
>>
>> This bug is filed under:
>> https://bugs.openjdk.java.net/browse/JDK-8193063
>>
>> Webrev:
>> http://cr.openjdk.java.net/~eosterlund/8193063/webrev.00/
>>
>> Thanks,
>> /Erik
> ------------------------------------------------------------------------------
> src/hotspot/share/oops/access.inline.hpp
> 525 typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
> 582 typedef RawAccessBarrier<decorators & RAW_DECORATOR_MASK> Raw;
>
> I don't see any use of these Raw types. They look like copy-paste as
> part of splitting into two specializations.
Fixed.
>
> ------------------------------------------------------------------------------
> src/hotspot/share/oops/access.inline.hpp
>
> Too bad we don't have C++17. I think making can_hardwire_raw constexpr
> and using the new "if constexpr" syntax would have been sufficient.
Indeed. I stopped for a second, cried a bit about the lack of constexpr,
and then did it the C++03 way.
> ------------------------------------------------------------------------------
> src/hotspot/share/oops/access.inline.hpp
>
> I was initially thinking I wanted names for these two expressions,
> since they are repeated a bunch of times:
>
> HasDecorator<decorators, AS_RAW>::value && CanHardwireRaw<decorators>::value
> HasDecorator<decorators, AS_RAW>::value && !CanHardwireRaw<decorators>::value
>
> But I think what I really want is the better function template SFINAE
> syntax allowed by C++11, e.g.
>
> template<DecoratorSet decorators, typename T,
> ENABLE_IF(HasDecorator<Decorators, AS_RAW>),
> DISABLE_IF(CanHardwireRaw<decorators>)>
> inline static T store(...) ...
Yes, we are a bit stuck with old school SFINAE for some time.
> ------------------------------------------------------------------------------
> src/hotspot/share/oops/access.inline.hpp
> 796 // Step 2: Reduce types.
>
> This comment looks like it needs updating for the narrowOop value
> support.
Unfortunately, the comment was already accurate (and hence was
inaccurate before).
> ------------------------------------------------------------------------------
> src/hotspot/share/oops/accessBackend.hpp
> 176 AccessInternal::MustConvertCompressedOop<idecorators, T>::value,
>
> Wrong indentation.
>
> ------------------------------------------------------------------------------
Fixed.
Thanks,
/Erik
More information about the hotspot-gc-dev
mailing list