Operations:

Format

Syntax:

Operation:

Operands:

Architecture revision

Opcode

1

satrnds Rd >> sa, bp

Temp  = Rd >> sa
if (sa != 0)
      Rnd = Rd[sa-1]
      Temp = Temp + Rnd;
if ((Temp == SE( Temp[bp-1:0])) || (bp == 0) )
      Rd = Temp;
else
      if (Temp[31] == 1)
            Rd = -2bp-1;
      else
            Rd = 2bp-1 - 1;
d ∈ {0, 1, …, 15}
{sa, bp} ∈ {0, 1, …, 31}

Rev1+

111100111011

Rd

000000

bp

sa

12

4

6

5

5

Description

This instruction considers the value in (Rd>>sa)[bp-1:0] as a signed value. Rounding is per- formed after the shift. If the value in (Rd>>sa)[31:bp] is not merely a sign-extention of this value, overflow has occurred and saturation is performed to the maximum signed positive or negative value. If saturation occurs, the Q flag is set. An arithmetic shift is performed on Rd. If bp equals zero, no saturation is performed.

Status Flags:

Q:

Set if saturation occurred or Q was already set, cleared otherwise.

V:

Not affected

N:

Not affected

Z:

Not affected

C:

Not affected