WAITI — Wait for Interrupt

Instruction Word

Slot
Inst
6
3
6
2
6
1
6
0
5
9
5
8
5
7
5
6
5
5
5
4
5
3
5
2
5
1
5
0
4
9
4
8
4
7
4
6
4
5
4
4
4
3
4
2
4
1
4
0
3
9
3
8
3
7
3
6
3
5
3
4
3
3
3
2
3
1
3
0
2
9
2
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
1
9
1
8
1
7
1
6
1
5
1
4
1
3
1
2
1
1
1
0
9876543210
Format x24 - 24 bit(s) 0
WAITI 000000000111 00000000
s 3210

Assembler Syntax

WAITI 0..15

C Syntax

#include <xtensa/tie/xt_interrupt.h>

extern void XT_WAITI(immediate s);

Description

(please consult the Xtensa ® Instruction Set Architecture Reference Manual for any cross references and additional information)

WAITI sets the interrupt level in PS.INTLEVEL to imm4 and then, on some Xtensa ISA implementations, suspends processor operation until an interrupt occurs. WAITI is typically used in an idle loop to reduce power consumption. CCOUNT continues to increment during suspended operation, and a CCOMPARE interrupt will wake the processor.

When an interrupt is taken during suspended operation, EPC[i] will have the address of the instruction following WAITI. An implementation is not required to enter suspended operation and may leave suspended operation and continue execution at the following instruction at any time. Usually, therefore, the WAITI instruction should be within a loop.

The combination of setting the interrupt level and suspending operation avoids a race condition where an interrupt between the interrupt level setting and the suspension of operation would be ignored until a second interrupt occurred.

WAITI is a privileged instruction.

Operation

if CRING != 0 then
	Exception (PrivilegedCause)
else
	PS.INTLEVEL ← imm4
endif

Exceptions

EveryInst Group (see EveryInst Group:)GenExcep(PrivilegedCause) if Exception Option

Protos that use WAITI

proto WAITI { in immediate s }{}{
WAITI s + 0;
}