Use FEAT_WFxT (armv8.7) for spin-waiting

Open
#118,933 7 comments 1 reaction 1 assignee View on GitHub

@EgorBo is already working on this.

Since Aug 20, 2025.

Assessment

This issue has not been assessed yet.

Description

area-CodeGen-coreclr

Currently we use yield instruction (which is basically an alias of nop) and it has an impact on CPU usage. We should consider switching to "Wait-for-Event with timeout" instruction:

Example (generated by GPT):

        // Armv8.7-A + FEAT_WFxT
        // quick_spin_wait(): brief pause (~50µs) using WFET
        .p2align 4
quick_spin_wait:
        mrs     x9,  CNTVCT_EL0         // now
        mrs     x10, CNTFRQ_EL0         // counter Hz
        mov     x11, #50                // microseconds
        mul     x12, x10, x11           // Hz * usec
        mov     x13, #1000000
        udiv    x12, x12, x13           // ticks for ~50us
        add     x12, x9,  x12           // absolute deadline

        sevl
        wfet    x12                     // clear event reg / quick bail
        wfet    x12                     // sleep until event/timeout

        ret

Hopefully, all of these are allowed in the user space.

Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/runtime

All issues in dotnet/runtime

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.