RFR: 8186670: Implement _onSpinWait() intrinsic for AArch64
Evgeny Astigeevich
github.com+42899633+eastig at openjdk.java.net
Fri Sep 17 20:01:40 UTC 2021
On Fri, 17 Sep 2021 16:44:27 GMT, Stuart Monteith <smonteith 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
>
> 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?
Good catch. It is a copy-paste error.
Is there any method to test C1 generated assembly code?
-------------
PR: https://git.openjdk.java.net/jdk/pull/5562
More information about the hotspot-dev
mailing list