7 if RA = 0 then RT <- EXTS(SI)
8 else RT <- (RA) + EXTS(SI)
10 Special Registers Altered:
14 # Add Immediate Shifted
20 if RA = 0 then RT <- EXTS(SI || [0]*16)
21 else RT <- (RA) + EXTS(SI || [0]*16)
23 Special Registers Altered:
27 # Add PC Immediate Shifted
34 RT <- NIA + EXTS(D || [0]*16)
36 Special Registers Altered:
44 * add RT,RA,RB (OE=0 Rc=0)
45 * add. RT,RA,RB (OE=0 Rc=1)
46 * addo RT,RA,RB (OE=1 Rc=0)
47 * addo. RT,RA,RB (OE=1 Rc=1)
51 Special Registers Altered:
60 * subf RT,RA,RB (OE=0 Rc=0)
61 * subf. RT,RA,RB (OE=0 Rc=1)
62 * subfo RT,RA,RB (OE=1 Rc=0)
63 * subfo. RT,RA,RB (OE=1 Rc=1)
65 RT <- ¬(RA) + (RB) + 1
67 Special Registers Altered:
72 # Add Immediate Carrying
80 Special Registers Altered:
84 # Add Immediate Carrying and Record
92 Special Registers Altered:
96 # Subtract From Immediate Carrying
102 RT <- ¬(RA) + EXTS(SI) + 1
104 Special Registers Altered:
112 * addc RT,RA,RB (OE=0 Rc=0)
113 * addc. RT,RA,RB (OE=0 Rc=1)
114 * addco RT,RA,RB (OE=1 Rc=0)
115 * addco. RT,RA,RB (OE=1 Rc=1)
119 Special Registers Altered:
125 # Subtract From Carrying
129 * subfc RT,RA,RB (OE=0 Rc=0)
130 * subfc. RT,RA,RB (OE=0 Rc=1)
131 * subfco RT,RA,RB (OE=1 Rc=0)
132 * subfco. RT,RA,RB (OE=1 Rc=1)
134 RT <- ¬(RA) + (RB) + 1
136 Special Registers Altered:
146 * adde RT,RA,RB (OE=0 Rc=0)
147 * adde. RT,RA,RB (OE=0 Rc=1)
148 * addeo RT,RA,RB (OE=1 Rc=0)
149 * addeo. RT,RA,RB (OE=1 Rc=1)
151 RT <- (RA) + (RB) + CA
153 Special Registers Altered:
159 # Subtract From Extended
163 * subfe RT,RA,RB (OE=0 Rc=0)
164 * subfe. RT,RA,RB (OE=0 Rc=1)
165 * subfeo RT,RA,RB (OE=1 Rc=0)
166 * subfeo. RT,RA,RB (OE=1 Rc=1)
168 RT <- ¬(RA) + (RB) + CA
170 Special Registers Altered:
176 # Add to Minus One Extended
180 * addme RT,RA (OE=0 Rc=0)
181 * addme. RT,RA (OE=0 Rc=1)
182 * addmeo RT,RA (OE=1 Rc=0)
183 * addmeo. RT,RA (OE=1 Rc=1)
187 Special Registers Altered:
193 # Subtract From Minus One Extended
197 * subfme RT,RA (OE=0 Rc=0)
198 * subfme. RT,RA (OE=0 Rc=1)
199 * subfmeo RT,RA (OE=1 Rc=0)
200 * subfmeo. RT,RA (OE=1 Rc=1)
204 Special Registers Altered:
210 # Add Extended using alternate carry bit
216 if CY=0 then RT <- (RA) + (RB) + OV
218 Special Registers Altered:
222 # Subtract From Zero Extended
226 * subfze RT,RA (OE=0 Rc=0)
227 * subfze. RT,RA (OE=0 Rc=1)
228 * subfzeo RT,RA (OE=1 Rc=0)
229 * subfzeo. RT,RA (OE=1 Rc=1)
233 Special Registers Altered:
239 # Add to Zero Extended
243 * addze RT,RA (OE=0 Rc=0)
244 * addze. RT,RA (OE=0 Rc=1)
245 * addzeo RT,RA (OE=1 Rc=0)
246 * addzeo. RT,RA (OE=1 Rc=1)
250 Special Registers Altered:
260 * neg RT,RA (OE=0 Rc=0)
261 * neg. RT,RA (OE=0 Rc=1)
262 * nego RT,RA (OE=1 Rc=0)
263 * nego. RT,RA (OE=1 Rc=1)
267 Special Registers Altered:
272 # Multiply Low Immediate
278 prod[0:127] <- (RA) * EXTS(SI)
281 Special Registers Altered:
289 * mulhw RT,RA,RB (Rc=0)
290 * mulhw. RT,RA,RB (Rc=1)
292 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
293 RT[32:63] <- prod[0:31]
294 RT[0:31] <- undefined
296 Special Registers Altered:
298 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
304 * mullw RT,RA,RB (OE=0 Rc=0)
305 * mullw. RT,RA,RB (OE=0 Rc=1)
306 * mullwo RT,RA,RB (OE=1 Rc=0)
307 * mullwo. RT,RA,RB (OE=1 Rc=1)
309 RT <- (RA)[32:63] * (RB)[32:63]
311 Special Registers Altered:
316 # Multiply High Word Unsigned
320 * mulhwu RT,RA,RB (Rc=0)
321 * mulhwu. RT,RA,RB (Rc=1)
323 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
324 RT[32:63] <- prod[0:31]
325 RT[0:31] <- undefined
327 Special Registers Altered:
329 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
335 * divw RT,RA,RB (OE=0 Rc=0)
336 * divw. RT,RA,RB (OE=0 Rc=1)
337 * divwo RT,RA,RB (OE=1 Rc=0)
338 * divwo. RT,RA,RB (OE=1 Rc=1)
340 dividend[0:31] <- (RA)[32:63]
341 divisor[0:31] <- (RB) [32:63]
342 RT[32:63] <- dividend / divisor
343 RT[0:31] <- undefined
345 Special Registers Altered:
347 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
350 # Divide Word Unsigned
354 * divwu RT,RA,RB (OE=0 Rc=0)
355 * divwu. RT,RA,RB (OE=0 Rc=1)
356 * divwuo RT,RA,RB (OE=1 Rc=0)
357 * divwuo. RT,RA,RB (OE=1 Rc=1)
359 dividend[0:31] <- (RA)[32:63]
360 divisor[0:31] <- (RB)[32:63]
361 RT[32:63] <- dividend / divisor
362 RT[0:31] <- undefined
364 Special Registers Altered:
366 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
369 # Divide Word Extended
373 * divwe RT,RA,RB (OE=0 Rc=0)
374 * divwe. RT,RA,RB (OE=0 Rc=1)
375 * divweo RT,RA,RB (OE=1 Rc=0)
376 * divweo. RT,RA,RB (OE=1 Rc=1)
378 dividend[0:63] <- (RA)[32:63] || [0]*32
379 divisor[0:31] <- (RB)[32:63]
380 RT[32:63] <- dividend / divisor
381 RT[0:31] <- undefined
383 Special Registers Altered:
385 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
388 # Divide Word Extended Unsigned
392 * divweu RT,RA,RB (OE=0 Rc=0)
393 * divweu. RT,RA,RB (OE=0 Rc=1)
394 * divweuo RT,RA,RB (OE=1 Rc=0)
395 * divweuo. RT,RA,RB (OE=1 Rc=1)
397 dividend[0:63] <- (RA)[32:63] || [0]*32
398 divisor[0:31] <- (RB)[32:63]
399 RT[32:63] <- dividend / divisor
400 RT[0:31] <- undefined
402 Special Registers Altered:
404 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
413 dividend[0:31] <- (RA)[32:63]
414 divisor [0:31] <- (RB)[32:63]-
415 RT[32:63] <- dividend % divisor
416 RT[0:31 ] <- undefined
418 Special Registers Altered:
422 # Modulo Unsigned Word
428 dividend[0:31] <- (RA) [32:63]
429 divisor [0:31] <- (RB) [32:63]
430 RT[32:63] <- dividend % divisor
431 RT[0:31 ] <- undefined
433 Special Registers Altered:
437 # Deliver A Random Number
445 Special Registers Altered:
449 # Multiply Low Doubleword
453 * mulld RT,RA,RB (OE=0 Rc=0)
454 * mulld. RT,RA,RB (OE=0 Rc=1)
455 * mulldo RT,RA,RB (OE=1 Rc=0)
456 * mulldo. RT,RA,RB (OE=1 Rc=1)
458 prod[0:127] <- (RA) * (RB)
461 Special Registers Altered:
466 # Multiply High Doubleword
470 * mulhd RT,RA,RB (Rc=0)
471 * mulhd. RT,RA,RB (Rc=1)
473 prod[0:127] <- (RA) * (RB)
476 Special Registers Altered:
480 # Multiply High Doubleword Unsigned
484 * mulhdu RT,RA,RB (Rc=0)
485 * mulhdu. RT,RA,RB (Rc=1)
487 prod[0:127] <- (RA) * (RB)
490 Special Registers Altered:
494 # Multiply-Add High Doubleword VA-Form
500 prod[0:127] <- (RA) * (RB)
501 sum[0:127] <- prod + EXTS(RC)
504 Special Registers Altered:
508 # Multiply-Add High Doubleword Unsigned
512 * maddhdu RT,RA.RB,RC
514 prod[0:127] <- (RA) * (RB)
515 sum[0:127] <- prod + EXTZ(RC)
518 Special Registers Altered:
522 # Multiply-Add Low Doubleword
528 prod[0:127] <- (RA) * (RB)
529 sum[0:127] <- prod + EXTS(RC)
532 Special Registers Altered:
540 * divd RT,RA,RB (OE=0 Rc=0)
541 * divd. RT,RA,RB (OE=0 Rc=1)
542 * divdo RT,RA,RB (OE=1 Rc=0)
543 * divdo. RT,RA,RB (OE=1 Rc=1)
545 dividend[0:63] <- (RA)
546 divisor[0:63] <- (RB)
547 RT <- dividend / divisor
549 Special Registers Altered:
554 # Divide Doubleword Unsigned
558 * divdu RT,RA,RB (OE=0 Rc=0)
559 * divdu. RT,RA,RB (OE=0 Rc=1)
560 * divduo RT,RA,RB (OE=1 Rc=0)
561 * divduo. RT,RA,RB (OE=1 Rc=1)
563 dividend[0:63] <- (RA)
564 divisor[0:63] <- (RB)
565 RT <- dividend / divisor
567 Special Registers Altered:
572 # Divide Doubleword Extended
576 * divde RT,RA,RB (OE=0 Rc=0)
577 * divde. RT,RA,RB (OE=0 Rc=1)
578 * divdeo RT,RA,RB (OE=1 Rc=0)
579 * divdeo. RT,RA,RB (OE=1 Rc=1)
581 dividend[0:127] <- (RA) || [0]*64
582 divisor[0:63] <- (RB)
583 RT <- dividend / divisor
585 Special Registers Altered:
590 # Divide Doubleword Extended Unsigned
594 * divdeu RT,RA,RB (OE=0 Rc=0)
595 * divdeu. RT,RA,RB (OE=0 Rc=1)
596 * divdeuo RT,RA,RB (OE=1 Rc=0)
597 * divdeuo. RT,RA,RB (OE=1 Rc=1)
599 dividend[0:127] <- (RA) || [0]*64
600 divisor[0:63] <- (RB)
601 RT <- dividend / divisor
603 Special Registers Altered:
608 # Modulo Signed Doubleword
616 RT <- dividend % divisor
618 Special Registers Altered:
622 # Modulo Unsigned Doubleword
630 RT <- dividend % divisor
632 Special Registers Altered: