S32E — Store 32-bit for Window Exceptions

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
S32E 01001001 0000
t 3210
s 3210
r 3210

Assembler Syntax

S32E at, as, -64..-4

C Syntax

#include <xtensa/tie/xt_regwin.h>

extern void XT_S32E(int t, int * s, immediate o);

Description

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

S32E is a 32-bit store instruction similar to S32I, but with semantics required by window overflow and window underflow exception handlers. In particular, memory access checking is done with PS.RING instead of CRING, and the offset used to form the virtual address is a 4-bit one-extended immediate. Therefore, the offset can specify multiples of four from -64 to -4. In configurations without the MMU Option, there is no PS.RING and S32E is similar to S32I with a negative offset.

If the Region Translation Option or the MMU Option is enabled, the virtual address is translated to the physical address. If not, the physical address is identical to the virtual address. If the translation or memory reference encounters an error (for example, protection violation or non-existent memory), the processor raises one of several exceptions .

Without the Unaligned Exception Option , the two least significant bits of the address are ignored. A reference to an address that is not 0 mod 4 produces the same result as a reference to the address with the least significant bits cleared. With the Unaligned Exception Option, such an access raises an exception.

S32E is a privileged instruction.

Operation

if CRING != 0 then
	Exception (PrivilegedCause)
else
	vAddr ← AR[s] + (126||r||02)
	ring ← if MMU Option then PS.RING else 0
	Store32Ring (vAddr, AR[t], ring)
endif

Exceptions

Memory Store Group (see Memory Store Group:)GenExcep(PrivilegedCause) if Exception Option

Implementation Pipeline

In Out
art Mstage, ars Estage

Protos that use S32E

proto S32E { in int32 t, in int32 * s, in immediate o }{}{
S32E t, s, o + 0;
}