Mercurial > pub > dyncall > dyncall
comparison doc/disas_examples/ppc.sysv.disas @ 473:ead041d93e36
- ppc doc and disas examples related to aggregates
author | Tassilo Philipp |
---|---|
date | Wed, 16 Feb 2022 16:44:11 +0100 |
parents | 06c9adae114d |
children | cb19b2fe2422 |
comparison
equal
deleted
inserted
replaced
472:e5820b7a3fbc | 473:ead041d93e36 |
---|---|
608 4dc: 7c 08 03 a6 mtlr r0 ; | | 608 4dc: 7c 08 03 a6 mtlr r0 ; | |
609 4e0: 83 eb ff fc lwz r31,-4(r11) ; | epilog | 609 4e0: 83 eb ff fc lwz r31,-4(r11) ; | epilog |
610 4e4: 7d 61 5b 78 mr r1,r11 ; | | 610 4e4: 7d 61 5b 78 mr r1,r11 ; | |
611 4e8: 4e 80 00 20 blr ; | | 611 4e8: 4e 80 00 20 blr ; | |
612 | 612 |
613 | |
614 | |
615 ; ---------- structs by value ----------> | |
616 ; | |
617 ; struct A { int i, j; long long l; }; | |
618 ; | |
619 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) | |
620 ; { | |
621 ; } | |
622 ; | |
623 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) | |
624 ; { | |
625 ; /* use some local data */ | |
626 ; char l[100] = { 'L' }; | |
627 ; leaf_call(b, c, d, e, f, g, h); | |
628 ; } | |
629 ; | |
630 ; int main() | |
631 ; { | |
632 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9); | |
633 ; return 0; | |
634 ; } | |
635 | |
636 | |
637 | |
638 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2 | |
639 | |
640 00000000 <leaf_call>: | |
641 0: 94 21 ff d0 stwu r1,-48(r1) | |
642 4: 93 e1 00 2c stw r31,44(r1) | |
643 8: 7c 3f 0b 78 mr r31,r1 | |
644 c: 90 7f 00 08 stw r3,8(r31) | |
645 10: 90 9f 00 0c stw r4,12(r31) | |
646 14: 90 bf 00 10 stw r5,16(r31) | |
647 18: 90 df 00 14 stw r6,20(r31) | |
648 1c: 91 1f 00 18 stw r8,24(r31) | |
649 20: 91 3f 00 1c stw r9,28(r31) | |
650 24: 81 61 00 00 lwz r11,0(r1) | |
651 28: 83 eb ff fc lwz r31,-4(r11) | |
652 2c: 7d 61 5b 78 mr r1,r11 | |
653 30: 4e 80 00 20 blr | |
654 | |
655 00000034 <nonleaf_call>: | |
656 34: 94 21 ff 40 stwu r1,-192(r1) | |
657 38: 7c 08 02 a6 mflr r0 | |
658 3c: 93 a1 00 b4 stw r29,180(r1) | |
659 40: 93 e1 00 bc stw r31,188(r1) | |
660 44: 90 01 00 c4 stw r0,196(r1) | |
661 48: 7c 3f 0b 78 mr r31,r1 | |
662 4c: 90 7f 00 78 stw r3,120(r31) | |
663 50: 90 9f 00 7c stw r4,124(r31) | |
664 54: 90 bf 00 80 stw r5,128(r31) | |
665 58: 90 df 00 84 stw r6,132(r31) | |
666 5c: 90 ff 00 88 stw r7,136(r31) | |
667 60: 7d 1d 43 78 mr r29,r8 | |
668 64: 91 3f 00 8c stw r9,140(r31) | |
669 68: 91 5f 00 90 stw r10,144(r31) | |
670 6c: 38 1f 00 08 addi r0,r31,8 | |
671 70: 39 20 00 64 li r9,100 | |
672 74: 7c 03 03 78 mr r3,r0 | |
673 78: 38 80 00 00 li r4,0 | |
674 7c: 7d 25 4b 78 mr r5,r9 | |
675 80: 48 00 00 01 bl 80 <nonleaf_call+0x4c> | |
676 84: 38 00 00 4c li r0,76 | |
677 88: 98 1f 00 08 stb r0,8(r31) | |
678 8c: 80 1d 00 00 lwz r0,0(r29) | |
679 90: 81 3d 00 04 lwz r9,4(r29) | |
680 94: 81 7d 00 08 lwz r11,8(r29) | |
681 98: 81 5d 00 0c lwz r10,12(r29) | |
682 9c: 90 1f 00 a0 stw r0,160(r31) | |
683 a0: 91 3f 00 a4 stw r9,164(r31) | |
684 a4: 91 7f 00 a8 stw r11,168(r31) | |
685 a8: 91 5f 00 ac stw r10,172(r31) | |
686 ac: 38 1f 00 a0 addi r0,r31,160 | |
687 b0: 80 7f 00 7c lwz r3,124(r31) | |
688 b4: 80 9f 00 80 lwz r4,128(r31) | |
689 b8: 80 bf 00 84 lwz r5,132(r31) | |
690 bc: 80 df 00 88 lwz r6,136(r31) | |
691 c0: 7c 07 03 78 mr r7,r0 | |
692 c4: 81 1f 00 8c lwz r8,140(r31) | |
693 c8: 81 3f 00 90 lwz r9,144(r31) | |
694 cc: 48 00 00 01 bl cc <nonleaf_call+0x98> | |
695 d0: 81 61 00 00 lwz r11,0(r1) | |
696 d4: 80 0b 00 04 lwz r0,4(r11) | |
697 d8: 7c 08 03 a6 mtlr r0 | |
698 dc: 83 ab ff f4 lwz r29,-12(r11) | |
699 e0: 83 eb ff fc lwz r31,-4(r11) | |
700 e4: 7d 61 5b 78 mr r1,r11 | |
701 e8: 4e 80 00 20 blr | |
702 | |
703 000000ec <main>: | |
704 ec: 94 21 ff c0 stwu r1,-64(r1) ; | |
705 f0: 7c 08 02 a6 mflr r0 ; | |
706 f4: 93 e1 00 3c stw r31,60(r1) ; | |
707 f8: 90 01 00 44 stw r0,68(r1) ; | |
708 fc: 7c 3f 0b 78 mr r31,r1 ; | |
709 100: 3d 20 00 00 lis r9,0 ; | |
710 104: 39 29 00 00 addi r9,r9,0 ; | |
711 108: 80 09 00 00 lwz r0,0(r9) ; | |
712 10c: 81 69 00 04 lwz r11,4(r9) ; | |
713 110: 81 49 00 08 lwz r10,8(r9) ; | |
714 114: 81 29 00 0c lwz r9,12(r9) ; | |
715 118: 90 1f 00 08 stw r0,8(r31) ; | |
716 11c: 91 7f 00 0c stw r11,12(r31) ; | |
717 120: 91 5f 00 10 stw r10,16(r31) ; | |
718 124: 91 3f 00 14 stw r9,20(r31) ; | |
719 128: 80 1f 00 08 lwz r0,8(r31) ; | |
720 12c: 81 3f 00 0c lwz r9,12(r31) ; | |
721 130: 81 7f 00 10 lwz r11,16(r31) ; | |
722 134: 81 5f 00 14 lwz r10,20(r31) ; | |
723 138: 90 1f 00 20 stw r0,32(r31) ; | |
724 13c: 91 3f 00 24 stw r9,36(r31) ; | |
725 140: 91 7f 00 28 stw r11,40(r31) ; | |
726 144: 91 5f 00 2c stw r10,44(r31) ; | |
727 148: 38 1f 00 20 addi r0,r31,32 ; | |
728 14c: 38 60 00 00 li r3,0 ; arg 0 | |
729 150: 38 80 00 01 li r4,1 ; arg 1 | |
730 154: 38 a0 00 02 li r5,2 ; arg 2 | |
731 158: 38 c0 00 03 li r6,3 ; arg 3 | |
732 15c: 38 e0 00 04 li r7,4 ; arg 4 | |
733 160: 7c 08 03 78 mr r8,r0 ; arg 5 (struct, passed as pointer to local copy) | |
734 164: 39 20 00 08 li r9,8 ; arg 6 | |
735 168: 39 40 00 09 li r10,9 ; arg 7 | |
736 16c: 48 00 00 01 bl 16c <main+0x80> ; | |
737 170: 38 00 00 00 li r0,0 ; | |
738 174: 7c 03 03 78 mr r3,r0 ; | |
739 178: 81 61 00 00 lwz r11,0(r1) ; | |
740 17c: 80 0b 00 04 lwz r0,4(r11) ; | |
741 180: 7c 08 03 a6 mtlr r0 ; | |
742 184: 83 eb ff fc lwz r31,-4(r11) ; | |
743 188: 7d 61 5b 78 mr r1,r11 ; | |
744 18c: 4e 80 00 20 blr ; | |
745 | |
746 | |
747 | |
748 ; ---------- structs by value, complex example (multiple structs) ----------> | |
749 ; | |
750 ; struct A { int i, j; float f; }; | |
751 ; struct B { double d; long long l; }; | |
752 ; | |
753 ; 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) | |
754 ; { | |
755 ; } | |
756 ; | |
757 ; 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) | |
758 ; { | |
759 ; /* use some local data */ | |
760 ; char l[100] = { 'L' }; | |
761 ; leaf_call(b, c, d, e, f, g, h, i, j); | |
762 ; } | |
763 ; | |
764 ; int main() | |
765 ; { | |
766 ; 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); | |
767 ; return 0; | |
768 ; } | |
769 | |
770 | |
771 | |
772 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2 | |
773 | |
774 00000000 <leaf_call>: | |
775 0: 94 21 ff e0 stwu r1,-32(r1) | |
776 4: 93 e1 00 1c stw r31,28(r1) | |
777 8: 7c 3f 0b 78 mr r31,r1 | |
778 c: 90 7f 00 08 stw r3,8(r31) | |
779 10: 90 df 00 0c stw r6,12(r31) | |
780 14: 90 ff 00 10 stw r7,16(r31) | |
781 18: 91 5f 00 14 stw r10,20(r31) | |
782 1c: 81 61 00 00 lwz r11,0(r1) | |
783 20: 83 eb ff fc lwz r31,-4(r11) | |
784 24: 7d 61 5b 78 mr r1,r11 | |
785 28: 4e 80 00 20 blr | |
786 | |
787 0000002c <nonleaf_call>: | |
788 2c: 94 21 ff 00 stwu r1,-256(r1) | |
789 30: 7c 08 02 a6 mflr r0 | |
790 34: 93 41 00 e8 stw r26,232(r1) | |
791 38: 93 61 00 ec stw r27,236(r1) | |
792 3c: 93 81 00 f0 stw r28,240(r1) | |
793 40: 93 a1 00 f4 stw r29,244(r1) | |
794 44: 93 e1 00 fc stw r31,252(r1) | |
795 48: 90 01 01 04 stw r0,260(r1) | |
796 4c: 7c 3f 0b 78 mr r31,r1 | |
797 50: 90 7f 00 80 stw r3,128(r31) | |
798 54: 90 9f 00 84 stw r4,132(r31) | |
799 58: 7c bd 2b 78 mr r29,r5 | |
800 5c: 7c dc 33 78 mr r28,r6 | |
801 60: 90 ff 00 88 stw r7,136(r31) | |
802 64: 91 1f 00 8c stw r8,140(r31) | |
803 68: 7d 3b 4b 78 mr r27,r9 | |
804 6c: 7d 5a 53 78 mr r26,r10 | |
805 70: 38 1f 00 10 addi r0,r31,16 | |
806 74: 39 20 00 64 li r9,100 | |
807 78: 7c 03 03 78 mr r3,r0 | |
808 7c: 38 80 00 00 li r4,0 | |
809 80: 7d 25 4b 78 mr r5,r9 | |
810 84: 48 00 00 01 bl 84 <nonleaf_call+0x58> | |
811 88: 38 00 00 4c li r0,76 | |
812 8c: 98 1f 00 10 stb r0,16(r31) | |
813 90: 80 1d 00 00 lwz r0,0(r29) | |
814 94: 81 3d 00 04 lwz r9,4(r29) | |
815 98: 81 7d 00 08 lwz r11,8(r29) | |
816 9c: 90 1f 00 98 stw r0,152(r31) | |
817 a0: 91 3f 00 9c stw r9,156(r31) | |
818 a4: 91 7f 00 a0 stw r11,160(r31) | |
819 a8: 80 1c 00 00 lwz r0,0(r28) | |
820 ac: 81 3c 00 04 lwz r9,4(r28) | |
821 b0: 81 7c 00 08 lwz r11,8(r28) | |
822 b4: 81 5c 00 0c lwz r10,12(r28) | |
823 b8: 90 1f 00 a8 stw r0,168(r31) | |
824 bc: 91 3f 00 ac stw r9,172(r31) | |
825 c0: 91 7f 00 b0 stw r11,176(r31) | |
826 c4: 91 5f 00 b4 stw r10,180(r31) | |
827 c8: 80 1b 00 00 lwz r0,0(r27) | |
828 cc: 81 3b 00 04 lwz r9,4(r27) | |
829 d0: 81 7b 00 08 lwz r11,8(r27) | |
830 d4: 90 1f 00 b8 stw r0,184(r31) | |
831 d8: 91 3f 00 bc stw r9,188(r31) | |
832 dc: 91 7f 00 c0 stw r11,192(r31) | |
833 e0: 80 1a 00 00 lwz r0,0(r26) | |
834 e4: 81 3a 00 04 lwz r9,4(r26) | |
835 e8: 81 7a 00 08 lwz r11,8(r26) | |
836 ec: 81 5a 00 0c lwz r10,12(r26) | |
837 f0: 90 1f 00 c8 stw r0,200(r31) | |
838 f4: 91 3f 00 cc stw r9,204(r31) | |
839 f8: 91 7f 00 d0 stw r11,208(r31) | |
840 fc: 91 5f 00 d4 stw r10,212(r31) | |
841 100: 39 3f 00 98 addi r9,r31,152 | |
842 104: 39 7f 00 a8 addi r11,r31,168 | |
843 108: 39 5f 00 b8 addi r10,r31,184 | |
844 10c: 3b bf 00 c8 addi r29,r31,200 | |
845 110: 80 1f 01 0c lwz r0,268(r31) | |
846 114: 90 01 00 08 stw r0,8(r1) | |
847 118: 80 7f 00 84 lwz r3,132(r31) | |
848 11c: 7d 24 4b 78 mr r4,r9 | |
849 120: 7d 65 5b 78 mr r5,r11 | |
850 124: 80 df 00 88 lwz r6,136(r31) | |
851 128: 80 ff 00 8c lwz r7,140(r31) | |
852 12c: 7d 48 53 78 mr r8,r10 | |
853 130: 7f a9 eb 78 mr r9,r29 | |
854 134: 81 5f 01 08 lwz r10,264(r31) | |
855 138: 48 00 00 01 bl 138 <nonleaf_call+0x10c> | |
856 13c: 81 61 00 00 lwz r11,0(r1) | |
857 140: 80 0b 00 04 lwz r0,4(r11) | |
858 144: 7c 08 03 a6 mtlr r0 | |
859 148: 83 4b ff e8 lwz r26,-24(r11) | |
860 14c: 83 6b ff ec lwz r27,-20(r11) | |
861 150: 83 8b ff f0 lwz r28,-16(r11) | |
862 154: 83 ab ff f4 lwz r29,-12(r11) | |
863 158: 83 eb ff fc lwz r31,-4(r11) | |
864 15c: 7d 61 5b 78 mr r1,r11 | |
865 160: 4e 80 00 20 blr | |
866 | |
867 00000164 <main>: | |
868 164: 94 21 ff 50 stwu r1,-176(r1) | |
869 168: 7c 08 02 a6 mflr r0 | |
870 16c: 93 a1 00 a4 stw r29,164(r1) | |
871 170: 93 e1 00 ac stw r31,172(r1) | |
872 174: 90 01 00 b4 stw r0,180(r1) | |
873 178: 7c 3f 0b 78 mr r31,r1 | |
874 17c: 3d 20 00 00 lis r9,0 | |
875 180: 39 29 00 30 addi r9,r9,48 | |
876 184: 80 09 00 00 lwz r0,0(r9) | |
877 188: 81 69 00 04 lwz r11,4(r9) | |
878 18c: 81 29 00 08 lwz r9,8(r9) | |
879 190: 90 1f 00 40 stw r0,64(r31) | |
880 194: 91 7f 00 44 stw r11,68(r31) | |
881 198: 91 3f 00 48 stw r9,72(r31) | |
882 19c: 3d 20 00 00 lis r9,0 | |
883 1a0: 39 29 00 20 addi r9,r9,32 | |
884 1a4: 80 09 00 00 lwz r0,0(r9) | |
885 1a8: 81 69 00 04 lwz r11,4(r9) | |
886 1ac: 81 49 00 08 lwz r10,8(r9) | |
887 1b0: 81 29 00 0c lwz r9,12(r9) | |
888 1b4: 90 1f 00 30 stw r0,48(r31) | |
889 1b8: 91 7f 00 34 stw r11,52(r31) | |
890 1bc: 91 5f 00 38 stw r10,56(r31) | |
891 1c0: 91 3f 00 3c stw r9,60(r31) | |
892 1c4: 3d 20 00 00 lis r9,0 | |
893 1c8: 39 29 00 10 addi r9,r9,16 | |
894 1cc: 80 09 00 00 lwz r0,0(r9) | |
895 1d0: 81 69 00 04 lwz r11,4(r9) | |
896 1d4: 81 29 00 08 lwz r9,8(r9) | |
897 1d8: 90 1f 00 20 stw r0,32(r31) | |
898 1dc: 91 7f 00 24 stw r11,36(r31) | |
899 1e0: 91 3f 00 28 stw r9,40(r31) | |
900 1e4: 3d 20 00 00 lis r9,0 | |
901 1e8: 39 29 00 00 addi r9,r9,0 | |
902 1ec: 80 09 00 00 lwz r0,0(r9) | |
903 1f0: 81 69 00 04 lwz r11,4(r9) | |
904 1f4: 81 49 00 08 lwz r10,8(r9) | |
905 1f8: 81 29 00 0c lwz r9,12(r9) | |
906 1fc: 90 1f 00 10 stw r0,16(r31) | |
907 200: 91 7f 00 14 stw r11,20(r31) | |
908 204: 91 5f 00 18 stw r10,24(r31) | |
909 208: 91 3f 00 1c stw r9,28(r31) | |
910 20c: 80 1f 00 40 lwz r0,64(r31) | |
911 210: 81 3f 00 44 lwz r9,68(r31) | |
912 214: 81 7f 00 48 lwz r11,72(r31) | |
913 218: 90 1f 00 58 stw r0,88(r31) | |
914 21c: 91 3f 00 5c stw r9,92(r31) | |
915 220: 91 7f 00 60 stw r11,96(r31) | |
916 224: 80 1f 00 30 lwz r0,48(r31) | |
917 228: 81 3f 00 34 lwz r9,52(r31) | |
918 22c: 81 7f 00 38 lwz r11,56(r31) | |
919 230: 81 5f 00 3c lwz r10,60(r31) | |
920 234: 90 1f 00 68 stw r0,104(r31) | |
921 238: 91 3f 00 6c stw r9,108(r31) | |
922 23c: 91 7f 00 70 stw r11,112(r31) | |
923 240: 91 5f 00 74 stw r10,116(r31) | |
924 244: 80 1f 00 20 lwz r0,32(r31) | |
925 248: 81 3f 00 24 lwz r9,36(r31) | |
926 24c: 81 7f 00 28 lwz r11,40(r31) | |
927 250: 90 1f 00 78 stw r0,120(r31) | |
928 254: 91 3f 00 7c stw r9,124(r31) | |
929 258: 91 7f 00 80 stw r11,128(r31) | |
930 25c: 80 1f 00 10 lwz r0,16(r31) | |
931 260: 81 3f 00 14 lwz r9,20(r31) | |
932 264: 81 7f 00 18 lwz r11,24(r31) | |
933 268: 81 5f 00 1c lwz r10,28(r31) | |
934 26c: 90 1f 00 88 stw r0,136(r31) | |
935 270: 91 3f 00 8c stw r9,140(r31) | |
936 274: 91 7f 00 90 stw r11,144(r31) | |
937 278: 91 5f 00 94 stw r10,148(r31) | |
938 27c: 39 3f 00 58 addi r9,r31,88 | |
939 280: 39 7f 00 68 addi r11,r31,104 | |
940 284: 39 5f 00 78 addi r10,r31,120 | |
941 288: 3b bf 00 88 addi r29,r31,136 | |
942 28c: 38 00 00 0e li r0,14 | |
943 290: 90 01 00 08 stw r0,8(r1) | |
944 294: 38 00 00 0f li r0,15 | |
945 298: 90 01 00 0c stw r0,12(r1) | |
946 29c: 38 60 00 00 li r3,0 | |
947 2a0: 38 80 00 01 li r4,1 | |
948 2a4: 7d 25 4b 78 mr r5,r9 | |
949 2a8: 7d 66 5b 78 mr r6,r11 | |
950 2ac: 38 e0 00 07 li r7,7 | |
951 2b0: 39 00 00 08 li r8,8 | |
952 2b4: 7d 49 53 78 mr r9,r10 | |
953 2b8: 7f aa eb 78 mr r10,r29 | |
954 2bc: 48 00 00 01 bl 2bc <main+0x158> | |
955 2c0: 38 00 00 00 li r0,0 | |
956 2c4: 7c 03 03 78 mr r3,r0 | |
957 2c8: 81 61 00 00 lwz r11,0(r1) | |
958 2cc: 80 0b 00 04 lwz r0,4(r11) | |
959 2d0: 7c 08 03 a6 mtlr r0 | |
960 2d4: 83 ab ff f4 lwz r29,-12(r11) | |
961 2d8: 83 eb ff fc lwz r31,-4(r11) | |
962 2dc: 7d 61 5b 78 mr r1,r11 | |
963 2e0: 4e 80 00 20 blr | |
964 | |
965 | |
966 | |
967 ; ---------- returning qwords ----------> | |
968 ; | |
969 ; long long f() | |
970 ; { | |
971 ; return 7171LL; | |
972 ; } | |
973 ; | |
974 ; int main() | |
975 ; { | |
976 ; return (int)f(); | |
977 ; } | |
978 | |
979 | |
980 | |
981 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2 | |
982 | |
983 00000000 <f>: | |
984 0: 94 21 ff f0 stwu r1,-16(r1) | |
985 4: 93 e1 00 0c stw r31,12(r1) | |
986 8: 7c 3f 0b 78 mr r31,r1 | |
987 c: 39 20 00 00 li r9,0 | |
988 10: 39 40 1c 03 li r10,7171 | |
989 14: 7d 23 4b 78 mr r3,r9 | |
990 18: 7d 44 53 78 mr r4,r10 | |
991 1c: 81 61 00 00 lwz r11,0(r1) | |
992 20: 83 eb ff fc lwz r31,-4(r11) | |
993 24: 7d 61 5b 78 mr r1,r11 | |
994 28: 4e 80 00 20 blr | |
995 | |
996 0000002c <main>: | |
997 2c: 94 21 ff f0 stwu r1,-16(r1) | |
998 30: 7c 08 02 a6 mflr r0 | |
999 34: 93 e1 00 0c stw r31,12(r1) | |
1000 38: 90 01 00 14 stw r0,20(r1) | |
1001 3c: 7c 3f 0b 78 mr r31,r1 | |
1002 40: 48 00 00 01 bl 40 <main+0x14> | |
1003 44: 7c 8a 23 78 mr r10,r4 | |
1004 48: 7c 69 1b 78 mr r9,r3 | |
1005 4c: 7d 40 53 78 mr r0,r10 | |
1006 50: 7c 03 03 78 mr r3,r0 | |
1007 54: 81 61 00 00 lwz r11,0(r1) | |
1008 58: 80 0b 00 04 lwz r0,4(r11) | |
1009 5c: 7c 08 03 a6 mtlr r0 | |
1010 60: 83 eb ff fc lwz r31,-4(r11) | |
1011 64: 7d 61 5b 78 mr r1,r11 | |
1012 68: 4e 80 00 20 blr | |
1013 | |
1014 | |
1015 ; ---------- returning structs by value ----------> | |
1016 ; | |
1017 ; struct Small { char x; }; | |
1018 ; struct Big { long long i; long j; }; | |
1019 ; | |
1020 ; struct Small f0() | |
1021 ; { | |
1022 ; struct Small s = { 132 }; | |
1023 ; return s; | |
1024 ; } | |
1025 ; | |
1026 ; struct Big f1() | |
1027 ; { | |
1028 ; struct Big b = { 7171LL, 232 }; | |
1029 ; return b; | |
1030 ; } | |
1031 ; | |
1032 ; int main() | |
1033 ; { | |
1034 ; struct Small s = f0(); | |
1035 ; struct Big b = f1(); | |
1036 ; return b.j + s.x; | |
1037 ; } | |
1038 | |
1039 | |
1040 | |
1041 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2 | |
1042 | |
1043 00000000 <f0>: | |
1044 0: 94 21 ff e0 stwu r1,-32(r1) | |
1045 4: 93 e1 00 1c stw r31,28(r1) | |
1046 8: 7c 3f 0b 78 mr r31,r1 | |
1047 c: 7c 69 1b 78 mr r9,r3 | |
1048 10: 38 00 ff 84 li r0,-124 | |
1049 14: 98 1f 00 08 stb r0,8(r31) | |
1050 18: 88 1f 00 08 lbz r0,8(r31) | |
1051 1c: 98 09 00 00 stb r0,0(r9) | |
1052 20: 7d 23 4b 78 mr r3,r9 | |
1053 24: 81 61 00 00 lwz r11,0(r1) | |
1054 28: 83 eb ff fc lwz r31,-4(r11) | |
1055 2c: 7d 61 5b 78 mr r1,r11 | |
1056 30: 4e 80 00 20 blr | |
1057 | |
1058 00000034 <f1>: | |
1059 34: 94 21 ff e0 stwu r1,-32(r1) | |
1060 38: 93 e1 00 1c stw r31,28(r1) | |
1061 3c: 7c 3f 0b 78 mr r31,r1 | |
1062 40: 7c 6b 1b 78 mr r11,r3 | |
1063 44: 3d 20 00 00 lis r9,0 | |
1064 48: 39 29 00 00 addi r9,r9,0 | |
1065 4c: 80 09 00 00 lwz r0,0(r9) | |
1066 50: 81 49 00 04 lwz r10,4(r9) | |
1067 54: 81 09 00 08 lwz r8,8(r9) | |
1068 58: 81 29 00 0c lwz r9,12(r9) | |
1069 5c: 90 1f 00 08 stw r0,8(r31) | |
1070 60: 91 5f 00 0c stw r10,12(r31) | |
1071 64: 91 1f 00 10 stw r8,16(r31) | |
1072 68: 91 3f 00 14 stw r9,20(r31) | |
1073 6c: 80 1f 00 08 lwz r0,8(r31) | |
1074 70: 81 3f 00 0c lwz r9,12(r31) | |
1075 74: 81 5f 00 10 lwz r10,16(r31) | |
1076 78: 81 1f 00 14 lwz r8,20(r31) | |
1077 7c: 90 0b 00 00 stw r0,0(r11) | |
1078 80: 91 2b 00 04 stw r9,4(r11) | |
1079 84: 91 4b 00 08 stw r10,8(r11) | |
1080 88: 91 0b 00 0c stw r8,12(r11) | |
1081 8c: 7d 63 5b 78 mr r3,r11 | |
1082 90: 81 61 00 00 lwz r11,0(r1) | |
1083 94: 83 eb ff fc lwz r31,-4(r11) | |
1084 98: 7d 61 5b 78 mr r1,r11 | |
1085 9c: 4e 80 00 20 blr | |
1086 | |
1087 000000a0 <main>: | |
1088 a0: 94 21 ff c0 stwu r1,-64(r1) | |
1089 a4: 7c 08 02 a6 mflr r0 | |
1090 a8: 93 e1 00 3c stw r31,60(r1) | |
1091 ac: 90 01 00 44 stw r0,68(r1) | |
1092 b0: 7c 3f 0b 78 mr r31,r1 | |
1093 b4: 38 1f 00 28 addi r0,r31,40 | |
1094 b8: 7c 03 03 78 mr r3,r0 | |
1095 bc: 4c c6 31 82 crclr 4*cr1+eq | |
1096 c0: 48 00 00 01 bl c0 <main+0x20> | |
1097 c4: 88 1f 00 28 lbz r0,40(r31) | |
1098 c8: 98 1f 00 08 stb r0,8(r31) | |
1099 cc: 38 1f 00 10 addi r0,r31,16 | |
1100 d0: 7c 03 03 78 mr r3,r0 | |
1101 d4: 4c c6 31 82 crclr 4*cr1+eq | |
1102 d8: 48 00 00 01 bl d8 <main+0x38> | |
1103 dc: 81 3f 00 18 lwz r9,24(r31) | |
1104 e0: 88 1f 00 08 lbz r0,8(r31) | |
1105 e4: 54 00 06 3e clrlwi r0,r0,24 | |
1106 e8: 7c 09 02 14 add r0,r9,r0 | |
1107 ec: 7c 03 03 78 mr r3,r0 | |
1108 f0: 81 61 00 00 lwz r11,0(r1) | |
1109 f4: 80 0b 00 04 lwz r0,4(r11) | |
1110 f8: 7c 08 03 a6 mtlr r0 | |
1111 fc: 83 eb ff fc lwz r31,-4(r11) | |
1112 100: 7d 61 5b 78 mr r1,r11 | |
1113 104: 4e 80 00 20 blr | |
1114 | |
1115 | |
1116 | |
613 ; vim: ft=asm68k | 1117 ; vim: ft=asm68k |
614 | 1118 |