# Add Immediate Add Immediate Shifted addi RT,RA,SI if RA = 0 then RT <- EXTS(SI) else RT <- (RA) + EXTS(SI) addis RT,RA,SI if RA = 0 then RT <- EXTS(SI || 160) else RT <- (RA) + EXTS(SI || [0]*16) # Add PC Immediate Shifted addpcis RT,D D <- d0||d1||d2 RT <- NIA + EXTS(D || [0]*16) # Add add RT,RA,RB (OE=0 Rc=0) add. RT,RA,RB (OE=0 Rc=1) addo RT,RA,RB (OE=1 Rc=0) addo. RT,RA,RB (OE=1 Rc=1) RT <- (RA) + (RB) # Subtract From subf RT,RA,RB (OE=0 Rc=0) subf. RT,RA,RB (OE=0 Rc=1) subfo RT,RA,RB (OE=1 Rc=0) subfo. RT,RA,RB (OE=1 Rc=1) RT <- ¬(RA) + (RB) + 1 # Add Immediate Carrying addic RT,RA,SI RT <- (RA) + EXTS(SI) # Add Immediate Carrying and Record addic. RT,RA,SI RT <- (RA) + EXTS(SI) # Subtract From Immediate Carrying subfic RT,RA,SI RT <- ¬(RA) + EXTS(SI) + 1 # Add Carrying addc RT,RA,RB (OE=0 Rc=0) addc. RT,RA,RB (OE=0 Rc=1) addco RT,RA,RB (OE=1 Rc=0) addco. RT,RA,RB (OE=1 Rc=1) RT <- (RA) + (RB) # Subtract From Carrying subfc RT,RA,RB (OE=0 Rc=0) subfc. RT,RA,RB (OE=0 Rc=1) subfco RT,RA,RB (OE=1 Rc=0) subfco. RT,RA,RB (OE=1 Rc=1) RT <- ¬(RA) + (RB) + 1 # Add Extended adde RT,RA,RB (OE=0 Rc=0) adde. RT,RA,RB (OE=0 Rc=1) addeo RT,RA,RB (OE=1 Rc=0) addeo. RT,RA,RB (OE=1 Rc=1) RT <- (RA) + (RB) + CA # Subtract From Extended subfe RT,RA,RB (OE=0 Rc=0) subfe. RT,RA,RB (OE=0 Rc=1) subfeo RT,RA,RB (OE=1 Rc=0) subfeo. RT,RA,RB (OE=1 Rc=1) RT <- ¬(RA) + (RB) + CA #Add to Minus One Extended # Subtract From Minus One Extended addme RT,RA (OE=0 Rc=0) addme. RT,RA (OE=0 Rc=1) addmeo RT,RA (OE=1 Rc=0) addmeo. RT,RA (OE=1 Rc=1) RT <- (RA) + CA - 1 subfme RT,RA (OE=0 Rc=0) subfme. RT,RA (OE=0 Rc=1) subfmeo RT,RA (OE=1 Rc=0) subfmeo. RT,RA (OE=1 Rc=1) RT <- ¬(RA) + CA - 1 # Add Extended using alternate carry bit addex RT,RA,RB,CY if CY=0 then RT <- (RA) + (RB) + OV # Subtract From Zero Extended XO-form subfze RT,RA (OE=0 Rc=0) subfze. RT,RA (OE=0 Rc=1) subfzeo RT,RA (OE=1 Rc=0) subfzeo. RT,RA (OE=1 Rc=1) RT <- ¬(RA) + CA # Add to Zero Extended addze RT,RA (OE=0 Rc=0) addze. RT,RA (OE=0 Rc=1) addzeo RT,RA (OE=1 Rc=0) addzeo. RT,RA (OE=1 Rc=1) RT <- (RA) + CA # Negate neg RT,RA (OE=0 Rc=0) neg. RT,RA (OE=0 Rc=1) nego RT,RA (OE=1 Rc=0) nego. RT,RA (OE=1 Rc=1) RT <- ¬(RA) + 1 # Multiply Low Immediate mulli RT,RA,SI prod[0:127] <- (RA) * EXTS(SI) RT <- prod[64:127] # Multiply High Word mulhw RT,RA,RB (Rc=0) mulhw. RT,RA,RB (Rc=1) prod[0:63] <- (RA)[32:63] * (RB)[32:63] RT[32:63] <- prod[0:31] RT[0:31] <- undefined # Multiply Low Word mullw RT,RA,RB (OE=0 Rc=0) mullw. RT,RA,RB (OE=0 Rc=1) mullwo RT,RA,RB (OE=1 Rc=0) mullwo. RT,RA,RB (OE=1 Rc=1) RT <- (RA)[32:63] * (RB)[32:63] # Multiply High Word Unsigned mulhwu RT,RA,RB (Rc=0) mulhwu. RT,RA,RB (Rc=1) prod[0:63] <- (RA)[32:63] * (RB)[32:63] RT[32:63] <- prod[0:31] RT[0:31] <- undefined # Divide Word divw RT,RA,RB (OE=0 Rc=0) divw. RT,RA,RB (OE=0 Rc=1) divwo RT,RA,RB (OE=1 Rc=0) divwo. RT,RA,RB (OE=1 Rc=1) dividend[0:31] <- (RA)[32:63] divisor[0:31] <- (RB) [32:63] RT[32:63] <- dividend / divisor RT[0:31] <- undefined # Divide Word Unsigned divwu RT,RA,RB (OE=0 Rc=0) divwu. RT,RA,RB (OE=0 Rc=1) divwuo RT,RA,RB (OE=1 Rc=0) divwuo. RT,RA,RB (OE=1 Rc=1) dividend[0:31] <- (RA)[32:63] divisor[0:31] <- (RB)[32:63] RT[32:63] <- dividend / divisor RT[0:31] <- undefined # Divide Word Extended divwe RT,RA,RB (OE=0 Rc=0) divwe. RT,RA,RB (OE=0 Rc=1) divweo RT,RA,RB (OE=1 Rc=0) divweo. RT,RA,RB (OE=1 Rc=1) dividend[0:63] <- (RA)[32:63] || [0]*32 divisor[0:31] <- (RB)[32:63] RT[32:63] <- dividend / divisor RT[0:31] <- undefined # Divide Word Extended Unsigned divweu RT,RA,RB (OE=0 Rc=0) divweu. RT,RA,RB (OE=0 Rc=1) divweuo RT,RA,RB (OE=1 Rc=0) divweuo. RT,RA,RB (OE=1 Rc=1) dividend[0:63] <- (RA)[32:63] || [0]*32 divisor[0:31] <- (RB)[32:63] RT[32:63] <- dividend / divisor RT[0:31] <- undefined # Modulo Signed Word X-form modsw RT,RA,RB dividend[0:31] <- (RA)[32:63] divisor [0:31] <- (RB)[32:63]- RT[32:63] <- dividend % divisor RT[0:31 ] <- undefined # Modulo Unsigned Word X-form moduw RT,RA,RB dividend[0:31] <- (RA) [32:63] divisor [0:31] <- (RB) [32:63] RT[32:63] <- dividend % divisor RT[0:31 ] <- undefined # Deliver A Random Number darn RT,L RT <- random(L) # Multiply Low Doubleword mulld RT,RA,RB (OE=0 Rc=0) mulld. RT,RA,RB (OE=0 Rc=1) mulldo RT,RA,RB (OE=1 Rc=0) mulldo. RT,RA,RB (OE=1 Rc=1) prod[0:127] <- (RA) * (RB) RT <- prod[64:127] # Multiply High Doubleword mulhd RT,RA,RB (Rc=0) mulhd. RT,RA,RB (Rc=1) prod[0:127] <- (RA) * (RB) RT <- prod[0:63] # Multiply High Doubleword Unsigned mulhdu RT,RA,RB (Rc=0) mulhdu. RT,RA,RB (Rc=1) prod[0:127] <- (RA) * (RB) RT <- prod[0:63] # Multiply-Add High Doubleword VA-form maddhd RT,RA.RB,RC prod[0:127] <- (RA) * (RB) sum[0:127] <- prod + EXTS(RC) RT <- sum[0:63] # Multiply-Add High Doubleword Unsigned maddhdu RT,RA.RB,RC prod[0:127] <- (RA) * (RB) sum[0:127] <- prod + EXTZ(RC) RT <- sum[0:63] # Multiply-Add Low Doubleword maddld RT,RA.RB,RC prod[0:127] <- (RA) * (RB) sum[0:127] <- prod + EXTS(RC) RT <- sum[64:127] # Divide Doubleword divd RT,RA,RB (OE=0 Rc=0) divd. RT,RA,RB (OE=0 Rc=1) divdo RT,RA,RB (OE=1 Rc=0) divdo. RT,RA,RB (OE=1 Rc=1) dividend[0:63] <- (RA) divisor[0:63] <- (RB) RT <- dividend / divisor # Divide Doubleword Unsigned divdu RT,RA,RB (OE=0 Rc=0) divdu. RT,RA,RB (OE=0 Rc=1) divduo RT,RA,RB (OE=1 Rc=0) divduo. RT,RA,RB (OE=1 Rc=1) dividend[0:63] <- (RA) divisor[0:63] <- (RB) RT <- dividend / divisor # Divide Doubleword Extended divde RT,RA,RB (OE=0 Rc=0) divde. RT,RA,RB (OE=0 Rc=1) divdeo RT,RA,RB (OE=1 Rc=0) divdeo. RT,RA,RB (OE=1 Rc=1) dividend[0:127] <- (RA) || [0]*64 divisor[0:63] <- (RB) RT <- dividend / divisor # Divide Doubleword Extended Unsigned divdeu RT,RA,RB (OE=0 Rc=0) divdeu. RT,RA,RB (OE=0 Rc=1) divdeuo RT,RA,RB (OE=1 Rc=0) divdeuo. RT,RA,RB (OE=1 Rc=1) dividend[0:127] <- (RA) || [0]*64 divisor[0:63] <- (RB) RT <- dividend / divisor # Modulo Signed Doubleword X-form modsd RT,RA,RB dividend <- (RA) divisor <- (RB) RT <- dividend % divisor # Modulo Unsigned Doubleword X-form modud RT,RA,RB dividend <- (RA) divisor <- (RB) RT <- dividend % divisor