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