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 = 0x8000_0000) &
390 (divisor = 0xffff_ffff)) |
391 (divisor = 0x0000_0000)) then
392 RT[0:63] <- undefined[0:63]
395 RT[32:63] <- DIVS(dividend, divisor)
396 RT[0:31] <- undefined[0:31]
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:31]
422 RT[0:63] <- undefined[0:63]
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 (divisor = 0x0000_0000_0000_0000) then
446 result <- DIVS(dividend, divisor)
447 result32[0:63] <- EXTS64(result[32:63])
448 if (result32 = result) then
449 RT[32:63] <- result[32:63]
450 RT[0:31] <- undefined[0:31]
455 RT[0:63] <- undefined[0:63]
457 Special Registers Altered:
459 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
462 # Divide Word Extended Unsigned
466 * divweu RT,RA,RB (OE=0 Rc=0)
467 * divweu. RT,RA,RB (OE=0 Rc=1)
468 * divweuo RT,RA,RB (OE=1 Rc=0)
469 * divweuo. RT,RA,RB (OE=1 Rc=1)
473 dividend[0:63] <- (RA)[32:63] || [0]*32
474 divisor[0:63] <- [0]*32 || (RB)[32:63]
475 if (divisor = 0x0000_0000_0000_0000) then
478 result <- dividend / divisor
480 RT[32:63] <- result[32:63]
481 RT[0:31] <- undefined[0:31]
486 RT[0:63] <- undefined[0:63]
488 Special Registers Altered:
490 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
501 dividend[0:31] <- (RA)[32:63]
502 divisor [0:31] <- (RB)[32:63]
503 if (((dividend = 0x8000_0000) &
504 (divisor = 0xffff_ffff)) |
505 (divisor = 0x0000_0000)) then
506 RT[0:63] <- undefined[0:63]
509 RT[32:63] <- MODS(dividend, divisor)
510 RT[0:31] <- undefined[0:31]
513 Special Registers Altered:
517 # Modulo Unsigned Word
525 dividend[0:31] <- (RA) [32:63]
526 divisor [0:31] <- (RB) [32:63]
527 if divisor = 0x0000_0000 then
528 RT[0:63] <- undefined[0:63]
531 RT[32:63] <- MODS(dividend, divisor)
532 RT[0:31] <- undefined[0:31]
535 Special Registers Altered:
539 # Deliver A Random Number
549 Special Registers Altered:
553 # Multiply Low Doubleword
557 * mulld RT,RA,RB (OE=0 Rc=0)
558 * mulld. RT,RA,RB (OE=0 Rc=1)
559 * mulldo RT,RA,RB (OE=1 Rc=0)
560 * mulldo. RT,RA,RB (OE=1 Rc=1)
564 prod[0:127] <- MULS((RA), (RB))
566 overflow <- ((prod[0:64] != [0]*65) &
567 (prod[0:64] != [1]*65))
569 Special Registers Altered:
574 # Multiply High Doubleword
578 * mulhd RT,RA,RB (Rc=0)
579 * mulhd. RT,RA,RB (Rc=1)
583 prod[0:127] <- MULS((RA), (RB))
586 Special Registers Altered:
590 # Multiply High Doubleword Unsigned
594 * mulhdu RT,RA,RB (Rc=0)
595 * mulhdu. RT,RA,RB (Rc=1)
599 prod[0:127] <- (RA) * (RB)
602 Special Registers Altered:
606 # Multiply-Add High Doubleword VA-Form
614 prod[0:127] <- MULS((RA), (RB))
615 sum[0:127] <- prod + EXTS(RC)
618 Special Registers Altered:
622 # Multiply-Add High Doubleword Unsigned
626 * maddhdu RT,RA.RB,RC
630 prod[0:127] <- (RA) * (RB)
631 sum[0:127] <- prod + EXTZ(RC)
634 Special Registers Altered:
638 # Multiply-Add Low Doubleword
646 prod[0:127] <- MULS((RA), (RB))
647 sum[0:127] <- prod + EXTS(RC)
650 Special Registers Altered:
658 * divd RT,RA,RB (OE=0 Rc=0)
659 * divd. RT,RA,RB (OE=0 Rc=1)
660 * divdo RT,RA,RB (OE=1 Rc=0)
661 * divdo. RT,RA,RB (OE=1 Rc=1)
665 dividend[0:63] <- (RA)
666 divisor[0:63] <- (RB)
667 if (((dividend = 0x8000_0000_0000_0000) &
668 (divisor = 0xffff_ffff_ffff_ffff)) |
669 (divisor = 0x0000_0000_0000_0000)) then
670 RT[0:63] <- undefined[0:63]
673 RT <- DIVS(dividend, divisor)
676 Special Registers Altered:
681 # Divide Doubleword Unsigned
685 * divdu RT,RA,RB (OE=0 Rc=0)
686 * divdu. RT,RA,RB (OE=0 Rc=1)
687 * divduo RT,RA,RB (OE=1 Rc=0)
688 * divduo. RT,RA,RB (OE=1 Rc=1)
692 dividend[0:63] <- (RA)
693 divisor[0:63] <- (RB)
694 if (divisor = 0x0000_0000_0000_0000) then
695 RT[0:63] <- undefined[0:63]
698 RT <- dividend / divisor
701 Special Registers Altered:
706 # Divide Doubleword Extended
710 * divde RT,RA,RB (OE=0 Rc=0)
711 * divde. RT,RA,RB (OE=0 Rc=1)
712 * divdeo RT,RA,RB (OE=1 Rc=0)
713 * divdeo. RT,RA,RB (OE=1 Rc=1)
717 dividend[0:127] <- (RA) || [0]*64
718 divisor[0:127] <- [0]*64 || (RB)
719 if divisor = [0]*128 then
722 result <- DIVS(dividend, divisor)
723 if result[0:64] = 0x0000_0000_0000_0000 then
729 RT[0:63] <- undefined[0:63]
731 Special Registers Altered:
736 # Divide Doubleword Extended Unsigned
740 * divdeu RT,RA,RB (OE=0 Rc=0)
741 * divdeu. RT,RA,RB (OE=0 Rc=1)
742 * divdeuo RT,RA,RB (OE=1 Rc=0)
743 * divdeuo. RT,RA,RB (OE=1 Rc=1)
747 dividend[0:127] <- (RA) || [0]*64
748 divisor[0:127] <- [0]*64 || (RB)
749 if divisor = [0]*128 then
752 result <- dividend / divisor
759 RT[0:63] <- undefined[0:63]
761 Special Registers Altered:
766 # Modulo Signed Doubleword
776 if (((dividend = 0x8000_0000_0000_0000) &
777 (divisor = 0xffff_ffff_ffff_ffff)) |
778 (divisor = 0x0000_0000_0000_0000)) then
779 RT[0:63] <- undefined[0:63]
782 RT <- MODS(dividend, divisor)
785 Special Registers Altered:
789 # Modulo Unsigned Doubleword
799 if (divisor = 0x0000_0000_0000_0000) then
800 RT[0:63] <- undefined[0:63]
803 RT <- dividend % divisor
806 Special Registers Altered: