* addi RT,RA,SI
+Pseudo-code:
+
if RA = 0 then RT <- EXTS(SI)
else RT <- (RA) + EXTS(SI)
None
# Add Immediate Shifted
+# Add Immediate Shifted
D-Form
* addis RT,RA,SI
+Pseudo-code:
+
if RA = 0 then RT <- EXTS(SI || [0]*16)
else RT <- (RA) + EXTS(SI || [0]*16)
None
# Add PC Immediate Shifted
+# Add PC Immediate Shifted
DX-Form
* addpcis RT,D
+Pseudo-code:
+
D <- d0||d1||d2
RT <- NIA + EXTS(D || [0]*16)
None
# Add
+# Add
XO-Form
* addo RT,RA,RB (OE=1 Rc=0)
* addo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + (RB)
Special Registers Altered:
SO OV OV32 (if OE=1)
# Subtract From
+# Subtract From
XO-Form
* subfo RT,RA,RB (OE=1 Rc=0)
* subfo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + (RB) + 1
Special Registers Altered:
SO OV OV32 (if OE=1)
# Add Immediate Carrying
+# Add Immediate Carrying
D-Form
* addic RT,RA,SI
+Pseudo-code:
+
RT <- (RA) + EXTS(SI)
Special Registers Altered:
CA CA32
# Add Immediate Carrying and Record
+# Add Immediate Carrying and Record
D-Form
* addic. RT,RA,SI
+Pseudo-code:
+
RT <- (RA) + EXTS(SI)
Special Registers Altered:
CR0 CA CA32
# Subtract From Immediate Carrying
+# Subtract From Immediate Carrying
D-Form
* subfic RT,RA,SI
+Pseudo-code:
+
RT <- ¬(RA) + EXTS(SI) + 1
Special Registers Altered:
CA CA32
# Add Carrying
+# Add Carrying
XO-Form
* addco RT,RA,RB (OE=1 Rc=0)
* addco. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + (RB)
Special Registers Altered:
SO OV OV32 (if OE=1)
# Subtract From Carrying
+# Subtract From Carrying
XO-Form
* subfco RT,RA,RB (OE=1 Rc=0)
* subfco. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + (RB) + 1
Special Registers Altered:
SO OV OV32 (if OE=1)
# Add Extended
+# Add Extended
XO-Form
* addeo RT,RA,RB (OE=1 Rc=0)
* addeo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + (RB) + CA
Special Registers Altered:
SO OV OV32 (if OE=1)
# Subtract From Extended
+# Subtract From Extended
XO-Form
* subfeo RT,RA,RB (OE=1 Rc=0)
* subfeo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + (RB) + CA
Special Registers Altered:
SO OV OV32 (if OE=1)
# Add to Minus One Extended
+# Add to Minus One Extended
XO-Form
* addmeo RT,RA (OE=1 Rc=0)
* addmeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + CA - 1
Special Registers Altered:
SO OV OV32 (if OE=1)
# Subtract From Minus One Extended
+# Subtract From Minus One Extended
XO-Form
* subfmeo RT,RA (OE=1 Rc=0)
* subfmeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + CA - 1
Special Registers Altered:
SO OV OV32 (if OE=1)
# Add Extended using alternate carry bit
+# Add Extended using alternate carry bit
Z23-Form
* addex RT,RA,RB,CY
+Pseudo-code:
+
if CY=0 then RT <- (RA) + (RB) + OV
Special Registers Altered:
OV OV32 (if CY=0 )
# Subtract From Zero Extended
+# Subtract From Zero Extended
XO-Form
* subfzeo RT,RA (OE=1 Rc=0)
* subfzeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + CA
Special Registers Altered:
SO OV OV32 (if OE=1)
# Add to Zero Extended
+# Add to Zero Extended
XO-Form
* addzeo RT,RA (OE=1 Rc=0)
* addzeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + CA
Special Registers Altered:
SO OV OV32 (if OE=1)
# Negate
+# Negate
XO-Form
* nego RT,RA (OE=1 Rc=0)
* nego. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + 1
Special Registers Altered:
SO OV OV32 (if OE=1)
# Multiply Low Immediate
+# Multiply Low Immediate
D-Form
* mulli RT,RA,SI
+Pseudo-code:
+
prod[0:127] <- (RA) * EXTS(SI)
RT <- prod[64:127]
None
# Multiply High Word
+# Multiply High Word
XO-Form
* mulhw RT,RA,RB (Rc=0)
* mulhw. RT,RA,RB (Rc=1)
+Pseudo-code:
+
prod[0:63] <- (RA)[32:63] * (RB)[32:63]
RT[32:63] <- prod[0:31]
RT[0:31] <- undefined[0:31]
CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
# Multiply Low Word
+# Multiply Low Word
XO-Form
* mullwo RT,RA,RB (OE=1 Rc=0)
* mullwo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA)[32:63] * (RB)[32:63]
Special Registers Altered:
SO OV OV32 (if OE=1)
# Multiply High Word Unsigned
+# Multiply High Word Unsigned
XO-Form
* mulhwu RT,RA,RB (Rc=0)
* mulhwu. RT,RA,RB (Rc=1)
+Pseudo-code:
+
prod[0:63] <- (RA)[32:63] * (RB)[32:63]
RT[32:63] <- prod[0:31]
RT[0:31] <- undefined[0:31]
CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
# Divide Word
+# Divide Word
XO-Form
* divwo RT,RA,RB (OE=1 Rc=0)
* divwo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:31] <- (RA)[32:63]
divisor[0:31] <- (RB) [32:63]
if (((dividend = 0x8000_0000) &
SO OV OV32 (if OE=1)
# Divide Word Unsigned
+# Divide Word Unsigned
XO-Form
* divwuo RT,RA,RB (OE=1 Rc=0)
* divwuo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:31] <- (RA)[32:63]
divisor[0:31] <- (RB)[32:63]
if divisor != 0 then
SO OV OV32 (if OE=1)
# Divide Word Extended
+# Divide Word Extended
XO-Form
* divweo RT,RA,RB (OE=1 Rc=0)
* divweo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:63] <- (RA)[32:63] || [0]*32
divisor[0:63] <- [0]*32 || (RB)[32:63]
if (divisor = 0x0000_0000_0000_0000) then
SO OV OV32 (if OE=1)
# Divide Word Extended Unsigned
+# Divide Word Extended Unsigned
XO-Form
* divweuo RT,RA,RB (OE=1 Rc=0)
* divweuo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:63] <- (RA)[32:63] || [0]*32
divisor[0:63] <- [0]*32 || (RB)[32:63]
if (divisor = 0x0000_0000_0000_0000) then
SO OV OV32 (if OE=1)
# Modulo Signed Word
+# Modulo Signed Word
X-Form
* modsw RT,RA,RB
+Pseudo-code:
+
dividend[0:31] <- (RA)[32:63]
divisor [0:31] <- (RB)[32:63]
if (((dividend = 0x8000_0000) &
None
# Modulo Unsigned Word
+# Modulo Unsigned Word
X-Form
* moduw RT,RA,RB
+Pseudo-code:
+
dividend[0:31] <- (RA) [32:63]
divisor [0:31] <- (RB) [32:63]
if divisor = 0x0000_0000 then
None
# Deliver A Random Number
+# Deliver A Random Number
X-Form
* darn RT,L
+Pseudo-code:
+
RT <- random(L)
Special Registers Altered:
none
# Multiply Low Doubleword
+# Multiply Low Doubleword
XO-Form
* mulldo RT,RA,RB (OE=1 Rc=0)
* mulldo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
RT <- prod[64:127]
SO OV OV32 (if OE=1)
# Multiply High Doubleword
+# Multiply High Doubleword
XO-Form
* mulhd RT,RA,RB (Rc=0)
* mulhd. RT,RA,RB (Rc=1)
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
RT <- prod[0:63]
CR0 (if Rc=1)
# Multiply High Doubleword Unsigned
+# Multiply High Doubleword Unsigned
XO-Form
* mulhdu RT,RA,RB (Rc=0)
* mulhdu. RT,RA,RB (Rc=1)
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
RT <- prod[0:63]
CR0 (if Rc=1)
# Multiply-Add High Doubleword VA-Form
+# Multiply-Add High Doubleword VA-Form
VA-Form
* maddhd RT,RA.RB,RC
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
sum[0:127] <- prod + EXTS(RC)
RT <- sum[0:63]
None
# Multiply-Add High Doubleword Unsigned
+# Multiply-Add High Doubleword Unsigned
VA-Form
* maddhdu RT,RA.RB,RC
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
sum[0:127] <- prod + EXTZ(RC)
RT <- sum[0:63]
None
# Multiply-Add Low Doubleword
+# Multiply-Add Low Doubleword
VA-Form
* maddld RT,RA.RB,RC
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
sum[0:127] <- prod + EXTS(RC)
RT <- sum[64:127]
None
# Divide Doubleword
+# Divide Doubleword
XO-Form
* divdo RT,RA,RB (OE=1 Rc=0)
* divdo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:63] <- (RA)
divisor[0:63] <- (RB)
if (((dividend = 0x8000_0000_0000_0000) &
SO OV OV32 (if OE=1)
# Divide Doubleword Unsigned
+# Divide Doubleword Unsigned
XO-Form
* divduo RT,RA,RB (OE=1 Rc=0)
* divduo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:63] <- (RA)
divisor[0:63] <- (RB)
if (divisor = 0x0000_0000_0000_0000) then
SO OV OV32 (if OE=1)
# Divide Doubleword Extended
+# Divide Doubleword Extended
XO-Form
* divdeo RT,RA,RB (OE=1 Rc=0)
* divdeo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:127] <- (RA) || [0]*64
divisor[0:127] <- [0*64] || (RB)
if divisor = [0]*128 then
SO OV OV32 (if OE=1)
# Divide Doubleword Extended Unsigned
+# Divide Doubleword Extended Unsigned
XO-Form
* divdeuo RT,RA,RB (OE=1 Rc=0)
* divdeuo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
dividend[0:127] <- (RA) || [0]*64
divisor[0:127] <- [0*64] || (RB)
if divisor = [0]*128 then
SO OV OV32 (if OE=1)
# Modulo Signed Doubleword
+# Modulo Signed Doubleword
X-Form
* modsd RT,RA,RB
+Pseudo-code:
+
dividend <- (RA)
divisor <- (RB)
if (((dividend = 0x8000_0000_0000_0000) &
None
# Modulo Unsigned Doubleword
+# Modulo Unsigned Doubleword
X-Form
* modud RT,RA,RB
+Pseudo-code:
+
dividend <- (RA)
divisor <- (RB)
if (divisor = 0x0000_0000_0000_0000) then