wfi

Wait For Interrupt (A32)

WFI

Enters low-power state until an interrupt occurs.

Pseudocode Operation

Wait for interrupt; if interrupt is signaled and unmasked, resume execution

Encoding

Binary Layout
cond
31:28
00110
27:23
0
22
10
21:20
00
19:18
00
17:16
1
15
1
14
1
13
1
12
000000000011
11:0
 
Format System Hint
Opcode 0x0320F003
Extension A32 (Base)

Operands

Related

Other forms of wfi

  • wfi Wait For Interrupt
  • wfi Wait For Interrupt (Thumb)

More in A32 (Base)

Reference

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);