Skip to content

Use FEAT_WFxT (armv8.7) for spin-waiting #118933

Description

@EgorBo

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.

Metadata

Metadata

Assignees

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions