9 RT <- (RA|0) + EXTS(SI)
11 Special Registers Altered:
15 # Add Immediate Shifted
23 RT <- (RA|0) + EXTS(SI || [0]*16)
25 Special Registers Altered:
29 # Add PC Immediate Shifted
38 RT <- NIA + EXTS(D || [0]*16)
40 Special Registers Altered:
48 * add RT,RA,RB (OE=0 Rc=0)
49 * add. RT,RA,RB (OE=0 Rc=1)
50 * addo RT,RA,RB (OE=1 Rc=0)
51 * addo. RT,RA,RB (OE=1 Rc=1)
57 Special Registers Altered:
66 * subf RT,RA,RB (OE=0 Rc=0)
67 * subf. RT,RA,RB (OE=0 Rc=1)
68 * subfo RT,RA,RB (OE=1 Rc=0)
69 * subfo. RT,RA,RB (OE=1 Rc=1)
73 RT <- ¬(RA) + (RB) + 1
75 Special Registers Altered:
80 # Add Immediate Carrying
90 Special Registers Altered:
94 # Add Immediate Carrying and Record
102 RT <- (RA) + EXTS(SI)
104 Special Registers Altered:
108 # Subtract From Immediate Carrying
116 RT <- ¬(RA) + EXTS(SI) + 1
118 Special Registers Altered:
126 * addc RT,RA,RB (OE=0 Rc=0)
127 * addc. RT,RA,RB (OE=0 Rc=1)
128 * addco RT,RA,RB (OE=1 Rc=0)
129 * addco. RT,RA,RB (OE=1 Rc=1)
135 Special Registers Altered:
141 # Subtract From Carrying
145 * subfc RT,RA,RB (OE=0 Rc=0)
146 * subfc. RT,RA,RB (OE=0 Rc=1)
147 * subfco RT,RA,RB (OE=1 Rc=0)
148 * subfco. RT,RA,RB (OE=1 Rc=1)
152 RT <- ¬(RA) + (RB) + 1
154 Special Registers Altered:
164 * adde RT,RA,RB (OE=0 Rc=0)
165 * adde. RT,RA,RB (OE=0 Rc=1)
166 * addeo RT,RA,RB (OE=1 Rc=0)
167 * addeo. RT,RA,RB (OE=1 Rc=1)
171 RT <- (RA) + (RB) + CA
173 Special Registers Altered:
179 # Subtract From Extended
183 * subfe RT,RA,RB (OE=0 Rc=0)
184 * subfe. RT,RA,RB (OE=0 Rc=1)
185 * subfeo RT,RA,RB (OE=1 Rc=0)
186 * subfeo. RT,RA,RB (OE=1 Rc=1)
190 RT <- ¬(RA) + (RB) + CA
192 Special Registers Altered:
198 # Add to Minus One Extended
202 * addme RT,RA (OE=0 Rc=0)
203 * addme. RT,RA (OE=0 Rc=1)
204 * addmeo RT,RA (OE=1 Rc=0)
205 * addmeo. RT,RA (OE=1 Rc=1)
211 Special Registers Altered:
217 # Subtract From Minus One Extended
221 * subfme RT,RA (OE=0 Rc=0)
222 * subfme. RT,RA (OE=0 Rc=1)
223 * subfmeo RT,RA (OE=1 Rc=0)
224 * subfmeo. RT,RA (OE=1 Rc=1)
230 Special Registers Altered:
236 # Add Extended using alternate carry bit
244 if CY=0 then RT <- (RA) + (RB) + OV
246 Special Registers Altered:
250 # Subtract From Zero Extended
254 * subfze RT,RA (OE=0 Rc=0)
255 * subfze. RT,RA (OE=0 Rc=1)
256 * subfzeo RT,RA (OE=1 Rc=0)
257 * subfzeo. RT,RA (OE=1 Rc=1)
263 Special Registers Altered:
269 # Add to Zero Extended
273 * addze RT,RA (OE=0 Rc=0)
274 * addze. RT,RA (OE=0 Rc=1)
275 * addzeo RT,RA (OE=1 Rc=0)
276 * addzeo. RT,RA (OE=1 Rc=1)
282 Special Registers Altered:
292 * neg RT,RA (OE=0 Rc=0)
293 * neg. RT,RA (OE=0 Rc=1)
294 * nego RT,RA (OE=1 Rc=0)
295 * nego. RT,RA (OE=1 Rc=1)
301 Special Registers Altered:
306 # Multiply Low Immediate
314 prod[0:127] <- MULS((RA), EXTS(SI))
317 Special Registers Altered:
325 * mulhw RT,RA,RB (Rc=0)
326 * mulhw. RT,RA,RB (Rc=1)
330 prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
331 RT[32:63] <- prod[0:31]
332 RT[0:31] <- prod[0:31]
334 Special Registers Altered:
336 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
342 * mullw RT,RA,RB (OE=0 Rc=0)
343 * mullw. RT,RA,RB (OE=0 Rc=1)
344 * mullwo RT,RA,RB (OE=1 Rc=0)
345 * mullwo. RT,RA,RB (OE=1 Rc=1)
349 prod[0:63] <- MULS((RA)[32:63], (RB)[32:63])
351 overflow <- ((prod[0:32] != [0]*33) &
352 (prod[0:32] != [1]*33))
354 Special Registers Altered:
359 # Multiply High Word Unsigned
363 * mulhwu RT,RA,RB (Rc=0)
364 * mulhwu. RT,RA,RB (Rc=1)
368 prod[0:63] <- (RA)[32:63] * (RB)[32:63]
369 RT[32:63] <- prod[0:31]
370 RT[0:31] <- prod[0:31]
372 Special Registers Altered:
374 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
380 * divw RT,RA,RB (OE=0 Rc=0)
381 * divw. RT,RA,RB (OE=0 Rc=1)
382 * divwo RT,RA,RB (OE=1 Rc=0)
383 * divwo. RT,RA,RB (OE=1 Rc=1)
387 dividend[0:31] <- (RA)[32:63]
388 divisor[0:31] <- (RB) [32:63]
389 if (((dividend = ([0]*31 || [1])) &
390 (divisor = [1]*32)) |
391 (divisor = [0]*32)) then
392 RT[0:63] <- undefined([0]*64)
395 RT[32:63] <- DIVS(dividend, divisor)
396 RT[0:31] <- undefined([0]*32)
399 Special Registers Altered:
401 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
404 # Divide Word Unsigned
408 * divwu RT,RA,RB (OE=0 Rc=0)
409 * divwu. RT,RA,RB (OE=0 Rc=1)
410 * divwuo RT,RA,RB (OE=1 Rc=0)
411 * divwuo. RT,RA,RB (OE=1 Rc=1)
415 dividend[0:31] <- (RA)[32:63]
416 divisor[0:31] <- (RB)[32:63]
418 RT[32:63] <- dividend / divisor
419 RT[0:31] <- undefined([0]*32)
422 RT[0:63] <- undefined([0]*64)
425 Special Registers Altered:
427 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
430 # Divide Word Extended
434 * divwe RT,RA,RB (OE=0 Rc=0)
435 * divwe. RT,RA,RB (OE=0 Rc=1)
436 * divweo RT,RA,RB (OE=1 Rc=0)
437 * divweo. RT,RA,RB (OE=1 Rc=1)
441 dividend[0:63] <- (RA)[32:63] || [0]*32
442 divisor[0:63] <- EXTS64((RB)[32:63])
443 if (((dividend = 0x8000_0000_0000_0000) &
444 (divisor = 0xffff_ffff_ffff_ffff)) |
445 (divisor = 0x0000_0000_0000_0000)) then
448 result <- DIVS(dividend, divisor)
449 result32[0:63] <- EXTS64(result[32:63])
450 if (result32 = result) then
451 RT[32:63] <- result[32:63]
452 RT[0:31] <- undefined([0]*32)
457 RT[0:63] <- undefined([0]*64)
459 Special Registers Altered:
461 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
464 # Divide Word Extended Unsigned
468 * divweu RT,RA,RB (OE=0 Rc=0)
469 * divweu. RT,RA,RB (OE=0 Rc=1)
470 * divweuo RT,RA,RB (OE=1 Rc=0)
471 * divweuo. RT,RA,RB (OE=1 Rc=1)
475 dividend[0:63] <- (RA)[32:63] || [0]*32
476 divisor[0:63] <- [0]*32 || (RB)[32:63]
477 if (divisor = 0x0000_0000_0000_0000) then
480 result <- dividend / divisor
481 if RA[32:63] <u RB[32:63] then
482 RT[32:63] <- result[32:63]
483 RT[0:31] <- undefined([0]*32)
488 RT[0:63] <- undefined([0]*64)
490 Special Registers Altered:
492 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
503 dividend[0:31] <- (RA)[32:63]
504 divisor[0:31] <- (RB)[32:63]
505 if (((dividend = 0x8000_0000) &
506 (divisor = 0xffff_ffff)) |
507 (divisor = 0x0000_0000)) then
508 RT[0:63] <- undefined([0]*64)
511 RT[0:63] <- EXTS64(MODS(dividend, divisor))
512 RT[0:31] <- undefined(RT[0:31])
515 Special Registers Altered:
519 # Modulo Unsigned Word
527 dividend[0:31] <- (RA) [32:63]
528 divisor [0:31] <- (RB) [32:63]
529 if divisor = 0x0000_0000 then
530 RT[0:63] <- undefined([0]*64)
533 RT[32:63] <- dividend % divisor
534 RT[0:31] <- undefined([0]*32)
537 Special Registers Altered:
541 # Deliver A Random Number
551 Special Registers Altered:
555 # Multiply Low Doubleword
559 * mulld RT,RA,RB (OE=0 Rc=0)
560 * mulld. RT,RA,RB (OE=0 Rc=1)
561 * mulldo RT,RA,RB (OE=1 Rc=0)
562 * mulldo. RT,RA,RB (OE=1 Rc=1)
566 prod[0:127] <- MULS((RA), (RB))
568 overflow <- ((prod[0:64] != [0]*65) &
569 (prod[0:64] != [1]*65))
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]*64)
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]*64)
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] <- EXTS128((RB))
721 if (((dividend = 0x8000_0000_0000_0000_0000_0000_0000_0000) &
722 (divisor = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff)) |
723 (divisor = 0x0000_0000_0000_0000_0000_0000_0000_0000)) then
726 result <- DIVS(dividend, divisor)
727 result64[0:127] <- EXTS128(result[64:127])
728 if (result64 = result) then
734 RT[0:63] <- undefined([0]*64)
736 Special Registers Altered:
741 # Divide Doubleword Extended Unsigned
745 * divdeu RT,RA,RB (OE=0 Rc=0)
746 * divdeu. RT,RA,RB (OE=0 Rc=1)
747 * divdeuo RT,RA,RB (OE=1 Rc=0)
748 * divdeuo. RT,RA,RB (OE=1 Rc=1)
752 dividend[0:127] <- (RA) || [0]*64
753 divisor[0:127] <- [0]*64 || (RB)
754 if divisor = [0]*128 then
757 result <- dividend / divisor
764 RT[0:63] <- undefined([0]*64)
766 Special Registers Altered:
771 # Modulo Signed Doubleword
781 if (((dividend = 0x8000_0000_0000_0000) &
782 (divisor = 0xffff_ffff_ffff_ffff)) |
783 (divisor = 0x0000_0000_0000_0000)) then
784 RT[0:63] <- undefined([0]*64)
787 RT <- MODS(dividend, divisor)
790 Special Registers Altered:
794 # Modulo Unsigned Doubleword
804 if (divisor = 0x0000_0000_0000_0000) then
805 RT[0:63] <- undefined([0]*64)
808 RT <- dividend % divisor
811 Special Registers Altered: