Mercurial > pub > dyncall > dyncall
comparison doc/disas_examples/ppc.darwin.disas @ 473:ead041d93e36
- ppc doc and disas examples related to aggregates
author | Tassilo Philipp |
---|---|
date | Wed, 16 Feb 2022 16:44:11 +0100 |
parents | 74c056b597b7 |
children | cb19b2fe2422 |
comparison
equal
deleted
inserted
replaced
472:e5820b7a3fbc | 473:ead041d93e36 |
---|---|
403 258: 80 01 00 08 lwz 0, 8(1) ; | | 403 258: 80 01 00 08 lwz 0, 8(1) ; | |
404 25c: 7c 08 03 a6 mtlr 0 ; | epilog | 404 25c: 7c 08 03 a6 mtlr 0 ; | epilog |
405 260: bb c1 ff f8 lmw 30, -8(1) ; | | 405 260: bb c1 ff f8 lmw 30, -8(1) ; | |
406 264: 4e 80 00 20 blr ; | | 406 264: 4e 80 00 20 blr ; | |
407 | 407 |
408 | |
409 | |
410 ; ---------- structs by value ----------> | |
411 ; | |
412 ; struct A { int i, j; long long l; }; | |
413 ; | |
414 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) | |
415 ; { | |
416 ; } | |
417 ; | |
418 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) | |
419 ; { | |
420 ; /* use some local data */ | |
421 ; char l[100] = { 'L' }; | |
422 ; leaf_call(b, c, d, e, f, g, h); | |
423 ; } | |
424 ; | |
425 ; int main() | |
426 ; { | |
427 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9); | |
428 ; return 0; | |
429 ; } | |
430 | |
431 | |
432 | |
433 ; output from darwin-8.0.1-ppc w/ gcc 3.3 | |
434 | |
435 _leaf_call: | |
436 00000000 stmw r30,0xfff8(r1) | |
437 00000004 stwu r1,0xffd0(r1) | |
438 00000008 or r30,r1,r1 | |
439 0000000c stw r3,0x48(r30) | |
440 00000010 stw r4,0x4c(r30) | |
441 00000014 stw r5,0x50(r30) | |
442 00000018 stw r6,0x54(r30) | |
443 0000001c stw r7,0x58(r30) | |
444 00000020 stw r8,0x5c(r30) | |
445 00000024 stw r9,0x60(r30) | |
446 00000028 stw r10,0x64(r30) | |
447 0000002c lwz r1,0x0(r1) | |
448 00000030 lmw r30,0xfff8(r1) | |
449 00000034 blr | |
450 _nonleaf_call: | |
451 00000038 mfspr r0,lr | |
452 0000003c stmw r30,0xfff8(r1) | |
453 00000040 stw r0,0x8(r1) | |
454 00000044 stwu r1,0xff30(r1) | |
455 00000048 or r30,r1,r1 | |
456 0000004c bcl 20,31,0x50 | |
457 00000050 mfspr r31,lr | |
458 00000054 stw r3,0xe8(r30) | |
459 00000058 stw r4,0xec(r30) | |
460 0000005c stw r5,0xf0(r30) | |
461 00000060 stw r6,0xf4(r30) | |
462 00000064 stw r7,0xf8(r30) | |
463 00000068 stw r8,0xfc(r30) | |
464 0000006c stw r9,0x100(r30) | |
465 00000070 stw r10,0x104(r30) | |
466 00000074 addis r2,r31,0x0 | |
467 00000078 addi r2,r2,0x148 | |
468 0000007c addi r0,r30,0x50 | |
469 00000080 li r9,0x64 | |
470 00000084 or r3,r0,r0 | |
471 00000088 or r4,r2,r2 | |
472 0000008c or r5,r9,r9 | |
473 00000090 bl 0x178 | |
474 00000094 lwz r0,0x10c(r30) | |
475 00000098 stw r0,0x38(r1) | |
476 0000009c lwz r0,0x110(r30) | |
477 000000a0 stw r0,0x3c(r1) | |
478 000000a4 lwz r3,0xec(r30) | |
479 000000a8 lwz r4,0xf0(r30) | |
480 000000ac lwz r5,0xf4(r30) | |
481 000000b0 lwz r6,0xf8(r30) | |
482 000000b4 lwz r7,0xfc(r30) | |
483 000000b8 lwz r8,0x100(r30) | |
484 000000bc lwz r9,0x104(r30) | |
485 000000c0 lwz r10,0x108(r30) | |
486 000000c4 bl 0x0 | |
487 000000c8 lwz r1,0x0(r1) | |
488 000000cc lwz r0,0x8(r1) | |
489 000000d0 mtspr lr,r0 | |
490 000000d4 lmw r30,0xfff8(r1) | |
491 000000d8 blr | |
492 _main: | |
493 000000dc mfspr r0,lr ; | |
494 000000e0 stmw r30,0xfff8(r1) ; | |
495 000000e4 stw r0,0x8(r1) ; | |
496 000000e8 stwu r1,0xff90(r1) ; | |
497 000000ec or r30,r1,r1 ; | |
498 000000f0 bcl 20,31,0xf4 ; | |
499 000000f4 mfspr r31,lr ; | |
500 000000f8 addis r2,r31,0x0 ; | |
501 000000fc addi r2,r2,0x108 ; | |
502 00000100 lwz r0,0x0(r2) ; | |
503 00000104 lwz r9,0x4(r2) ; | |
504 00000108 lwz r11,0x8(r2) ; | |
505 0000010c lwz r2,0xc(r2) ; | |
506 00000110 stw r0,0x50(r30) ; | |
507 00000114 stw r9,0x54(r30) ; | |
508 00000118 stw r11,0x58(r30) ; | |
509 0000011c stw r2,0x5c(r30) ; | |
510 00000120 li r0,0x8 ; arg 6, ... | |
511 00000124 stw r0,0x3c(r1) ; ... "pushed" onto stack | |
512 00000128 li r0,0x9 ; arg 7, ... | |
513 0000012c stw r0,0x40(r1) ; ... "pushed" onto stack | |
514 00000130 lwz r0,0x5c(r30) ; | | last word of struct "pushed" onto stack | |
515 00000134 stw r0,0x38(r1) ; | / | |
516 00000138 lwz r8,0x50(r30) ; | arg 5 (struct, passed as 4 words) \ | |
517 0000013c lwz r9,0x54(r30) ; | | first 3 words of struct passed in remaining regs | |
518 00000140 lwz r10,0x58(r30) ; | | | |
519 00000144 li r3,0x0 ; arg 0 | |
520 00000148 li r4,0x1 ; arg 1 | |
521 0000014c li r5,0x2 ; arg 2 | |
522 00000150 li r6,0x3 ; arg 3 | |
523 00000154 li r7,0x4 ; arg 4 | |
524 00000158 bl 0x38 ; call and put return address -> lr | |
525 0000015c li r0,0x0 ; return value (pointlessly) via gpr0 ... | |
526 00000160 or r3,r0,r0 ; ... to gpr3 | |
527 00000164 lwz r1,0x0(r1) ; | | |
528 00000168 lwz r0,0x8(r1) ; | | |
529 0000016c mtspr lr,r0 ; | epilog | |
530 00000170 lmw r30,0xfff8(r1) ; | | |
531 00000174 blr ; | | |
532 | |
533 | |
534 | |
535 ; ---------- single-field structs by value (of different sizes) ----------> | |
536 ; | |
537 ; struct C { char c; }; // <= 2 bytes, but normal alignment as passed like a char | |
538 ; struct S { short s; }; // <= 2 bytes, but normal alignment as passed like a short | |
539 ; struct I { int i; }; | |
540 ; struct F { float f; }; | |
541 ; struct D { double d; }; | |
542 ; | |
543 ; struct C2 { char c[2]; }; // <= 2 bytes, special alignment | |
544 ; struct C3 { char c[3]; }; // > 2 bytes, normal alignment | |
545 ; | |
546 ; void leaf_call(struct C2 a, struct C b, struct S c, struct I d, struct F e, struct D f, struct C3 g) | |
547 ; { | |
548 ; } | |
549 ; | |
550 ; int main() | |
551 ; { | |
552 ; leaf_call((struct C2){{0,1}}, (struct C){2}, (struct S){3}, (struct I){4}, (struct F){5.f}, (struct D){6.}, (struct C3){{7,8,9}}); | |
553 ; return 0; | |
554 ; } | |
555 | |
556 | |
557 | |
558 ; output from darwin-8.0.1-ppc w/ gcc 3.3 | |
559 | |
560 _leaf_call: | |
561 00000000 stmw r30,0xfff8(r1) | |
562 00000004 stwu r1,0xffc0(r1) | |
563 00000008 or r30,r1,r1 | |
564 0000000c sth r3,0x58(r30) | |
565 00000010 stb r4,0x5c(r30) | |
566 00000014 sth r5,0x60(r30) | |
567 00000018 stw r6,0x64(r30) | |
568 0000001c stfs f1,0x68(r30) | |
569 00000020 stfd f2,0x20(r30) | |
570 00000024 lwz r1,0x0(r1) | |
571 00000028 lmw r30,0xfff8(r1) | |
572 0000002c blr | |
573 _main: | |
574 00000030 mfspr r0,lr ; | | |
575 00000034 stmw r30,0xfff8(r1) ; | | |
576 00000038 stw r0,0x8(r1) ; | prolog | |
577 0000003c stwu r1,0xff80(r1) ; | | |
578 00000040 or r30,r1,r1 ; | | |
579 00000044 bcl 20,31,0x48 ; ppc way to get PC in ... | |
580 00000048 mfspr r31,lr ; ... gpr31 | |
581 0000004c li r0,0x0 ; | \ | |
582 00000050 stb r0,0x40(r30) ; | | | |
583 00000054 li r0,0x1 ; | | C2 | |
584 00000058 stb r0,0x41(r30) ; | / | |
585 0000005c li r0,0x2 ; | local area struct init \ C | |
586 00000060 stb r0,0x42(r30) ; | / | |
587 00000064 li r0,0x3 ; | \ S | |
588 00000068 sth r0,0x44(r30) ; | / | |
589 0000006c li r0,0x4 ; | \ I | |
590 00000070 stw r0,0x48(r30) ; | / | |
591 00000074 lis r0,0x40a0 ; | \ F | |
592 00000078 stw r0,0x4c(r30) ; | / | |
593 0000007c addis r2,r31,0x0 ; | \ | |
594 00000080 addi r2,r2,0xa8 ; | | D | |
595 00000084 lfd f0,0x0(r2) ; | | | |
596 00000088 stfd f0,0x50(r30) ; | / | |
597 0000008c addis r2,r31,0x0 ; | \ | |
598 00000090 addi r2,r2,0xb0 ; | | | |
599 00000094 lhz r0,0x0(r2) ; | | C3 | |
600 00000098 lbz r2,0x2(r2) ; | | | |
601 0000009c sth r0,0x60(r30) ; | | | |
602 000000a0 stb r2,0x62(r30) ; / / | |
603 000000a4 lhz r0,0x60(r30) ; \ | |
604 000000a8 lbz r2,0x62(r30) ; | | |
605 000000ac sth r0,0x34(r1) ; | prep arg 6 (struct C3), zero-extended, right justified -> local area on stack | |
606 000000b0 stb r2,0x36(r1) ; / | |
607 000000b4 lhz r3,0x40(r30) ; arg 0 (struct C2) | |
608 000000b8 lbz r4,0x42(r30) ; arg 1 (struct C) | |
609 000000bc lhz r5,0x44(r30) ; arg 2 (struct S) | |
610 000000c0 lwz r6,0x48(r30) ; arg 3 (struct I) | |
611 000000c4 lfs f1,0x4c(r30) ; arg 4 (struct F, int arg reg r7 then skipped) | |
612 000000c8 lfd f2,0x50(r30) ; arg 5 (struct D, int arg regs r8 and r9 then skipped) | |
613 000000cc lwz r10,0x34(r1) ; arg 6 (struct C3, fetched from local area) | |
614 000000d0 bl 0x0 ; call and put return address -> lr | |
615 000000d4 li r0,0x0 ; return value (pointlessly) via gpr0 ... | |
616 000000d8 or r3,r0,r0 ; ... to gpr3 | |
617 000000dc lwz r1,0x0(r1) ; | | |
618 000000e0 lwz r0,0x8(r1) ; | | |
619 000000e4 mtspr lr,r0 ; | epilog | |
620 000000e8 lmw r30,0xfff8(r1) ; | | |
621 000000ec blr ; | | |
622 | |
623 | |
624 | |
625 ; ---------- structs by value, complex example (multiple structs) ----------> | |
626 ; | |
627 ; struct A { int i, j; float f; }; | |
628 ; struct B { double d; long long l; }; | |
629 ; | |
630 ; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) | |
631 ; { | |
632 ; } | |
633 ; | |
634 ; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) | |
635 ; { | |
636 ; /* use some local data */ | |
637 ; char l[100] = { 'L' }; | |
638 ; leaf_call(b, c, d, e, f, g, h, i, j); | |
639 ; } | |
640 ; | |
641 ; int main() | |
642 ; { | |
643 ; nonleaf_call(0, 1, (struct A){2, 3, 4.f}, (struct B){5., 6ll}, 7, 8, (struct A){9, 10, 11.f}, (struct B){12., 13ll}, 14, 15); | |
644 ; return 0; | |
645 ; } | |
646 | |
647 | |
648 | |
649 ; output from darwin-8.0.1-ppc w/ gcc 3.3 | |
650 | |
651 _leaf_call: | |
652 00000000 stmw r30,0xfff8(r1) | |
653 00000004 stwu r1,0xffd0(r1) | |
654 00000008 or r30,r1,r1 | |
655 0000000c stw r3,0x48(r30) | |
656 00000010 stw r4,0x4c(r30) | |
657 00000014 stw r5,0x50(r30) | |
658 00000018 stw r6,0x54(r30) | |
659 0000001c stw r7,0x58(r30) | |
660 00000020 stw r8,0x5c(r30) | |
661 00000024 stw r9,0x60(r30) | |
662 00000028 stw r10,0x64(r30) | |
663 0000002c lwz r1,0x0(r1) | |
664 00000030 lmw r30,0xfff8(r1) | |
665 00000034 blr | |
666 _nonleaf_call: | |
667 00000038 mfspr r0,lr | |
668 0000003c stmw r30,0xfff8(r1) | |
669 00000040 stw r0,0x8(r1) | |
670 00000044 stwu r1,0xff10(r1) | |
671 00000048 or r30,r1,r1 | |
672 0000004c bcl 20,31,0x50 | |
673 00000050 mfspr r31,lr | |
674 00000054 stw r3,0x108(r30) | |
675 00000058 stw r4,0x10c(r30) | |
676 0000005c stw r5,0x110(r30) | |
677 00000060 stw r6,0x114(r30) | |
678 00000064 stw r7,0x118(r30) | |
679 00000068 stw r8,0x11c(r30) | |
680 0000006c stw r9,0x120(r30) | |
681 00000070 stw r10,0x124(r30) | |
682 00000074 addis r2,r31,0x0 | |
683 00000078 addi r2,r2,0x240 | |
684 0000007c addi r0,r30,0x70 | |
685 00000080 li r9,0x64 | |
686 00000084 or r3,r0,r0 | |
687 00000088 or r4,r2,r2 | |
688 0000008c or r5,r9,r9 | |
689 00000090 bl 0x270 | |
690 00000094 lwz r0,0x12c(r30) | |
691 00000098 stw r0,0x38(r1) | |
692 0000009c lwz r0,0x130(r30) | |
693 000000a0 stw r0,0x3c(r1) | |
694 000000a4 lwz r0,0x134(r30) | |
695 000000a8 lwz r2,0x138(r30) | |
696 000000ac lwz r9,0x13c(r30) | |
697 000000b0 stw r0,0x40(r1) | |
698 000000b4 stw r2,0x44(r1) | |
699 000000b8 stw r9,0x48(r1) | |
700 000000bc lwz r0,0x140(r30) | |
701 000000c0 lwz r2,0x144(r30) | |
702 000000c4 lwz r9,0x148(r30) | |
703 000000c8 lwz r11,0x14c(r30) | |
704 000000cc stw r0,0x4c(r1) | |
705 000000d0 stw r2,0x50(r1) | |
706 000000d4 stw r9,0x54(r1) | |
707 000000d8 stw r11,0x58(r1) | |
708 000000dc lwz r0,0x150(r30) | |
709 000000e0 stw r0,0x5c(r1) | |
710 000000e4 lwz r0,0x154(r30) | |
711 000000e8 stw r0,0x60(r1) | |
712 000000ec lwz r3,0x10c(r30) | |
713 000000f0 lwz r4,0x110(r30) | |
714 000000f4 lwz r5,0x114(r30) | |
715 000000f8 lwz r6,0x118(r30) | |
716 000000fc lwz r7,0x11c(r30) | |
717 00000100 lwz r8,0x120(r30) | |
718 00000104 lwz r9,0x124(r30) | |
719 00000108 lwz r10,0x128(r30) | |
720 0000010c bl 0x0 | |
721 00000110 lwz r1,0x0(r1) | |
722 00000114 lwz r0,0x8(r1) | |
723 00000118 mtspr lr,r0 | |
724 0000011c lmw r30,0xfff8(r1) | |
725 00000120 blr | |
726 _main: | |
727 00000124 mfspr r0,lr | |
728 00000128 stmw r30,0xfff8(r1) | |
729 0000012c stw r0,0x8(r1) | |
730 00000130 stwu r1,0xff40(r1) | |
731 00000134 or r30,r1,r1 | |
732 00000138 bcl 20,31,0x13c | |
733 0000013c mfspr r31,lr | |
734 00000140 addis r2,r31,0x0 | |
735 00000144 addi r2,r2,0x1b8 | |
736 00000148 lwz r0,0x0(r2) | |
737 0000014c lwz r9,0x4(r2) | |
738 00000150 lwz r2,0x8(r2) | |
739 00000154 stw r0,0x70(r30) | |
740 00000158 stw r9,0x74(r30) | |
741 0000015c stw r2,0x78(r30) | |
742 00000160 addis r2,r31,0x0 | |
743 00000164 addi r2,r2,0x1c4 | |
744 00000168 lwz r0,0x0(r2) | |
745 0000016c lwz r9,0x4(r2) | |
746 00000170 lwz r11,0x8(r2) | |
747 00000174 lwz r2,0xc(r2) | |
748 00000178 stw r0,0x80(r30) | |
749 0000017c stw r9,0x84(r30) | |
750 00000180 stw r11,0x88(r30) | |
751 00000184 stw r2,0x8c(r30) | |
752 00000188 addis r2,r31,0x0 | |
753 0000018c addi r2,r2,0x1d4 | |
754 00000190 lwz r0,0x0(r2) | |
755 00000194 lwz r9,0x4(r2) | |
756 00000198 lwz r2,0x8(r2) | |
757 0000019c stw r0,0x90(r30) | |
758 000001a0 stw r9,0x94(r30) | |
759 000001a4 stw r2,0x98(r30) | |
760 000001a8 addis r2,r31,0x0 | |
761 000001ac addi r2,r2,0x1e4 | |
762 000001b0 lwz r0,0x0(r2) | |
763 000001b4 lwz r9,0x4(r2) | |
764 000001b8 lwz r11,0x8(r2) | |
765 000001bc lwz r2,0xc(r2) | |
766 000001c0 stw r0,0xa0(r30) | |
767 000001c4 stw r9,0xa4(r30) | |
768 000001c8 stw r11,0xa8(r30) | |
769 000001cc stw r2,0xac(r30) | |
770 000001d0 li r0,0x7 | |
771 000001d4 stw r0,0x3c(r1) | |
772 000001d8 li r0,0x8 | |
773 000001dc stw r0,0x40(r1) | |
774 000001e0 lwz r0,0x90(r30) | |
775 000001e4 lwz r2,0x94(r30) | |
776 000001e8 lwz r9,0x98(r30) | |
777 000001ec stw r0,0x44(r1) | |
778 000001f0 stw r2,0x48(r1) | |
779 000001f4 stw r9,0x4c(r1) | |
780 000001f8 lwz r0,0xa0(r30) | |
781 000001fc lwz r2,0xa4(r30) | |
782 00000200 lwz r9,0xa8(r30) | |
783 00000204 lwz r11,0xac(r30) | |
784 00000208 stw r0,0x50(r1) | |
785 0000020c stw r2,0x54(r1) | |
786 00000210 stw r9,0x58(r1) | |
787 00000214 stw r11,0x5c(r1) | |
788 00000218 li r0,0xe | |
789 0000021c stw r0,0x60(r1) | |
790 00000220 li r0,0xf | |
791 00000224 stw r0,0x64(r1) | |
792 00000228 lwz r0,0x8c(r30) | |
793 0000022c stw r0,0x38(r1) | |
794 00000230 lwz r8,0x80(r30) | |
795 00000234 lwz r9,0x84(r30) | |
796 00000238 lwz r10,0x88(r30) | |
797 0000023c li r3,0x0 | |
798 00000240 li r4,0x1 | |
799 00000244 lwz r5,0x70(r30) | |
800 00000248 lwz r6,0x74(r30) | |
801 0000024c lwz r7,0x78(r30) | |
802 00000250 bl 0x38 | |
803 00000254 li r0,0x0 | |
804 00000258 or r3,r0,r0 | |
805 0000025c lwz r1,0x0(r1) | |
806 00000260 lwz r0,0x8(r1) | |
807 00000264 mtspr lr,r0 | |
808 00000268 lmw r30,0xfff8(r1) | |
809 0000026c blr | |
810 | |
811 | |
812 | |
813 ; ---------- returning qwords ----------> | |
814 ; | |
815 ; long long f() | |
816 ; { | |
817 ; return 7171LL; | |
818 ; } | |
819 ; | |
820 ; int main() | |
821 ; { | |
822 ; return (int)f(); | |
823 ; } | |
824 | |
825 | |
826 | |
827 ; output from darwin-8.0.1-ppc w/ gcc 3.3 | |
828 | |
829 _f: | |
830 00000000 stmw r30,0xfff8(r1) | |
831 00000004 stwu r1,0xffd0(r1) | |
832 00000008 or r30,r1,r1 | |
833 0000000c li r2,0x0 | |
834 00000010 li r3,0x1c03 | |
835 00000014 or r4,r3,r3 | |
836 00000018 or r3,r2,r2 | |
837 0000001c lwz r1,0x0(r1) | |
838 00000020 lmw r30,0xfff8(r1) | |
839 00000024 blr | |
840 _main: | |
841 00000028 mfspr r0,lr | |
842 0000002c stmw r30,0xfff8(r1) | |
843 00000030 stw r0,0x8(r1) | |
844 00000034 stwu r1,0xffb0(r1) | |
845 00000038 or r30,r1,r1 | |
846 0000003c bl 0x0 | |
847 00000040 or r2,r3,r3 | |
848 00000044 or r3,r4,r4 | |
849 00000048 or r0,r3,r3 | |
850 0000004c or r3,r0,r0 | |
851 00000050 lwz r1,0x0(r1) | |
852 00000054 lwz r0,0x8(r1) | |
853 00000058 mtspr lr,r0 | |
854 0000005c lmw r30,0xfff8(r1) | |
855 00000060 blr | |
856 | |
857 | |
858 | |
859 ; ---------- returning structs by value ----------> | |
860 ; | |
861 ; struct Small { char x; }; | |
862 ; struct Big { long long i; long j; }; | |
863 ; | |
864 ; struct Small f0() | |
865 ; { | |
866 ; struct Small s = { 132 }; | |
867 ; return s; | |
868 ; } | |
869 ; | |
870 ; struct Big f1() | |
871 ; { | |
872 ; struct Big b = { 7171LL, 232 }; | |
873 ; return b; | |
874 ; } | |
875 ; | |
876 ; int main() | |
877 ; { | |
878 ; struct Small s = f0(); | |
879 ; struct Big b = f1(); | |
880 ; return b.j + s.x; | |
881 ; } | |
882 | |
883 | |
884 | |
885 ; output from darwin-8.0.1-ppc w/ gcc 3.3 | |
886 | |
887 _f0: | |
888 00000000 stmw r30,0xfff8(r1) | |
889 00000004 stwu r1,0xffc0(r1) | |
890 00000008 or r30,r1,r1 | |
891 0000000c or r2,r3,r3 | |
892 00000010 li r0,0xff84 | |
893 00000014 stb r0,0x20(r30) | |
894 00000018 lbz r0,0x20(r30) | |
895 0000001c stb r0,0x0(r2) | |
896 00000020 or r3,r2,r2 | |
897 00000024 lwz r1,0x0(r1) | |
898 00000028 lmw r30,0xfff8(r1) | |
899 0000002c blr | |
900 _f1: | |
901 00000030 stmw r30,0xfff8(r1) | |
902 00000034 stwu r1,0xffc0(r1) | |
903 00000038 or r30,r1,r1 | |
904 0000003c mfspr r0,lr | |
905 00000040 bcl 20,31,0x44 | |
906 00000044 mfspr r8,lr | |
907 00000048 mtspr lr,r0 | |
908 0000004c or r9,r3,r3 | |
909 00000050 addis r2,r8,0x0 | |
910 00000054 addi r2,r2,0xb4 | |
911 00000058 lwz r0,0x0(r2) | |
912 0000005c lwz r11,0x4(r2) | |
913 00000060 lwz r10,0x8(r2) | |
914 00000064 lwz r2,0xc(r2) | |
915 00000068 stw r0,0x20(r30) | |
916 0000006c stw r11,0x24(r30) | |
917 00000070 stw r10,0x28(r30) | |
918 00000074 stw r2,0x2c(r30) | |
919 00000078 lwz r0,0x20(r30) | |
920 0000007c lwz r2,0x24(r30) | |
921 00000080 lwz r11,0x28(r30) | |
922 00000084 lwz r10,0x2c(r30) | |
923 00000088 stw r0,0x0(r9) | |
924 0000008c stw r2,0x4(r9) | |
925 00000090 stw r11,0x8(r9) | |
926 00000094 stw r10,0xc(r9) | |
927 00000098 or r3,r9,r9 | |
928 0000009c lwz r1,0x0(r1) | |
929 000000a0 lmw r30,0xfff8(r1) | |
930 000000a4 blr | |
931 _main: | |
932 000000a8 mfspr r0,lr | |
933 000000ac stmw r30,0xfff8(r1) | |
934 000000b0 stw r0,0x8(r1) | |
935 000000b4 stwu r1,0xff90(r1) | |
936 000000b8 or r30,r1,r1 | |
937 000000bc addi r3,r30,0x40 | |
938 000000c0 bl 0x0 | |
939 000000c4 addi r0,r30,0x50 | |
940 000000c8 or r3,r0,r0 | |
941 000000cc bl 0x30 | |
942 000000d0 lbz r0,0x40(r30) | |
943 000000d4 extsb r2,r0 | |
944 000000d8 lwz r0,0x58(r30) | |
945 000000dc add r0,r2,r0 | |
946 000000e0 or r3,r0,r0 | |
947 000000e4 lwz r1,0x0(r1) | |
948 000000e8 lwz r0,0x8(r1) | |
949 000000ec mtspr lr,r0 | |
950 000000f0 lmw r30,0xfff8(r1) | |
951 000000f4 blr | |
952 | |
953 | |
954 | |
408 ; vim: ft=asm | 955 ; vim: ft=asm |
409 | 956 |