Rotate Left Word Immediate then AND with Mask
M-Form
- rlwinm RA,RS,SH,MB,ME (Rc=0)
- rlwinm. RA,RS,SH,MB,ME (Rc=1)
Pseudo-code:
n <- SH
r <- ROTL32((RS)[XLEN/2:XLEN-1], n)
m <- MASK32(MB, ME)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Word then AND with Mask
M-Form
- rlwnm RA,RS,RB,MB,ME (Rc=0)
- rlwnm. RA,RS,RB,MB,ME (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL32((RS)[XLEN/2:XLEN-1], n)
m <- MASK32(MB, ME)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Word Immediate then Mask Insert
M-Form
- rlwimi RA,RS,SH,MB,ME (Rc=0)
- rlwimi. RA,RS,SH,MB,ME (Rc=1)
Pseudo-code:
n <- SH
r <- ROTL32((RS)[XLEN/2:XLEN-1], n)
m <- MASK32(MB, ME)
RA <- r&m | (RA) & ¬m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword Immediate then Clear Left
MD-Form
- rldicl RA,RS,sh,mb (Rc=0)
- rldicl. RA,RS,sh,mb (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64((RS), n)
b <- mb[5] || mb[0:4]
m <- MASK(b, (XLEN-1))
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword Immediate then Clear Right
MD-Form
- rldicr RA,RS,sh,me (Rc=0)
- rldicr. RA,RS,sh,me (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64((RS), n)
e <- me[5] || me[0:4]
m <- MASK(0, e)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword Immediate then Clear
MD-Form
- rldic RA,RS,sh,mb (Rc=0)
- rldic. RA,RS,sh,mb (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64((RS), n)
b <- mb[5] || mb[0:4]
m <- MASK(b, ¬n)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword then Clear Left
MDS-Form
- rldcl RA,RS,RB,mb (Rc=0)
- rldcl. RA,RS,RB,mb (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL64((RS), n)
b <- mb[5] || mb[0:4]
m <- MASK(b, (XLEN-1))
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword then Clear Right
MDS-Form
- rldcr RA,RS,RB,me (Rc=0)
- rldcr. RA,RS,RB,me (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL64((RS), n)
e <- me[5] || me[0:4]
m <- MASK(0, e)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Rotate Left Doubleword Immediate then Mask Insert
MD-Form
- rldimi RA,RS,sh,mb (Rc=0)
- rldimi. RA,RS,sh,mb (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64((RS), n)
b <- mb[5] || mb[0:4]
m <- MASK(b, ¬n)
RA <- r&m | (RA)& ¬m
Special Registers Altered:
CR0 (if Rc=1)
Shift Left Word
X-Form
- slw RA,RS,RB (Rc=0)
- slw. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL32((RS)[XLEN/2:XLEN-1], n)
if (RB)[XLEN-6] = 0 then
m <- MASK32(0, ((XLEN/2)-1-n))
else m <- [0]*XLEN
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Shift Right Word
X-Form
- srw RA,RS,RB (Rc=0)
- srw. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL32((RS)[XLEN/2:XLEN-1], XLEN-n)
if (RB)[XLEN-6] = 0 then
m <- MASK32(n, ((XLEN/2)-1))
else m <- [0]*XLEN
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Shift Right Algebraic Word Immediate
X-Form
- srawi RA,RS,SH (Rc=0)
- srawi. RA,RS,SH (Rc=1)
Pseudo-code:
n <- SH
r <- ROTL32((RS)[XLEN/2:XLEN-1], 64-n)
m <- MASK32(n, ((XLEN/2)-1))
s <- (RS)[XLEN/2]
RA <- r&m | ([s]*XLEN)& ¬m
carry <- s & ((r&¬m)[XLEN/2:XLEN-1] != 0)
CA <- carry
CA32 <- carry
Special Registers Altered:
CA CA32
CR0 (if Rc=1)
Shift Right Algebraic Word
X-Form
- sraw RA,RS,RB (Rc=0)
- sraw. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-5:XLEN-1]
r <- ROTL32((RS)[XLEN/2:XLEN-1], XLEN-n)
if (RB)[XLEN-6] = 0 then
m <- MASK32(n, ((XLEN/2)-1))
else m <- [0]*XLEN
s <- (RS)[XLEN/2]
RA <- r&m | ([s]*XLEN)& ¬m
carry <- s & ((r&¬m)[XLEN/2:XLEN-1] != 0)
CA <- carry
CA32 <- carry
Special Registers Altered:
CA CA32
CR0 (if Rc=1)
Shift Left Doubleword
X-Form
- sld RA,RS,RB (Rc=0)
- sld. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-6:XLEN-1]
r <- ROTL64((RS), n)
if (RB)[XLEN-7] = 0 then
m <- MASK(0, XLEN-1-n)
else m <- [0]*XLEN
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Shift Right Doubleword
X-Form
- srd RA,RS,RB (Rc=0)
- srd. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-6:XLEN-1]
r <- ROTL64((RS), XLEN-n)
if (RB)[XLEN-7] = 0 then
m <- MASK(n, (XLEN-1))
else m <- [0]*XLEN
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)
Shift Right Algebraic Doubleword Immediate
XS-Form
- sradi RA,RS,sh (Rc=0)
- sradi. RA,RS,sh (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64((RS), XLEN-n)
m <- MASK(n, (XLEN-1))
s <- (RS)[0]
RA <- r&m | ([s]*XLEN)& ¬m
carry <- s & ((r& ¬m) != 0)
CA <- carry
CA32 <- carry
Special Registers Altered:
CA CA32
CR0 (if Rc=1)
Shift Right Algebraic Doubleword
X-Form
- srad RA,RS,RB (Rc=0)
- srad. RA,RS,RB (Rc=1)
Pseudo-code:
n <- (RB)[XLEN-6:XLEN-1]
r <- ROTL64((RS), XLEN-n)
if (RB)[XLEN-7] = 0 then
m <- MASK(n, (XLEN-1))
else m <- [0]*XLEN
s <- (RS)[0]
RA <- r&m | ([s]*XLEN)& ¬m
carry <- s & ((r&¬m) != 0)
CA <- carry
CA32 <- carry
Special Registers Altered:
CA CA32
CR0 (if Rc=1)
Extend-Sign Word and Shift Left Immediate
XS-Form
- extswsli RA,RS,sh (Rc=0)
- extswsli. RA,RS,sh (Rc=1)
Pseudo-code:
n <- sh
r <- ROTL64(EXTS64(RS[XLEN/2:XLEN-1]), n)
m <- MASK(0, XLEN-1-n)
RA <- r & m
Special Registers Altered:
CR0 (if Rc=1)