9 if RA = 0 then RT <- EXTS(SI)
10 else RT <- (RA) + EXTS(SI)
12 Special Registers Altered:
16 # Add Immediate Shifted
24 if RA = 0 then RT <- EXTS(SI || [0]*16)
25 else RT <- (RA) + EXTS(SI || [0]*16)
27 Special Registers Altered:
31 # Add PC Immediate Shifted
40 RT <- NIA + EXTS(D || [0]*16)
42 Special Registers Altered:
50 * add RT,RA,RB (OE=0 Rc=0)
51 * add. RT,RA,RB (OE=0 Rc=1)
52 * addo RT,RA,RB (OE=1 Rc=0)
53 * addo. RT,RA,RB (OE=1 Rc=1)
59 Special Registers Altered:
68 * subf RT,RA,RB (OE=0 Rc=0)
69 * subf. RT,RA,RB (OE=0 Rc=1)
70 * subfo RT,RA,RB (OE=1 Rc=0)
71 * subfo. RT,RA,RB (OE=1 Rc=1)
75 RT <- ¬(RA) + (RB) + 1
77 Special Registers Altered:
82 # Add Immediate Carrying
92 Special Registers Altered:
96 # Add Immediate Carrying and Record
104 RT <- (RA) + EXTS(SI)
106 Special Registers Altered:
110 # Subtract From Immediate Carrying
118 RT <- ¬(RA) + EXTS(SI) + 1
120 Special Registers Altered:
128 * addc RT,RA,RB (OE=0 Rc=0)
129 * addc. RT,RA,RB (OE=0 Rc=1)
130 * addco RT,RA,RB (OE=1 Rc=0)
131 * addco. RT,RA,RB (OE=1 Rc=1)
137 Special Registers Altered:
143 # Subtract From Carrying
147 * subfc RT,RA,RB (OE=0 Rc=0)
148 * subfc. RT,RA,RB (OE=0 Rc=1)
149 * subfco RT,RA,RB (OE=1 Rc=0)
150 * subfco. RT,RA,RB (OE=1 Rc=1)
154 RT <- ¬(RA) + (RB) + 1
156 Special Registers Altered:
166 * adde RT,RA,RB (OE=0 Rc=0)
167 * adde. RT,RA,RB (OE=0 Rc=1)
168 * addeo RT,RA,RB (OE=1 Rc=0)
169 * addeo. RT,RA,RB (OE=1 Rc=1)
173 RT <- (RA) + (RB) + CA
175 Special Registers Altered:
181 # Subtract From Extended
185 * subfe RT,RA,RB (OE=0 Rc=0)
186 * subfe. RT,RA,RB (OE=0 Rc=1)
187 * subfeo RT,RA,RB (OE=1 Rc=0)
188 * subfeo. RT,RA,RB (OE=1 Rc=1)
192 RT <- ¬(RA) + (RB) + CA
194 Special Registers Altered:
200 # Add to Minus One Extended
204 * addme RT,RA (OE=0 Rc=0)
205 * addme. RT,RA (OE=0 Rc=1)
206 * addmeo RT,RA (OE=1 Rc=0)
207 * addmeo. RT,RA (OE=1 Rc=1)
213 Special Registers Altered:
219 # Subtract From Minus One Extended
223 * subfme RT,RA (OE=0 Rc=0)
224 * subfme. RT,RA (OE=0 Rc=1)
225 * subfmeo RT,RA (OE=1 Rc=0)
226 * subfmeo. RT,RA (OE=1 Rc=1)
232 Special Registers Altered:
238 # Add Extended using alternate carry bit
246 if CY=0 then RT <- (RA) + (RB) + OV
248 Special Registers Altered:
252 # Subtract From Zero Extended
256 * subfze RT,RA (OE=0 Rc=0)
257 * subfze. RT,RA (OE=0 Rc=1)
258 * subfzeo RT,RA (OE=1 Rc=0)
259 * subfzeo. RT,RA (OE=1 Rc=1)
265 Special Registers Altered:
271 # Add to Zero Extended
275 * addze RT,RA (OE=0 Rc=0)
276 * addze. RT,RA (OE=0 Rc=1)
277 * addzeo RT,RA (OE=1 Rc=0)
278 * addzeo. RT,RA (OE=1 Rc=1)
284 Special Registers Altered:
294 * neg RT,RA (OE=0 Rc=0)
295 * neg. RT,RA (OE=0 Rc=1)
296 * nego RT,RA (OE=1 Rc=0)
297 * nego. RT,RA (OE=1 Rc=1)
303 Special Registers Altered:
308 # Multiply Low Immediate
316 prod[0:127] <- MULS((RA), EXTS(SI))
319 Special Registers Altered:
327 * mulhw RT,RA,RB (Rc=0)
328 * mulhw. RT,RA,RB (Rc=1)
332 prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
333 RT[32:63] <- prod[0:31]
334 RT[0:31] <- prod[0:31]
336 Special Registers Altered:
338 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
344 * mullw RT,RA,RB (OE=0 Rc=0)
345 * mullw. RT,RA,RB (OE=0 Rc=1)
346 * mullwo RT,RA,RB (OE=1 Rc=0)
347 * mullwo. RT,RA,RB (OE=1 Rc=1)
351 prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
353 if ((prod[32:64] != 0x0000_0000) &
354 (prod[32:64] != 0xffff_ffff)) then
359 Special Registers Altered:
364 # Multiply High Word Unsigned
368 * mulhwu RT,RA,RB (Rc=0)
369 * mulhwu. RT,RA,RB (Rc=1)
373 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
374 RT[32:63] <- prod[0:31]
375 RT[0:31] <- prod[0:31]
377 Special Registers Altered:
379 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
385 * divw RT,RA,RB (OE=0 Rc=0)
386 * divw. RT,RA,RB (OE=0 Rc=1)
387 * divwo RT,RA,RB (OE=1 Rc=0)
388 * divwo. RT,RA,RB (OE=1 Rc=1)
392 dividend[0:31] <- (RA)[32:63]
393 divisor[0:31] <- (RB) [32:63]
394 if (((dividend = 0x8000_0000) &
395 (divisor = 0xffff_ffff)) |
396 (divisor = 0x0000_0000)) then
397 RT[0:63] <- undefined[0:63]
400 RT[32:63] <- DIVS(dividend, divisor)
401 RT[0:31] <- undefined[0:31]
404 Special Registers Altered:
406 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
409 # Divide Word Unsigned
413 * divwu RT,RA,RB (OE=0 Rc=0)
414 * divwu. RT,RA,RB (OE=0 Rc=1)
415 * divwuo RT,RA,RB (OE=1 Rc=0)
416 * divwuo. RT,RA,RB (OE=1 Rc=1)
420 dividend[0:31] <- (RA)[32:63]
421 divisor[0:31] <- (RB)[32:63]
423 RT[32:63] <- dividend / divisor
424 RT[0:31] <- undefined[0:31]
427 RT[0:63] <- undefined[0:63]
430 Special Registers Altered:
432 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
435 # Divide Word Extended
439 * divwe RT,RA,RB (OE=0 Rc=0)
440 * divwe. RT,RA,RB (OE=0 Rc=1)
441 * divweo RT,RA,RB (OE=1 Rc=0)
442 * divweo. RT,RA,RB (OE=1 Rc=1)
446 dividend[0:63] <- (RA)[32:63] || [0]*32
447 divisor[0:63] <- [0]*32 || (RB)[32:63]
448 if (divisor = 0x0000_0000_0000_0000) then
451 result <- DIVS(dividend, divisor)
452 if (result[32:63] = 0) then
453 RT[32:63] <- result[0:31]
454 RT[0:31] <- undefined[0:31]
459 RT[0:63] <- undefined[0:63]
461 Special Registers Altered:
463 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
466 # Divide Word Extended Unsigned
470 * divweu RT,RA,RB (OE=0 Rc=0)
471 * divweu. RT,RA,RB (OE=0 Rc=1)
472 * divweuo RT,RA,RB (OE=1 Rc=0)
473 * divweuo. RT,RA,RB (OE=1 Rc=1)
477 dividend[0:63] <- (RA)[32:63] || [0]*32
478 divisor[0:63] <- [0]*32 || (RB)[32:63]
479 if (divisor = 0x0000_0000_0000_0000) then
482 result <- dividend / divisor
484 RT[32:63] <- result[0:31]
485 RT[0:31] <- undefined[0:31]
490 RT[0:63] <- undefined[0:63]
492 Special Registers Altered:
494 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
505 dividend[0:31] <- (RA)[32:63]
506 divisor [0:31] <- (RB)[32:63]
507 if (((dividend = 0x8000_0000) &
508 (divisor = 0xffff_ffff)) |
509 (divisor = 0x0000_0000)) then
510 RT[0:63] <- undefined[0:63]
513 RT[32:63] <- MODS(dividend, divisor)
514 RT[0:31] <- undefined[0:31]
517 Special Registers Altered:
521 # Modulo Unsigned Word
529 dividend[0:31] <- (RA) [32:63]
530 divisor [0:31] <- (RB) [32:63]
531 if divisor = 0x0000_0000 then
532 RT[0:63] <- undefined[0:63]
535 RT[32:63] <- MODS(dividend, divisor)
536 RT[0:31] <- undefined[0:31]
539 Special Registers Altered:
543 # Deliver A Random Number
553 Special Registers Altered:
557 # Multiply Low Doubleword
561 * mulld RT,RA,RB (OE=0 Rc=0)
562 * mulld. RT,RA,RB (OE=0 Rc=1)
563 * mulldo RT,RA,RB (OE=1 Rc=0)
564 * mulldo. RT,RA,RB (OE=1 Rc=1)
568 prod[0:127] <- MULS((RA), (RB))
571 Special Registers Altered:
576 # Multiply High Doubleword
580 * mulhd RT,RA,RB (Rc=0)
581 * mulhd. RT,RA,RB (Rc=1)
585 prod[0:127] <- MULS((RA), (RB))
588 Special Registers Altered:
592 # Multiply High Doubleword Unsigned
596 * mulhdu RT,RA,RB (Rc=0)
597 * mulhdu. RT,RA,RB (Rc=1)
601 prod[0:127] <- (RA) * (RB)
604 Special Registers Altered:
608 # Multiply-Add High Doubleword VA-Form
616 prod[0:127] <- MULS((RA), (RB))
617 sum[0:127] <- prod + EXTS(RC)
620 Special Registers Altered:
624 # Multiply-Add High Doubleword Unsigned
628 * maddhdu RT,RA.RB,RC
632 prod[0:127] <- (RA) * (RB)
633 sum[0:127] <- prod + EXTZ(RC)
636 Special Registers Altered:
640 # Multiply-Add Low Doubleword
648 prod[0:127] <- MULS((RA), (RB))
649 sum[0:127] <- prod + EXTS(RC)
652 Special Registers Altered:
660 * divd RT,RA,RB (OE=0 Rc=0)
661 * divd. RT,RA,RB (OE=0 Rc=1)
662 * divdo RT,RA,RB (OE=1 Rc=0)
663 * divdo. RT,RA,RB (OE=1 Rc=1)
667 dividend[0:63] <- (RA)
668 divisor[0:63] <- (RB)
669 if (((dividend = 0x8000_0000_0000_0000) &
670 (divisor = 0xffff_ffff_ffff_ffff)) |
671 (divisor = 0x0000_0000_0000_0000)) then
672 RT[0:63] <- undefined[0:63]
675 RT <- DIVS(dividend, divisor)
678 Special Registers Altered:
683 # Divide Doubleword Unsigned
687 * divdu RT,RA,RB (OE=0 Rc=0)
688 * divdu. RT,RA,RB (OE=0 Rc=1)
689 * divduo RT,RA,RB (OE=1 Rc=0)
690 * divduo. RT,RA,RB (OE=1 Rc=1)
694 dividend[0:63] <- (RA)
695 divisor[0:63] <- (RB)
696 if (divisor = 0x0000_0000_0000_0000) then
697 RT[0:63] <- undefined[0:63]
700 RT <- dividend / divisor
703 Special Registers Altered:
708 # Divide Doubleword Extended
712 * divde RT,RA,RB (OE=0 Rc=0)
713 * divde. RT,RA,RB (OE=0 Rc=1)
714 * divdeo RT,RA,RB (OE=1 Rc=0)
715 * divdeo. RT,RA,RB (OE=1 Rc=1)
719 dividend[0:127] <- (RA) || [0]*64
720 divisor[0:127] <- [0*64] || (RB)
721 if divisor = [0]*128 then
724 result <- DIVS(dividend, divisor)
725 if result[64:127] = 0x0000_0000_0000_0000 then
731 RT[0:63] <- undefined[0:63]
733 Special Registers Altered:
738 # Divide Doubleword Extended Unsigned
742 * divdeu RT,RA,RB (OE=0 Rc=0)
743 * divdeu. RT,RA,RB (OE=0 Rc=1)
744 * divdeuo RT,RA,RB (OE=1 Rc=0)
745 * divdeuo. RT,RA,RB (OE=1 Rc=1)
749 dividend[0:127] <- (RA) || [0]*64
750 divisor[0:127] <- [0*64] || (RB)
751 if divisor = [0]*128 then
754 result <- dividend / divisor
761 RT[0:63] <- undefined[0:63]
763 Special Registers Altered:
768 # Modulo Signed Doubleword
778 if (((dividend = 0x8000_0000_0000_0000) &
779 (divisor = 0xffff_ffff_ffff_ffff)) |
780 (divisor = 0x0000_0000_0000_0000)) then
781 RT[0:63] <- undefined[0:63]
784 RT <- MODS(dividend, divisor)
787 Special Registers Altered:
791 # Modulo Unsigned Doubleword
801 if (divisor = 0x0000_0000_0000_0000) then
802 RT[0:63] <- undefined[0:63]
805 RT <- dividend % divisor
808 Special Registers Altered: