RFR: 8366441: AArch64: Support WFET in OnSpinWait [v3]

Ruben duke at openjdk.org
Mon Feb 9 21:33:44 UTC 2026


> Implement OnSpinWait based on WFET - wait for event with timeout:
>  - introduce OnSpinWaitDelay - the OnSpinWait time in nanoseconds;
>  - the OnSpinWaitInstCount is expected to be 1 when WFET is used;
>  - the waiting loop is followed by SB - to ensure following instructions aren't speculated until wait is finished;
>  - the timer register is read via the self-synchronized view CNTVCTSS_EL0 to prevent the read being hoisted out of the loop.
> 
> The WFET and CNTVCTSS_EL0 read are added to aarch64-asmtest.py as hex values - using the instruction mnemonics would require support of -march=armv9-2.a, and consequently, the binutils 2.36+.

Ruben has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains eight commits:

 - Set default OnSpinWaitDelay to 100
 - Address review comments
 - Apply PR review "Suggested changes" from @theRealAph
 - Merge from mainline
 - Fix bsd_aarch64 build
 - Update
   
   - Address review comments
   - Fix test
   - Mark the support experimental
   - Remove changes in src/hotspot/os_cpu/bsd_aarch64
 - Merge from mainline
 - 8366441: AArch64: Support WFET in OnSpinWait
   
   Implement OnSpinWait based on WFET - wait for event with timeout:
    - introduce OnSpinWaitDelay - the OnSpinWait time in nanoseconds;
    - the OnSpinWaitInstCount is expected to be 1 when WFET is used;
    - the waiting loop is followed by SB - to ensure following instructions
      aren't speculated until wait is finished;
    - the timer register is read via the self-synchronized view
      CNTVCTSS_EL0 to prevent the read being hoisted out of the loop.
   
   The WFET and CNTVCTSS_EL0 read are added to aarch64-asmtest.py as
   hex values - using the instruction mnemonics would require support of
   -march=armv9-2.a, and consequently, the binutils 2.36+.
   
   Co-authored-by: Stuart Monteith <stuart.monteith at arm.com>

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

Changes: https://git.openjdk.org/jdk/pull/27030/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27030&range=02
  Stats: 1295 lines in 15 files changed: 157 ins; 2 del; 1136 mod
  Patch: https://git.openjdk.org/jdk/pull/27030.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27030/head:pull/27030

PR: https://git.openjdk.org/jdk/pull/27030


More information about the hotspot-dev mailing list