* addi RT,RA,SI
- if RA = 0 then RT <- EXTS(SI)
- else RT <- (RA) + EXTS(SI)
+Pseudo-code:
+
+ RT <- (RA|0) + EXTS(SI)
Special Registers Altered:
* addis RT,RA,SI
- if RA = 0 then RT <- EXTS(SI || 160)
- else RT <- (RA) + EXTS(SI || [0]*16)
+Pseudo-code:
+
+ RT <- (RA|0) + EXTS(SI || [0]*16)
Special Registers Altered:
* addpcis RT,D
+Pseudo-code:
+
D <- d0||d1||d2
RT <- NIA + EXTS(D || [0]*16)
* addo RT,RA,RB (OE=1 Rc=0)
* addo. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + (RB)
Special Registers Altered:
* 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:
* addic RT,RA,SI
+Pseudo-code:
+
RT <- (RA) + EXTS(SI)
Special Registers Altered:
* addic. RT,RA,SI
+Pseudo-code:
+
RT <- (RA) + EXTS(SI)
Special Registers Altered:
* subfic RT,RA,SI
+Pseudo-code:
+
RT <- ¬(RA) + EXTS(SI) + 1
Special Registers Altered:
* addco RT,RA,RB (OE=1 Rc=0)
* addco. RT,RA,RB (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + (RB)
Special Registers Altered:
* 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:
* 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:
* 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:
* addmeo RT,RA (OE=1 Rc=0)
* addmeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + CA - 1
Special Registers Altered:
* subfmeo RT,RA (OE=1 Rc=0)
* subfmeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + CA - 1
Special Registers Altered:
* addex RT,RA,RB,CY
+Pseudo-code:
+
if CY=0 then RT <- (RA) + (RB) + OV
Special Registers Altered:
* subfzeo RT,RA (OE=1 Rc=0)
* subfzeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + CA
Special Registers Altered:
* addzeo RT,RA (OE=1 Rc=0)
* addzeo. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- (RA) + CA
Special Registers Altered:
* nego RT,RA (OE=1 Rc=0)
* nego. RT,RA (OE=1 Rc=1)
+Pseudo-code:
+
RT <- ¬(RA) + 1
Special Registers Altered:
* mulli RT,RA,SI
- prod[0:127] <- (RA) * EXTS(SI)
+Pseudo-code:
+
+ prod[0:127] <- MULS((RA), EXTS(SI))
RT <- prod[64:127]
Special Registers Altered:
* mulhw RT,RA,RB (Rc=0)
* mulhw. RT,RA,RB (Rc=1)
- prod[0:63] <- (RA)[32:63] * (RB)[32:63]
+Pseudo-code:
+
+ prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
RT[32:63] <- prod[0:31]
- RT[0:31] <- undefined
+ RT[0:31] <- prod[0:31]
Special Registers Altered:
* mullwo RT,RA,RB (OE=1 Rc=0)
* mullwo. RT,RA,RB (OE=1 Rc=1)
- RT <- (RA)[32:63] * (RB)[32:63]
+Pseudo-code:
+
+ prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
+ RT <- prod
+ overflow <- ((prod[0:32] != [0]*33) &
+ (prod[0:32] != [1]*33))
Special Registers Altered:
* 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
+ RT[0:31] <- prod[0:31]
Special Registers Altered:
* 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]
- RT[32:63] <- dividend / divisor
- RT[0:31] <- undefined
+ if (((dividend = 0x8000_0000) &
+ (divisor = 0xffff_ffff)) |
+ (divisor = 0x0000_0000)) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT[32:63] <- DIVS(dividend, divisor)
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
Special Registers Altered:
* 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]
- RT[32:63] <- dividend / divisor
- RT[0:31] <- undefined
+ if divisor != 0 then
+ RT[32:63] <- dividend / divisor
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
+ else
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
Special Registers Altered:
* 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:31] <- (RB)[32:63]
- RT[32:63] <- dividend / divisor
- RT[0:31] <- undefined
+ divisor[0:63] <- [0]*32 || (RB)[32:63]
+ if (divisor = 0x0000_0000_0000_0000) then
+ overflow <- 1
+ else
+ result <- DIVS(dividend, divisor)
+ if (result[32:63] = 0) then
+ RT[32:63] <- result[0:31]
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
+ else
+ overflow <- 1
+ if overflow = 1 then
+ RT[0:63] <- undefined[0:63]
Special Registers Altered:
* 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:31] <- (RB)[32:63]
- RT[32:63] <- dividend / divisor
- RT[0:31] <- undefined
+ divisor[0:63] <- [0]*32 || (RB)[32:63]
+ if (divisor = 0x0000_0000_0000_0000) then
+ overflow <- 1
+ else
+ result <- dividend / divisor
+ if (RA) < (RB) then
+ RT[32:63] <- result[0:31]
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
+ else
+ overflow <- 1
+ if overflow = 1 then
+ RT[0:63] <- undefined[0:63]
Special Registers Altered:
* modsw RT,RA,RB
+Pseudo-code:
+
dividend[0:31] <- (RA)[32:63]
- divisor [0:31] <- (RB)[32:63]-
- RT[32:63] <- dividend % divisor
- RT[0:31 ] <- undefined
+ divisor [0:31] <- (RB)[32:63]
+ if (((dividend = 0x8000_0000) &
+ (divisor = 0xffff_ffff)) |
+ (divisor = 0x0000_0000)) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT[32:63] <- MODS(dividend, divisor)
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
Special Registers Altered:
* moduw RT,RA,RB
+Pseudo-code:
+
dividend[0:31] <- (RA) [32:63]
divisor [0:31] <- (RB) [32:63]
- RT[32:63] <- dividend % divisor
- RT[0:31 ] <- undefined
+ if divisor = 0x0000_0000 then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT[32:63] <- MODS(dividend, divisor)
+ RT[0:31] <- undefined[0:31]
+ overflow <- 0
Special Registers Altered:
X-Form
-* darn RT,L
+* darn RT,L3
- RT <- random(L)
+Pseudo-code:
+
+ RT <- random(L3)
Special Registers Altered:
* mulldo RT,RA,RB (OE=1 Rc=0)
* mulldo. RT,RA,RB (OE=1 Rc=1)
- prod[0:127] <- (RA) * (RB)
+Pseudo-code:
+
+ prod[0:127] <- MULS((RA), (RB))
RT <- prod[64:127]
+ overflow <- ((prod[0:64] != [0]*65) &
+ (prod[0:64] != [1]*65))
Special Registers Altered:
* mulhd RT,RA,RB (Rc=0)
* mulhd. RT,RA,RB (Rc=1)
- prod[0:127] <- (RA) * (RB)
+Pseudo-code:
+
+ prod[0:127] <- MULS((RA), (RB))
RT <- prod[0:63]
Special Registers Altered:
* mulhdu RT,RA,RB (Rc=0)
* mulhdu. RT,RA,RB (Rc=1)
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
RT <- prod[0:63]
* maddhd RT,RA.RB,RC
- prod[0:127] <- (RA) * (RB)
+Pseudo-code:
+
+ prod[0:127] <- MULS((RA), (RB))
sum[0:127] <- prod + EXTS(RC)
RT <- sum[0:63]
* maddhdu RT,RA.RB,RC
+Pseudo-code:
+
prod[0:127] <- (RA) * (RB)
sum[0:127] <- prod + EXTZ(RC)
RT <- sum[0:63]
* maddld RT,RA.RB,RC
+Pseudo-code:
- prod[0:127] <- (RA) * (RB)
+ prod[0:127] <- MULS((RA), (RB))
sum[0:127] <- prod + EXTS(RC)
RT <- sum[64:127]
* 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)
- RT <- dividend / divisor
+ if (((dividend = 0x8000_0000_0000_0000) &
+ (divisor = 0xffff_ffff_ffff_ffff)) |
+ (divisor = 0x0000_0000_0000_0000)) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT <- DIVS(dividend, divisor)
+ overflow <- 0
Special Registers Altered:
* 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)
- RT <- dividend / divisor
+ if (divisor = 0x0000_0000_0000_0000) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT <- dividend / divisor
+ overflow <- 0
Special Registers Altered:
* 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:63] <- (RB)
- RT <- dividend / divisor
+ divisor[0:127] <- [0]*64 || (RB)
+ if divisor = [0]*128 then
+ overflow <- 1
+ else
+ result <- DIVS(dividend, divisor)
+ if result[64:127] = 0x0000_0000_0000_0000 then
+ RT <- result[63:127]
+ overflow <- 0
+ else
+ overflow <- 1
+ if overflow = 1 then
+ RT[0:63] <- undefined[0:63]
Special Registers Altered:
* 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:63] <- (RB)
- RT <- dividend / divisor
+ divisor[0:127] <- [0]*64 || (RB)
+ if divisor = [0]*128 then
+ overflow <- 1
+ else
+ result <- dividend / divisor
+ if (RA) < (RB) then
+ RT <- result[63:127]
+ overflow <- 0
+ else
+ overflow <- 1
+ if overflow = 1 then
+ RT[0:63] <- undefined[0:63]
Special Registers Altered:
* modsd RT,RA,RB
+Pseudo-code:
+
dividend <- (RA)
divisor <- (RB)
- RT <- dividend % divisor
+ if (((dividend = 0x8000_0000_0000_0000) &
+ (divisor = 0xffff_ffff_ffff_ffff)) |
+ (divisor = 0x0000_0000_0000_0000)) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT <- MODS(dividend, divisor)
+ overflow <- 0
Special Registers Altered:
* modud RT,RA,RB
+Pseudo-code:
+
dividend <- (RA)
divisor <- (RB)
- RT <- dividend % divisor
+ if (divisor = 0x0000_0000_0000_0000) then
+ RT[0:63] <- undefined[0:63]
+ overflow <- 1
+ else
+ RT <- dividend % divisor
+ overflow <- 0
Special Registers Altered: