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[0:31]
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[0:31]
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 if (((dividend = 0x8000_0000) &
343 (divisor = 0xffff_ffff)) |
344 (divisor = 0x0000_0000)) then
345 RT[0:63] <- undefined[0:63]
348 RT[32:63] <- dividend / divisor
349 RT[0:31] <- undefined[0:31]
352 Special Registers Altered:
354 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
357 # Divide Word Unsigned
361 * divwu RT,RA,RB (OE=0 Rc=0)
362 * divwu. RT,RA,RB (OE=0 Rc=1)
363 * divwuo RT,RA,RB (OE=1 Rc=0)
364 * divwuo. RT,RA,RB (OE=1 Rc=1)
366 dividend[0:31] <- (RA)[32:63]
367 divisor[0:31] <- (RB)[32:63]
369 RT[32:63] <- dividend / divisor
370 RT[0:31] <- undefined[0:31]
373 RT[0:63] <- undefined[0:63]
376 Special Registers Altered:
378 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
381 # Divide Word Extended
385 * divwe RT,RA,RB (OE=0 Rc=0)
386 * divwe. RT,RA,RB (OE=0 Rc=1)
387 * divweo RT,RA,RB (OE=1 Rc=0)
388 * divweo. RT,RA,RB (OE=1 Rc=1)
390 dividend[0:63] <- (RA)[32:63] || [0]*32
391 divisor[0:63] <- (RB)[32:63] || [0]*32
392 if (divisor = 0x0000_0000_0000_0000) then
395 result <- dividend / divisor
396 if (result[32:63] = 0) then
397 RT[32:63] <- result[0:31]
398 RT[0:31] <- undefined[0:31]
403 RT[0:63] <- undefined[0:63]
405 Special Registers Altered:
407 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
410 # Divide Word Extended Unsigned
414 * divweu RT,RA,RB (OE=0 Rc=0)
415 * divweu. RT,RA,RB (OE=0 Rc=1)
416 * divweuo RT,RA,RB (OE=1 Rc=0)
417 * divweuo. RT,RA,RB (OE=1 Rc=1)
419 dividend[0:63] <- (RA)[32:63] || [0]*32
420 divisor[0:63] <- (RB)[32:63] || [0]*32
421 if (divisor = 0x0000_0000_0000_0000) then
424 result <- dividend / divisor
426 RT[32:63] <- result[0:31]
427 RT[0:31] <- undefined[0:31]
432 RT[0:63] <- undefined[0:63]
434 Special Registers Altered:
436 CR0 (bits 0:2 undefined in 64-bit mode) (if Rc=1)
445 dividend[0:31] <- (RA)[32:63]
446 divisor [0:31] <- (RB)[32:63]
447 if (((dividend = 0x8000_0000) &
448 (divisor = 0xffff_ffff)) |
449 (divisor = 0x0000_0000)) then
450 RT[0:63] <- undefined[0:63]
453 RT[32:63] <- dividend % divisor
454 RT[0:31] <- undefined[0:31]
457 Special Registers Altered:
461 # Modulo Unsigned Word
467 dividend[0:31] <- (RA) [32:63]
468 divisor [0:31] <- (RB) [32:63]
469 if divisor = 0x0000_0000 then
470 RT[0:63] <- undefined[0:63]
473 RT[32:63] <- dividend % divisor
474 RT[0:31] <- undefined[0:31]
477 Special Registers Altered:
481 # Deliver A Random Number
489 Special Registers Altered:
493 # Multiply Low Doubleword
497 * mulld RT,RA,RB (OE=0 Rc=0)
498 * mulld. RT,RA,RB (OE=0 Rc=1)
499 * mulldo RT,RA,RB (OE=1 Rc=0)
500 * mulldo. RT,RA,RB (OE=1 Rc=1)
502 prod[0:127] <- (RA) * (RB)
505 Special Registers Altered:
510 # Multiply High Doubleword
514 * mulhd RT,RA,RB (Rc=0)
515 * mulhd. RT,RA,RB (Rc=1)
517 prod[0:127] <- (RA) * (RB)
520 Special Registers Altered:
524 # Multiply High Doubleword Unsigned
528 * mulhdu RT,RA,RB (Rc=0)
529 * mulhdu. RT,RA,RB (Rc=1)
531 prod[0:127] <- (RA) * (RB)
534 Special Registers Altered:
538 # Multiply-Add High Doubleword VA-Form
544 prod[0:127] <- (RA) * (RB)
545 sum[0:127] <- prod + EXTS(RC)
548 Special Registers Altered:
552 # Multiply-Add High Doubleword Unsigned
556 * maddhdu RT,RA.RB,RC
558 prod[0:127] <- (RA) * (RB)
559 sum[0:127] <- prod + EXTZ(RC)
562 Special Registers Altered:
566 # Multiply-Add Low Doubleword
572 prod[0:127] <- (RA) * (RB)
573 sum[0:127] <- prod + EXTS(RC)
576 Special Registers Altered:
584 * divd RT,RA,RB (OE=0 Rc=0)
585 * divd. RT,RA,RB (OE=0 Rc=1)
586 * divdo RT,RA,RB (OE=1 Rc=0)
587 * divdo. RT,RA,RB (OE=1 Rc=1)
589 dividend[0:63] <- (RA)
590 divisor[0:63] <- (RB)
591 if (((dividend = 0x8000_0000_0000_0000) &
592 (divisor = 0xffff_ffff_ffff_ffff)) |
593 (divisor = 0x0000_0000_0000_0000)) then
594 RT[0:63] <- undefined[0:63]
597 RT <- dividend / divisor
600 Special Registers Altered:
605 # Divide Doubleword Unsigned
609 * divdu RT,RA,RB (OE=0 Rc=0)
610 * divdu. RT,RA,RB (OE=0 Rc=1)
611 * divduo RT,RA,RB (OE=1 Rc=0)
612 * divduo. RT,RA,RB (OE=1 Rc=1)
614 dividend[0:63] <- (RA)
615 divisor[0:63] <- (RB)
616 if (divisor = 0x0000_0000_0000_0000) then
617 RT[0:63] <- undefined[0:63]
620 RT <- dividend / divisor
623 Special Registers Altered:
628 # Divide Doubleword Extended
632 * divde RT,RA,RB (OE=0 Rc=0)
633 * divde. RT,RA,RB (OE=0 Rc=1)
634 * divdeo RT,RA,RB (OE=1 Rc=0)
635 * divdeo. RT,RA,RB (OE=1 Rc=1)
637 dividend[0:127] <- (RA) || [0]*64
638 divisor[0:127] <- (RB) || [0*64]
639 if divisor = [0]*128 then
642 result <- dividend / divisor
643 if result[64:127] = 0x0000_0000_0000_0000 then
649 RT[0:63] <- undefined[0:63]
651 Special Registers Altered:
656 # Divide Doubleword Extended Unsigned
660 * divdeu RT,RA,RB (OE=0 Rc=0)
661 * divdeu. RT,RA,RB (OE=0 Rc=1)
662 * divdeuo RT,RA,RB (OE=1 Rc=0)
663 * divdeuo. RT,RA,RB (OE=1 Rc=1)
665 dividend[0:127] <- (RA) || [0]*64
666 divisor[0:127] <- (RB) || [0*64]
667 if divisor = [0]*128 then
670 result <- dividend / divisor
677 RT[0:63] <- undefined[0:63]
679 Special Registers Altered:
684 # Modulo Signed Doubleword
692 if (((dividend = 0x8000_0000_0000_0000) &
693 (divisor = 0xffff_ffff_ffff_ffff)) |
694 (divisor = 0x0000_0000_0000_0000)) then
695 RT[0:63] <- undefined[0:63]
698 RT <- dividend % divisor
701 Special Registers Altered:
705 # Modulo Unsigned Doubleword
713 if (divisor = 0x0000_0000_0000_0000) then
714 RT[0:63] <- undefined[0:63]
717 RT <- dividend % divisor
720 Special Registers Altered: