RFR: 8186670: Implement _onSpinWait() intrinsic for AArch64
Stuart Monteith
smonteith at openjdk.java.net
Fri Sep 17 17:38:49 UTC 2021
On Fri, 17 Sep 2021 11:26:03 GMT, Evgeny Astigeevich <github.com+42899633+eastig at openjdk.org> wrote:
> This PR is a follow-up on the discussion [“RFC: AArch64: Implementing spin pauses with ISB”](https://mail.openjdk.java.net/pipermail/hotspot-dev/2021-August/054033.html).
>
> It adds the option `UsePauseImpl=value`, where `value` can be:
>
> - `none`: no implementation for spin pauses. This is the default value.
> - `Nnop`: use `nop` instruction for spin pauses. Optional `N` can be `2..9` to specify a number of `nop` instructions.
> - `Nisb`: use `isb` instruction for spin pauses. Optional `N` can be `2..9` to specify a number of `isb` instructions.
> - `Nyield`: use `yield` instruction for spin pauses. Optional `N` can be `2..9` to specify a number of `yield` instructions.
>
> The code for the `Thread.onSpinWait` intrinsic is generated based on the value of `UsePauseImpl`.
>
> Testing:
>
> - `make test TEST="gtest"`: Passed
> - `make run-test TEST="tier1"`: Passed
> - `make run-test TEST="tier2"`: Passed
> - `make run-test TEST=hotspot/jtreg/compiler/onSpinWait`: Passed
Looks Ok to me, this is the most future proof option.
Will you be adding code to set the default depending on model, or is that something for your fork?
src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp line 2989:
> 2987: switch (VM_Version::pause_impl_desc().inst()) {
> 2988: case NOP:
> 2989: for (unsigned int i = 1; i < VM_Version::pause_impl_desc().inst_count(); ++i) {
Shouldn't these loops be indexed from 0?
-------------
PR: https://git.openjdk.java.net/jdk/pull/5562
More information about the hotspot-dev
mailing list