RFR: 8261649: AArch64: Optimize LSE atomics in C++ code [v2]

Aleksey Shipilev shade at openjdk.java.net
Thu Feb 18 16:56:08 UTC 2021


On Thu, 18 Feb 2021 16:49:00 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> Now that we have support for LSE atomics in C++ HotSpot source, we can generate much better code for them. In particular, the sequence we generate for CMPXCHG with a full two-way barrier using two DMBs is way suboptimal.
>> 
>> This patch:
>> 
>> Moves memory barriers from the atomic_linux_aarch64 file into the stubs.
>> Rewrites the LSE versions of the stubs to be more efficient.
>> Fixes a race condition in stub generation.
>> Mostly leaves the pre-LSE stubs alone, except that I added a PRFM which according to kernel engineers improves performance.
>
> Andrew Haley has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Make things slightly less confusing

src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp line 5655:

> 5653:       acquire = false, release = false; break;
> 5654:     default:
> 5655:       acquire = true, release = true; break;

I think hotspot style is to indent the `case`-s. Also commas in `acquire` and `release` assignments look weird. Consider:

    Register prev = r3;
    Register ptr = c_rarg0;
    Register compare_val = c_rarg1;
    Register exchange_val = c_rarg2;

    bool acquire, release;
    switch (order) {
      case memory_order_relaxed:
        acquire = false;
        release = false;
        break;
      default:
        acquire = true;
        release = true; 
        break;
    }

-------------

PR: https://git.openjdk.java.net/jdk/pull/2611


More information about the hotspot-dev mailing list