wfi

Wait For Interrupt (Thumb)

WFI

Wait for interrupt (Thumb).

Details

Wait For Interrupt causes the processor to enter a low-power state and wait until an interrupt is signaled. Execution resumes when an interrupt arrives that is neither masked nor suppressed. No registers or condition flags are modified. WFI is commonly used in idle loops and power management.

Pseudocode Operation

WaitForInterrupt()

Example

WFI

Encoding

Binary Layout
10111111
0011
0000
 
Format Thumb System
Opcode 0xBF30
Extension T32 (Base)

Operands

Reference (Arm AArch32 ISA)

Instruction Forms

Encoding Instruction ISA Bit pattern
0x0320F003 WFI{<c>}{<q>} A32 cond | 00110 | 0 | 10 | 00 | 00 | 1 | 1 | 1 | 1 | 000000000011
0xBF30 WFI{<c>}{<q>} T32 10111111 | 0011 | 0000
0xF3AF8003 WFI{<c>}.W T32 111100111010 | 1 | 1 | 1 | 1 | 10 | 0 | 0 | 0 | 000 | 0000 | 0011

Description

Wait For Interrupt is a hint instruction that indicates that the PE can enter a low-power state and remain there until a wakeup event occurs. For more information, see Wait For Interrupt. As described in Wait For Interrupt, the execution of a WFI instruction that would otherwise cause entry to a low-power state can be trapped to a higher Exception level, see:

Operation

if ConditionPassed() then
    EncodingSpecificOperations();
    if !InterruptPending() then
        if PSTATE.EL == EL0 then
            // Check for traps described by the OS.
            AArch32.CheckForWFxTrap(EL1, WFxType_WFI);
        if PSTATE.EL IN {EL0, EL1} && EL2Enabled() && !IsInHost() then
            // Check for traps described by the Hypervisor.
            AArch32.CheckForWFxTrap(EL2, WFxType_WFI);
        if HaveEL(EL3) && PSTATE.M != M32_Monitor then
            // Check for traps described by the Secure Monitor.
            AArch32.CheckForWFxTrap(EL3, WFxType_WFI);
        integer localtimeout = 1 << 64;  // No local timeout event is generated
        WaitForInterrupt(localtimeout);