7 if RA = 0 then RT <- EXTS(SI)
8 else RT <- (RA) + EXTS(SI)
10 # Add Immediate Shifted
16 if RA = 0 then RT <- EXTS(SI || 160)
17 else RT <- (RA) + EXTS(SI || [0]*16)
19 # Add PC Immediate Shifted
26 RT <- NIA + EXTS(D || [0]*16)
33 * add RT,RA,RB (OE=0 Rc=0)
34 * add. RT,RA,RB (OE=0 Rc=1)
35 * addo RT,RA,RB (OE=1 Rc=0)
36 * addo. RT,RA,RB (OE=1 Rc=1)
44 * subf RT,RA,RB (OE=0 Rc=0)
45 * subf. RT,RA,RB (OE=0 Rc=1)
46 * subfo RT,RA,RB (OE=1 Rc=0)
47 * subfo. RT,RA,RB (OE=1 Rc=1)
49 RT <- ¬(RA) + (RB) + 1
51 # Add Immediate Carrying
59 # Add Immediate Carrying and Record
67 # Subtract From Immediate Carrying
73 RT <- ¬(RA) + EXTS(SI) + 1
79 * addc RT,RA,RB (OE=0 Rc=0)
80 * addc. RT,RA,RB (OE=0 Rc=1)
81 * addco RT,RA,RB (OE=1 Rc=0)
82 * addco. RT,RA,RB (OE=1 Rc=1)
86 # Subtract From Carrying
90 * subfc RT,RA,RB (OE=0 Rc=0)
91 * subfc. RT,RA,RB (OE=0 Rc=1)
92 * subfco RT,RA,RB (OE=1 Rc=0)
93 * subfco. RT,RA,RB (OE=1 Rc=1)
95 RT <- ¬(RA) + (RB) + 1
101 * adde RT,RA,RB (OE=0 Rc=0)
102 * adde. RT,RA,RB (OE=0 Rc=1)
103 * addeo RT,RA,RB (OE=1 Rc=0)
104 * addeo. RT,RA,RB (OE=1 Rc=1)
106 RT <- (RA) + (RB) + CA
108 # Subtract From Extended
112 * subfe RT,RA,RB (OE=0 Rc=0)
113 * subfe. RT,RA,RB (OE=0 Rc=1)
114 * subfeo RT,RA,RB (OE=1 Rc=0)
115 * subfeo. RT,RA,RB (OE=1 Rc=1)
117 RT <- ¬(RA) + (RB) + CA
119 # Add to Minus One Extended
123 * addme RT,RA (OE=0 Rc=0)
124 * addme. RT,RA (OE=0 Rc=1)
125 * addmeo RT,RA (OE=1 Rc=0)
126 * addmeo. RT,RA (OE=1 Rc=1)
130 # Subtract From Minus One Extended
134 * subfme RT,RA (OE=0 Rc=0)
135 * subfme. RT,RA (OE=0 Rc=1)
136 * subfmeo RT,RA (OE=1 Rc=0)
137 * subfmeo. RT,RA (OE=1 Rc=1)
141 # Add Extended using alternate carry bit
147 if CY=0 then RT <- (RA) + (RB) + OV
149 # Subtract From Zero Extended
153 * subfze RT,RA (OE=0 Rc=0)
154 * subfze. RT,RA (OE=0 Rc=1)
155 * subfzeo RT,RA (OE=1 Rc=0)
156 * subfzeo. RT,RA (OE=1 Rc=1)
160 # Add to Zero Extended
164 * addze RT,RA (OE=0 Rc=0)
165 * addze. RT,RA (OE=0 Rc=1)
166 * addzeo RT,RA (OE=1 Rc=0)
167 * addzeo. RT,RA (OE=1 Rc=1)
175 * neg RT,RA (OE=0 Rc=0)
176 * neg. RT,RA (OE=0 Rc=1)
177 * nego RT,RA (OE=1 Rc=0)
178 * nego. RT,RA (OE=1 Rc=1)
182 # Multiply Low Immediate
188 prod[0:127] <- (RA) * EXTS(SI)
195 * mulhw RT,RA,RB (Rc=0)
196 * mulhw. RT,RA,RB (Rc=1)
198 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
199 RT[32:63] <- prod[0:31]
200 RT[0:31] <- undefined
206 * mullw RT,RA,RB (OE=0 Rc=0)
207 * mullw. RT,RA,RB (OE=0 Rc=1)
208 * mullwo RT,RA,RB (OE=1 Rc=0)
209 * mullwo. RT,RA,RB (OE=1 Rc=1)
211 RT <- (RA)[32:63] * (RB)[32:63]
213 # Multiply High Word Unsigned
217 * mulhwu RT,RA,RB (Rc=0)
218 * mulhwu. RT,RA,RB (Rc=1)
220 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
221 RT[32:63] <- prod[0:31]
222 RT[0:31] <- undefined
228 * divw RT,RA,RB (OE=0 Rc=0)
229 * divw. RT,RA,RB (OE=0 Rc=1)
230 * divwo RT,RA,RB (OE=1 Rc=0)
231 * divwo. RT,RA,RB (OE=1 Rc=1)
233 dividend[0:31] <- (RA)[32:63]
234 divisor[0:31] <- (RB) [32:63]
235 RT[32:63] <- dividend / divisor
236 RT[0:31] <- undefined
238 # Divide Word Unsigned
242 * divwu RT,RA,RB (OE=0 Rc=0)
243 * divwu. RT,RA,RB (OE=0 Rc=1)
244 * divwuo RT,RA,RB (OE=1 Rc=0)
245 * divwuo. RT,RA,RB (OE=1 Rc=1)
247 dividend[0:31] <- (RA)[32:63]
248 divisor[0:31] <- (RB)[32:63]
249 RT[32:63] <- dividend / divisor
250 RT[0:31] <- undefined
252 # Divide Word Extended
256 * divwe RT,RA,RB (OE=0 Rc=0)
257 * divwe. RT,RA,RB (OE=0 Rc=1)
258 * divweo RT,RA,RB (OE=1 Rc=0)
259 * divweo. RT,RA,RB (OE=1 Rc=1)
261 dividend[0:63] <- (RA)[32:63] || [0]*32
262 divisor[0:31] <- (RB)[32:63]
263 RT[32:63] <- dividend / divisor
264 RT[0:31] <- undefined
266 # Divide Word Extended Unsigned
270 * divweu RT,RA,RB (OE=0 Rc=0)
271 * divweu. RT,RA,RB (OE=0 Rc=1)
272 * divweuo RT,RA,RB (OE=1 Rc=0)
273 * divweuo. RT,RA,RB (OE=1 Rc=1)
275 dividend[0:63] <- (RA)[32:63] || [0]*32
276 divisor[0:31] <- (RB)[32:63]
277 RT[32:63] <- dividend / divisor
278 RT[0:31] <- undefined
280 # Modulo Signed Word X-form
286 dividend[0:31] <- (RA)[32:63]
287 divisor [0:31] <- (RB)[32:63]-
288 RT[32:63] <- dividend % divisor
289 RT[0:31 ] <- undefined
291 # Modulo Unsigned Word X-form
297 dividend[0:31] <- (RA) [32:63]
298 divisor [0:31] <- (RB) [32:63]
299 RT[32:63] <- dividend % divisor
300 RT[0:31 ] <- undefined
303 # Deliver A Random Number
311 # Multiply Low Doubleword
315 * mulld RT,RA,RB (OE=0 Rc=0)
316 * mulld. RT,RA,RB (OE=0 Rc=1)
317 * mulldo RT,RA,RB (OE=1 Rc=0)
318 * mulldo. RT,RA,RB (OE=1 Rc=1)
320 prod[0:127] <- (RA) * (RB)
323 # Multiply High Doubleword
327 * mulhd RT,RA,RB (Rc=0)
328 * mulhd. RT,RA,RB (Rc=1)
330 prod[0:127] <- (RA) * (RB)
333 # Multiply High Doubleword Unsigned
337 * mulhdu RT,RA,RB (Rc=0)
338 * mulhdu. RT,RA,RB (Rc=1)
340 prod[0:127] <- (RA) * (RB)
343 # Multiply-Add High Doubleword VA-form
349 prod[0:127] <- (RA) * (RB)
350 sum[0:127] <- prod + EXTS(RC)
353 # Multiply-Add High Doubleword Unsigned
357 * maddhdu RT,RA.RB,RC
359 prod[0:127] <- (RA) * (RB)
360 sum[0:127] <- prod + EXTZ(RC)
363 # Multiply-Add Low Doubleword
370 prod[0:127] <- (RA) * (RB)
371 sum[0:127] <- prod + EXTS(RC)
378 * divd RT,RA,RB (OE=0 Rc=0)
379 * divd. RT,RA,RB (OE=0 Rc=1)
380 * divdo RT,RA,RB (OE=1 Rc=0)
381 * divdo. RT,RA,RB (OE=1 Rc=1)
383 dividend[0:63] <- (RA)
384 divisor[0:63] <- (RB)
385 RT <- dividend / divisor
387 # Divide Doubleword Unsigned
391 * divdu RT,RA,RB (OE=0 Rc=0)
392 * divdu. RT,RA,RB (OE=0 Rc=1)
393 * divduo RT,RA,RB (OE=1 Rc=0)
394 * divduo. RT,RA,RB (OE=1 Rc=1)
396 dividend[0:63] <- (RA)
397 divisor[0:63] <- (RB)
398 RT <- dividend / divisor
400 # Divide Doubleword Extended
404 * divde RT,RA,RB (OE=0 Rc=0)
405 * divde. RT,RA,RB (OE=0 Rc=1)
406 * divdeo RT,RA,RB (OE=1 Rc=0)
407 * divdeo. RT,RA,RB (OE=1 Rc=1)
409 dividend[0:127] <- (RA) || [0]*64
410 divisor[0:63] <- (RB)
411 RT <- dividend / divisor
413 # Divide Doubleword Extended Unsigned
417 * divdeu RT,RA,RB (OE=0 Rc=0)
418 * divdeu. RT,RA,RB (OE=0 Rc=1)
419 * divdeuo RT,RA,RB (OE=1 Rc=0)
420 * divdeuo. RT,RA,RB (OE=1 Rc=1)
422 dividend[0:127] <- (RA) || [0]*64
423 divisor[0:63] <- (RB)
424 RT <- dividend / divisor
426 # Modulo Signed Doubleword
434 RT <- dividend % divisor
436 # Modulo Unsigned Doubleword
444 RT <- dividend % divisor