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
Operands
Reference
View in Arm A64 ISA 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);