DRAFT Fixed Point Signed Max (Rc=1)

X-Form

  • maxs. RT,RA,RB (Rc=1)

Pseudo-code:

a <- (RA)
b <- (RB)
if   a > b then RT <- a
else            RT <- b
if      a < b then c <-  0b100
else if a > b then c <-  0b010
else               c <-  0b001
CR0 <-  c || XER[SO]

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Fixed Point Signed Max

X-Form

  • maxs RT,RA,RB (Rc=0)

Pseudo-code:

if   (RA) > (RB) then RT <- (RA)
else                  RT <- (RB)

Special Registers Altered:

None

DRAFT Fixed Point Unsigned Max

X-Form

  • maxu RT,RA,RB (Rc=0)
  • maxu. RT,RA,RB (Rc=1)

Pseudo-code:

if   (RA) >u (RB) then RT <- (RA)
else                   RT <- (RB)

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Fixed Point Signed Min

X-Form

  • mins RT,RA,RB (Rc=0)
  • mins. RT,RA,RB (Rc=1)

Pseudo-code:

if   (RA) < (RB) then RT <- (RA)
else                  RT <- (RB)

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Fixed Point Unsigned Min

X-Form

  • minu RT,RA,RB (Rc=0)
  • minu. RT,RA,RB (Rc=1)

Pseudo-code:

if   (RA) <u (RB) then RT <- (RA)
else                   RT <- (RB)

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Average Add

X-Form

  • avgadd RT,RA,RB (Rc=0)
  • avgadd. RT,RA,RB (Rc=1)

Pseudo-code:

a <- [0] * (XLEN+1)
b <- [0] * (XLEN+1)
a[1:XLEN] <- (RA)
b[1:XLEN] <- (RB)
r <- (a + b + 1)
RT <- r[0:XLEN-1]

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Absolute Signed Difference

X-Form

  • absds RT,RA,RB (Rc=0)
  • absds. RT,RA,RB (Rc=1)

Pseudo-code:

if (RA) < (RB) then RT <- ¬(RA) + (RB) + 1
else                RT <- ¬(RB) + (RA) + 1

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Absolute Unsigned Difference

X-Form

  • absdu RT,RA,RB (Rc=0)
  • absdu. RT,RA,RB (Rc=1)

Pseudo-code:

if (RA) <u (RB) then RT <- ¬(RA) + (RB) + 1
else                RT <- ¬(RB) + (RA) + 1

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Absolute Accumulate Unsigned Difference

X-Form

  • absdacu RT,RA,RB (Rc=0)
  • absdacu. RT,RA,RB (Rc=1)

Pseudo-code:

if (RA) <u (RB) then r <- ¬(RA) + (RB) + 1
else                 r <- ¬(RB) + (RA) + 1
RT <- (RT) + r

Special Registers Altered:

CR0                     (if Rc=1)

DRAFT Absolute Accumulate Signed Difference

X-Form

  • absdacs RT,RA,RB (Rc=0)
  • absdacs. RT,RA,RB (Rc=1)

Pseudo-code:

if (RA) < (RB) then r <- ¬(RA) + (RB) + 1
else                r <- ¬(RB) + (RA) + 1
RT <- (RT) + r

Special Registers Altered:

CR0                     (if Rc=1)

Carry Propagate

X-Form

  • cprop RT,RA,RB (Rc=0)
  • cprop. RT,RA,RB (Rc=1)

Pseudo-code:

P <- (RA)
G <- (RB)
temp <- (P|G)+G
RT <- temp^P

Special Registers Altered:

CR0                    (if Rc=1)

DRAFT Bitmanip Masked

BM2-Form

  • bmask RT,RA,RB,bm,L

Pseudo-code:

if _RB = 0 then mask <- [1] * XLEN
else mask <- (RB)
ra <- (RA) & mask
a1 <- ra
if bm[4] = 0 then a1 <- ¬ra
mode2 <- bm[2:3]
if mode2 = 0 then a2 <- (¬ra)+1
if mode2 = 1 then a2 <- ra-1
if mode2 = 2 then a2 <- ra+1
if mode2 = 3 then a2 <- ¬(ra+1)
a1 <- a1 & mask
a2 <- a2 & mask
# select operator
mode3 <- bm[0:1]
if mode3 = 0 then result <- a1 | a2
if mode3 = 1 then result <- a1 & a2
if mode3 = 2 then result <- a1 ^ a2
if mode3 = 3 then result <- undefined([0]*XLEN)
result <- result & mask
# optionally restore masked-out bits
if L = 1 then
    result <- result | (RA & ¬mask)
RT <- result

Special Registers Altered:

None

Load Floating-Point Immediate

DX-Form

  • fmvis FRS,D

Pseudo-code:

bf16 <- d0 || d1 || d2
fp32 <- bf16 || [0]*16
FRS  <- DOUBLE(fp32)

Special Registers Altered:

None

Float Replace Lower-Half Single, Immediate

DX-Form

  • fishmv FRS,D

Pseudo-code:

fp32 <- SINGLE((FRS))
fp32[16:31] <- d0 || d1 || d2
FRS <- DOUBLE(fp32)

Special Registers Altered:

None