SRAI — Shift Right Arithmetic Immediate

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
SRAI 001 0001 0000
r 3210
t 3210
sargt 4 3210

Assembler Syntax

SRAI ar, at, 0..31

C Syntax

#include <xtensa/tie/xt_core.h>

extern int XT_SRAI(int t, immediate i);

Description

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

SRAI arithmetically shifts the contents of address register at right, inserting the sign of at on the left, by a constant amount encoded in the instruction word in the range 0..31. The shift amount sa field is split, with bits 3..0 in bits 11..8 of the instruction word, and bit 4 in bit 20 of the instruction word.

Operation

AR[r] ← ((AR[t]31)32||AR[t])31+sa..sa

Exceptions

EveryInstR Group (see EveryInstR Group:)

Implementation Pipeline

In Out
art Estage arr Estage

Protos that use SRAI

proto SRAI { out int32 r, in int32 t, in immediate i }{}{
SRAI r, t, i + 0;
}
proto int16_rtor_ae_f64 { out ae_f64 d, in int16 a }{int32 t}{
SRAI t, a, 31;
AE_MOVDA32X2 d, t, a;
}
proto int16_rtor_ae_int64 { out ae_int64 d, in int16 a }{int32 t}{
SRAI t, a, 31;
AE_MOVDA32X2 d, t, a;
}
proto int32_rtor_ae_f64 { out ae_f64 d, in int32 a }{int32 t}{
SRAI t, a, 31;
AE_MOVDA32X2 d, t, a;
}
proto int32_rtor_ae_int64 { out ae_int64 d, in int32 a }{int32 t}{
SRAI t, a, 31;
AE_MOVDA32X2 d, t, a;
}