wfi

Wait For Interrupt (Thumb)

WFI

Wait for interrupt (Thumb).

Pseudocode Operation

WaitForInterrupt()

Encoding

Binary Layout
10111111
15:8
0011
7:4
0000
3:0
 
Format Thumb System
Opcode 0xBF30
Extension T32 (Base)

Operands

Related

Other forms of wfi

  • wfi Wait For Interrupt
  • wfi Wait For Interrupt (A32)

More in T32 (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);