annotate doc/disas_examples/ppc.darwin.disas @ 497:cb19b2fe2422

- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
author Tassilo Philipp
date Wed, 23 Mar 2022 15:24:31 +0100
parents ead041d93e36
children fc614cb865c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1 ; #include <stdlib.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
2 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
4 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
5 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
6 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
13 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 ; output from darwin-8.0.1-ppc w/ gcc 3.3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
23
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
24 _leaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
25 0: bf c1 ff f8 stmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
26 4: 94 21 ff d0 stwu 1, -48(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
27 8: 7c 3e 0b 78 mr 30, 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
28 c: 90 7e 00 48 stw 3, 72(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
29 10: 90 9e 00 4c stw 4, 76(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
30 14: 90 be 00 50 stw 5, 80(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
31 18: 90 de 00 54 stw 6, 84(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
32 1c: 90 fe 00 58 stw 7, 88(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
33 20: 91 1e 00 5c stw 8, 92(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
34 24: 91 3e 00 60 stw 9, 96(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
35 28: 80 21 00 00 lwz 1, 0(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
36 2c: bb c1 ff f8 lmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
37 30: 4e 80 00 20 blr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
38
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
39 _nonleaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
40 34: 7c 08 02 a6 mflr 0 ; | lr -> gpr0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
41 38: bf c1 ff f8 stmw 30, -8(1) ; | store gpr{30,31}
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
42 3c: 90 01 00 08 stw 0, 8(1) ; | prolog store lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
43 40: 94 21 ff b0 stwu 1, -80(1) ; | open frame and store sp at top of stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
44 44: 7c 3e 0b 78 mr 30, 1 ; / sp -> gpr30, latter used for some fixed addressing below
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
45 48: 90 7e 00 68 stw 3, 104(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
46 4c: 90 9e 00 6c stw 4, 108(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
47 50: 90 be 00 70 stw 5, 112(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
48 54: 90 de 00 74 stw 6, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
49 58: 90 fe 00 78 stw 7, 120(30) ; | all in args -> spill area in prev frame
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
50 5c: 91 1e 00 7c stw 8, 124(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
51 60: 91 3e 00 80 stw 9, 128(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
52 64: 91 5e 00 84 stw 10, 132(30) ; |
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 327
diff changeset
53 68: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
54 6c: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
55 70: 38 41 00 40 addi 2, 1, 64 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
56 74: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
57 78: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, leaving at least 64b at top of stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
58 7c: 54 02 20 36 slwi 2, 0, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
59 80: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
60 84: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
61 88: 80 7e 00 6c lwz 3, 108(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
62 8c: 80 9e 00 70 lwz 4, 112(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
63 90: 80 be 00 74 lwz 5, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
64 94: 80 de 00 78 lwz 6, 120(30) ; | arg 0,1,2,3,4,5,6 (fetched from spill area from prev frame)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
65 98: 80 fe 00 7c lwz 7, 124(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
66 9c: 81 1e 00 80 lwz 8, 128(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
67 a0: 81 3e 00 84 lwz 9, 132(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
68 a4: 4b ff ff 5d bl .+67108700 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
69 a8: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
70 ac: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
71 b0: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
72 b4: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
73 b8: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
74
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
75 _main:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
76 bc: 7c 08 02 a6 mflr 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
77 c0: bf c1 ff f8 stmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
78 c4: 90 01 00 08 stw 0, 8(1) ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
79 c8: 94 21 ff b0 stwu 1, -80(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
80 cc: 7c 3e 0b 78 mr 30, 1 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
81 d0: 38 60 00 00 li 3, 0 ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
82 d4: 38 80 00 01 li 4, 1 ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
83 d8: 38 a0 00 02 li 5, 2 ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
84 dc: 38 c0 00 03 li 6, 3 ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
85 e0: 38 e0 00 04 li 7, 4 ; arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
86 e4: 39 00 00 05 li 8, 5 ; arg 5
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
87 e8: 39 20 00 06 li 9, 6 ; arg 6
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
88 ec: 39 40 00 07 li 10, 7 ; arg 7
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
89 f0: 4b ff ff 45 bl .+67108676 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
90 f4: 38 00 00 00 li 0, 0 ; return value (pointlessly) via gpr0 ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
91 f8: 7c 03 03 78 mr 3, 0 ; ... to gpr3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
92 fc: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
93 100: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
94 104: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
95 108: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
96 10c: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
97
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
98
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
99
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
100 ; ------------- more than 8 int args ----------->
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
101
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
102 ; #include <stdlib.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
103 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
104 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h, int i, int j)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
105 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
106 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
107 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
108 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
109 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
110 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
111 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
112 ; leaf_call(b, c, d, e, f, g, h, i, j);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
113 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
114 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
115 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
116 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
117 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
118 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
119 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
120
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
121
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
122
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
123 ; output from darwin-8.0.1-ppc w/ gcc 3.3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
124
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
125 _leaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
126 0: bf c1 ff f8 stmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
127 4: 94 21 ff d0 stwu 1, -48(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
128 8: 7c 3e 0b 78 mr 30, 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
129 c: 90 7e 00 48 stw 3, 72(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
130 10: 90 9e 00 4c stw 4, 76(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
131 14: 90 be 00 50 stw 5, 80(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
132 18: 90 de 00 54 stw 6, 84(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
133 1c: 90 fe 00 58 stw 7, 88(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
134 20: 91 1e 00 5c stw 8, 92(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
135 24: 91 3e 00 60 stw 9, 96(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
136 28: 91 5e 00 64 stw 10, 100(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
137 2c: 80 21 00 00 lwz 1, 0(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
138 30: bb c1 ff f8 lmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
139 34: 4e 80 00 20 blr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
140
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
141 _nonleaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
142 38: 7c 08 02 a6 mflr 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
143 3c: bf c1 ff f8 stmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
144 40: 90 01 00 08 stw 0, 8(1) ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
145 44: 94 21 ff a0 stwu 1, -96(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
146 48: 7c 3e 0b 78 mr 30, 1 ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
147 4c: 90 7e 00 78 stw 3, 120(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
148 50: 90 9e 00 7c stw 4, 124(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
149 54: 90 be 00 80 stw 5, 128(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
150 58: 90 de 00 84 stw 6, 132(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
151 5c: 90 fe 00 88 stw 7, 136(30) ; | in args 0,1,2,3,4,5,6,7 -> spill area in prev frame
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
152 60: 91 1e 00 8c stw 8, 140(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
153 64: 91 3e 00 90 stw 9, 144(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
154 68: 91 5e 00 94 stw 10, 148(30) ; |
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 327
diff changeset
155 6c: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
156 70: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
157 74: 38 41 00 50 addi 2, 1, 80 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
158 78: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
159 7c: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, leaving at least 64b at top of stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
160 80: 54 02 20 36 slwi 2, 0, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
161 84: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
162 88: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
163 8c: 80 1e 00 9c lwz 0, 156(30) ; arg 7 (fetched from stack param area from prev frame), and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
164 90: 90 01 00 38 stw 0, 56(1) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
165 94: 80 7e 00 7c lwz 3, 124(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
166 98: 80 9e 00 80 lwz 4, 128(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
167 9c: 80 be 00 84 lwz 5, 132(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
168 a0: 80 de 00 88 lwz 6, 136(30) ; | arg 0,1,2,3,4,5,6 (fetched from spill area from prev frame)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
169 a4: 80 fe 00 8c lwz 7, 140(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
170 a8: 81 1e 00 90 lwz 8, 144(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
171 ac: 81 3e 00 94 lwz 9, 148(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
172 b0: 81 5e 00 98 lwz 10, 152(30) ; arg 7 (fetched from stack param area from prev frame)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
173 b4: 4b ff ff 4d bl .+67108684 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
174 b8: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
175 bc: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
176 c0: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
177 c4: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
178 c8: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
179
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
180 _main:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
181 cc: 7c 08 02 a6 mflr 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
182 d0: bf c1 ff f8 stmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
183 d4: 90 01 00 08 stw 0, 8(1) ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
184 d8: 94 21 ff a0 stwu 1, -96(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
185 dc: 7c 3e 0b 78 mr 30, 1 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
186 e0: 38 00 00 08 li 0, 8 ; arg 8, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
187 e4: 90 01 00 38 stw 0, 56(1) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
188 e8: 38 00 00 09 li 0, 9 ; arg 9, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
189 ec: 90 01 00 3c stw 0, 60(1) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
190 f0: 38 60 00 00 li 3, 0 ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
191 f4: 38 80 00 01 li 4, 1 ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
192 f8: 38 a0 00 02 li 5, 2 ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
193 fc: 38 c0 00 03 li 6, 3 ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
194 100: 38 e0 00 04 li 7, 4 ; arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
195 104: 39 00 00 05 li 8, 5 ; arg 5
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
196 108: 39 20 00 06 li 9, 6 ; arg 6
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
197 10c: 39 40 00 07 li 10, 7 ; arg 7
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
198 110: 4b ff ff 29 bl .+67108648 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
199 114: 38 00 00 00 li 0, 0 ; return value (pointlessly) via gpr0 ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
200 118: 7c 03 03 78 mr 3, 0 ; ... to gpr3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
201 11c: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
202 120: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
203 124: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
204 128: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
205 12c: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
206
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
207
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
208
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
209 ; ------------- var args with ints and floats to see spilling (which remains only int regs), b/c doubles are passed via them and floats are promoted to doubles in (...) ----------->
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
210
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
211 ; #include <stdlib.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
212 ; #include <stdarg.h>
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
213 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
214 ; void leaf_call(int b, int c, int d, int e, float f, float g, int h, int i, float j)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
215 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
216 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
217 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
218 ; void nonleaf_call(int a, ...)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
219 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
220 ; int b, c, d, e, h, i;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
221 ; float f, g, j;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
222 ; va_list ap;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
223 ; va_start(ap, a);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
224 ; b = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
225 ; c = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
226 ; d = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
227 ; e = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
228 ; f = (float)va_arg(ap, double);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
229 ; g = (float)va_arg(ap, double);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
230 ; h = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
231 ; i = va_arg(ap, int);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
232 ; j = (float)va_arg(ap, double);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
233 ; /* use some local data */
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
234 ; *(char*)alloca(220) = 'L';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
235 ; leaf_call(b, c, d, e, f, g, h, i, j);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
236 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
237 ;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
238 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
239 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
240 ; nonleaf_call(0, 1, 2, 3, 4, 5.f, 6.f, 7, 8, 9.f);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
241 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
242 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
243
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
244
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
245
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
246 ; output from darwin-8.0.1-ppc w/ gcc 3.3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
247
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
248 _leaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
249 0: bf c1 ff f8 stmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
250 4: 94 21 ff d0 stwu 1, -48(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
251 8: 7c 3e 0b 78 mr 30, 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
252 c: 90 7e 00 48 stw 3, 72(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
253 10: 90 9e 00 4c stw 4, 76(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
254 14: 90 be 00 50 stw 5, 80(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
255 18: 90 de 00 54 stw 6, 84(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
256 1c: d0 3e 00 58 stfs 1, 88(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
257 20: d0 5e 00 5c stfs 2, 92(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
258 24: 91 3e 00 60 stw 9, 96(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
259 28: 91 5e 00 64 stw 10, 100(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
260 2c: d0 7e 00 68 stfs 3, 104(30)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
261 30: 80 21 00 00 lwz 1, 0(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
262 34: bb c1 ff f8 lmw 30, -8(1)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
263 38: 4e 80 00 20 blr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
264
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
265 _nonleaf_call:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
266 3c: 7c 08 02 a6 mflr 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
267 40: bf c1 ff f8 stmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
268 44: 90 01 00 08 stw 0, 8(1) ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
269 48: 94 21 ff 70 stwu 1, -144(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
270 4c: 7c 3e 0b 78 mr 30, 1 ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
271 50: 90 9e 00 ac stw 4, 172(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
272 54: 90 be 00 b0 stw 5, 176(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
273 58: 90 de 00 b4 stw 6, 180(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
274 5c: 90 fe 00 b8 stw 7, 184(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
275 60: 91 1e 00 bc stw 8, 188(30) ; | in args ,1,2,3,4,5,6,7 -> spill area in prev frame
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
276 64: 91 3e 00 c0 stw 9, 192(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
277 68: 91 5e 00 c4 stw 10, 196(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
278 6c: 90 7e 00 a8 stw 3, 168(30) ; | <- this is in arg 0, the only named arg
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
279 70: 38 1e 00 ac addi 0, 30, 172 ; get pointer to first unnamed arg in gpr0 for vararg iteration, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
280 74: 90 1e 00 74 stw 0, 116(30) ; ... and store read ptr in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
281 78: 81 3e 00 74 lwz 9, 116(30) ; \ read ptr -> gpr0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
282 7c: 80 5e 00 74 lwz 2, 116(30) ; | use gpr2 as helper ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
283 80: 38 02 00 04 addi 0, 2, 4 ; | ... to increment read ptr ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
284 84: 90 1e 00 74 stw 0, 116(30) ; | in arg 1 ... and restore
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
285 88: 80 09 00 00 lwz 0, 0(9) ; | load in arg 1, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
286 8c: 90 1e 00 50 stw 0, 80(30) ; / ... store in temp space in local area
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
287 90: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
288 94: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
289 98: 38 02 00 04 addi 0, 2, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
290 9c: 90 1e 00 74 stw 0, 116(30) ; | in arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
291 a0: 80 09 00 00 lwz 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
292 a4: 90 1e 00 54 stw 0, 84(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
293 a8: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
294 ac: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
295 b0: 38 02 00 04 addi 0, 2, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
296 b4: 90 1e 00 74 stw 0, 116(30) ; | in arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
297 b8: 80 09 00 00 lwz 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
298 bc: 90 1e 00 58 stw 0, 88(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
299 c0: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
300 c4: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
301 c8: 38 02 00 04 addi 0, 2, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
302 cc: 90 1e 00 74 stw 0, 116(30) ; | in arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
303 d0: 80 09 00 00 lwz 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
304 d4: 90 1e 00 5c stw 0, 92(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
305 d8: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
306 dc: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
307 e0: 38 02 00 08 addi 0, 2, 8 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
308 e4: 90 1e 00 74 stw 0, 116(30) ; | in arg 5 (float, promoted to double)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
309 e8: c8 09 00 00 lfd 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
310 ec: fc 00 00 18 frsp 0, 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
311 f0: d0 1e 00 68 stfs 0, 104(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
312 f4: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
313 f8: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
314 fc: 38 02 00 08 addi 0, 2, 8 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
315 100: 90 1e 00 74 stw 0, 116(30) ; | in arg 6 (float, promoted to double)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
316 104: c8 09 00 00 lfd 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
317 108: fc 00 00 18 frsp 0, 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
318 10c: d0 1e 00 6c stfs 0, 108(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
319 110: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
320 114: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
321 118: 38 02 00 04 addi 0, 2, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
322 11c: 90 1e 00 74 stw 0, 116(30) ; | in arg 7
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
323 120: 80 09 00 00 lwz 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
324 124: 90 1e 00 60 stw 0, 96(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
325 128: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
326 12c: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
327 130: 38 02 00 04 addi 0, 2, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
328 134: 90 1e 00 74 stw 0, 116(30) ; | in arg 8
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
329 138: 80 09 00 00 lwz 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
330 13c: 90 1e 00 64 stw 0, 100(30) ; /
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
331 140: 81 3e 00 74 lwz 9, 116(30) ; \
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
332 144: 80 5e 00 74 lwz 2, 116(30) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
333 148: 38 02 00 08 addi 0, 2, 8 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
334 14c: 90 1e 00 74 stw 0, 116(30) ; | in arg 9 (float, promoted to double)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
335 150: c8 09 00 00 lfd 0, 0(9) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
336 154: fc 00 00 18 frsp 0, 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
337 158: d0 1e 00 70 stfs 0, 112(30) ; /
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 327
diff changeset
338 15c: 80 01 00 00 lwz 0, 0(1) ; fetch back-chain ptr (parent frame's sp) from stack of top by prolog -> gpr0, and ...
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
339 160: 94 01 ff 10 stwu 0, -240(1) ; ... update it further up the stack for alloca
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
340 164: 38 41 00 50 addi 2, 1, 80 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
341 168: 38 02 00 0f addi 0, 2, 15 ; | start of alloca()'d memory -> gpr2, by ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
342 16c: 54 00 e1 3e srwi 0, 0, 4 ; | ... using gpr0 as helper to align to 16b, l
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
343 170: 54 02 20 36 slwi 2, 0, 4 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
344 174: 38 00 00 4c li 0, 76 ; 'L' -> gpr0, and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
345 178: 98 02 00 00 stb 0, 0(2) ; ... store in local area (of alloca()'d space)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
346 17c: 80 7e 00 50 lwz 3, 80(30) ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
347 180: 80 9e 00 54 lwz 4, 84(30) ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
348 184: 80 be 00 58 lwz 5, 88(30) ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
349 188: 80 de 00 5c lwz 6, 92(30) ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
350 18c: c0 3e 00 68 lfs 1, 104(30) ; arg 4 (float)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
351 190: c0 5e 00 6c lfs 2, 108(30) ; arg 5 (float)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
352 194: 81 3e 00 60 lwz 9, 96(30) ; arg 6
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
353 198: 81 5e 00 64 lwz 10, 100(30) ; arg 7
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
354 19c: c0 7e 00 70 lfs 3, 112(30) ; arg 8 (float)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
355 1a0: 4b ff fe 61 bl .+67108448 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
356 1a4: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
357 1a8: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
358 1ac: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
359 1b0: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
360 1b4: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
361
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
362 _main:
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
363 1b8: 7c 08 02 a6 mflr 0 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
364 1bc: bf c1 ff f8 stmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
365 1c0: 90 01 00 08 stw 0, 8(1) ; | prolog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
366 1c4: 94 21 ff 90 stwu 1, -112(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
367 1c8: 7c 3e 0b 78 mr 30, 1 ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
368 1cc: 42 9f 00 05 bcl 20, 31, .+4 ; ppc way to get PC in ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
369 1d0: 7f e8 02 a6 mflr 31 ; ... gpr31
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
370 1d4: 38 00 00 07 li 0, 7 ; arg 7, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
371 1d8: 90 01 00 3c stw 0, 60(1) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
372 1dc: 38 00 00 08 li 0, 8 ; arg 8, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
373 1e0: 90 01 00 40 stw 0, 64(1) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
374 1e4: 3c 40 40 22 lis 2, 16418 ; | arg 9, top-half (double b/c of vararg), and ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
375 1e8: 38 60 00 00 li 3, 0 ; | ... bottom-half ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
376 1ec: 90 41 00 44 stw 2, 68(1) ; | ... "pushed" into stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
377 1f0: 90 61 00 48 stw 3, 72(1) ; | "
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
378 1f4: 38 00 00 00 li 0, 0 ; arg 6, bottom-half, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
379 1f8: 90 01 00 38 stw 0, 56(1) ; ... "pushed" onto stack (first word in param area, top-half passed via gpr10, see below)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
380 1fc: 38 60 00 00 li 3, 0 ; arg 0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
381 200: 38 80 00 01 li 4, 1 ; arg 1
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
382 204: 38 a0 00 02 li 5, 2 ; arg 2
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
383 208: 38 c0 00 03 li 6, 3 ; arg 3
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
384 20c: 38 e0 00 04 li 7, 4 ; arg 4
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
385 210: 3d 20 40 14 lis 9, 16404 ; | prep arg 5 (double b/c of vararg) for move to arg reg later: top-half -> gpr9
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
386 214: 39 40 00 00 li 10, 0 ; | bottom-half -> gpr10
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
387 218: 3c 5f 00 00 addis 2, 31, 0 ; PC -> gpr2, to ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
388 21c: c8 02 00 98 lfd 0, 152(2) ; ... load some static data (arg 5, the float) stored right after this function -> gpr0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
389 220: 7d 28 4b 78 mr 8, 9 ; arg 5, top-half
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
390 224: 7d 49 53 78 mr 9, 10 ; arg 5, bottom-half
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
391 228: fc 20 00 90 fmr 1, 0 ; arg 5 in 1st fp reg
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
392 22c: 3d 60 40 18 lis 11, 16408 ; | prep arg 6 (double b/c of vararg) for move to arg reg later: top-half -> gpr11
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
393 230: 39 80 00 00 li 12, 0 ; | bottom-half -> gpr12 (this one is pointless, unused, bottom-half already placed on stack)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
394 234: 3c 5f 00 00 addis 2, 31, 0 ; PC -> gpr2, to ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
395 238: c8 02 00 a0 lfd 0, 160(2) ; ... load some static data (arg 6, the 2nd float) stored right after this function -> gpr0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
396 23c: 7d 6a 5b 78 mr 10, 11 ; arg 6, top-half
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
397 240: fc 40 00 90 fmr 2, 0 ; arg 5 in 2nd fp reg
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
398 244: c8 01 00 44 lfd 0, 68(1) ; arg 9, ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
399 248: fc 60 00 90 fmr 3, 0 ; ... -> 3rd fp reg
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
400 24c: 4b ff fd f1 bl .+67108336 ; call and put return address -> lr
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
401 250: 7c 03 03 78 mr 3, 0 ; return value @@@unsure why gpr0 is guaranteed to be 0 here
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
402 254: 80 21 00 00 lwz 1, 0(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
403 258: 80 01 00 08 lwz 0, 8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
404 25c: 7c 08 03 a6 mtlr 0 ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
405 260: bb c1 ff f8 lmw 30, -8(1) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
406 264: 4e 80 00 20 blr ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
407
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
408
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
409
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
410 ; ---------- structs by value ---------->
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
411 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
412 ; struct A { int i, j; long long l; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
413 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
414 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
415 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
416 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
417 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
418 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
419 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
420 ; /* use some local data */
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
421 ; char l[100] = { 'L' };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
422 ; leaf_call(b, c, d, e, f, g, h);
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
423 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
424 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
425 ; int main()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
426 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
427 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
428 ; return 0;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
429 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
430
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
431
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
432
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
433 ; output from darwin-8.0.1-ppc w/ gcc 3.3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
434
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
435 _leaf_call:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
436 00000000 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
437 00000004 stwu r1,0xffd0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
438 00000008 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
439 0000000c stw r3,0x48(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
440 00000010 stw r4,0x4c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
441 00000014 stw r5,0x50(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
442 00000018 stw r6,0x54(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
443 0000001c stw r7,0x58(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
444 00000020 stw r8,0x5c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
445 00000024 stw r9,0x60(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
446 00000028 stw r10,0x64(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
447 0000002c lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
448 00000030 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
449 00000034 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
450 _nonleaf_call:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
451 00000038 mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
452 0000003c stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
453 00000040 stw r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
454 00000044 stwu r1,0xff30(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
455 00000048 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
456 0000004c bcl 20,31,0x50
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
457 00000050 mfspr r31,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
458 00000054 stw r3,0xe8(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
459 00000058 stw r4,0xec(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
460 0000005c stw r5,0xf0(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
461 00000060 stw r6,0xf4(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
462 00000064 stw r7,0xf8(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
463 00000068 stw r8,0xfc(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
464 0000006c stw r9,0x100(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
465 00000070 stw r10,0x104(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
466 00000074 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
467 00000078 addi r2,r2,0x148
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
468 0000007c addi r0,r30,0x50
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
469 00000080 li r9,0x64
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
470 00000084 or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
471 00000088 or r4,r2,r2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
472 0000008c or r5,r9,r9
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
473 00000090 bl 0x178
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
474 00000094 lwz r0,0x10c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
475 00000098 stw r0,0x38(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
476 0000009c lwz r0,0x110(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
477 000000a0 stw r0,0x3c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
478 000000a4 lwz r3,0xec(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
479 000000a8 lwz r4,0xf0(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
480 000000ac lwz r5,0xf4(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
481 000000b0 lwz r6,0xf8(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
482 000000b4 lwz r7,0xfc(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
483 000000b8 lwz r8,0x100(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
484 000000bc lwz r9,0x104(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
485 000000c0 lwz r10,0x108(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
486 000000c4 bl 0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
487 000000c8 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
488 000000cc lwz r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
489 000000d0 mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
490 000000d4 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
491 000000d8 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
492 _main:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
493 000000dc mfspr r0,lr ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
494 000000e0 stmw r30,0xfff8(r1) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
495 000000e4 stw r0,0x8(r1) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
496 000000e8 stwu r1,0xff90(r1) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
497 000000ec or r30,r1,r1 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
498 000000f0 bcl 20,31,0xf4 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
499 000000f4 mfspr r31,lr ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
500 000000f8 addis r2,r31,0x0 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
501 000000fc addi r2,r2,0x108 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
502 00000100 lwz r0,0x0(r2) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
503 00000104 lwz r9,0x4(r2) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
504 00000108 lwz r11,0x8(r2) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
505 0000010c lwz r2,0xc(r2) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
506 00000110 stw r0,0x50(r30) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
507 00000114 stw r9,0x54(r30) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
508 00000118 stw r11,0x58(r30) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
509 0000011c stw r2,0x5c(r30) ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
510 00000120 li r0,0x8 ; arg 6, ...
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
511 00000124 stw r0,0x3c(r1) ; ... "pushed" onto stack
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
512 00000128 li r0,0x9 ; arg 7, ...
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
513 0000012c stw r0,0x40(r1) ; ... "pushed" onto stack
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
514 00000130 lwz r0,0x5c(r30) ; | | last word of struct "pushed" onto stack
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
515 00000134 stw r0,0x38(r1) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
516 00000138 lwz r8,0x50(r30) ; | arg 5 (struct, passed as 4 words) \
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
517 0000013c lwz r9,0x54(r30) ; | | first 3 words of struct passed in remaining regs
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
518 00000140 lwz r10,0x58(r30) ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
519 00000144 li r3,0x0 ; arg 0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
520 00000148 li r4,0x1 ; arg 1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
521 0000014c li r5,0x2 ; arg 2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
522 00000150 li r6,0x3 ; arg 3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
523 00000154 li r7,0x4 ; arg 4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
524 00000158 bl 0x38 ; call and put return address -> lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
525 0000015c li r0,0x0 ; return value (pointlessly) via gpr0 ...
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
526 00000160 or r3,r0,r0 ; ... to gpr3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
527 00000164 lwz r1,0x0(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
528 00000168 lwz r0,0x8(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
529 0000016c mtspr lr,r0 ; | epilog
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
530 00000170 lmw r30,0xfff8(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
531 00000174 blr ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
532
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
533
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
534
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
535 ; ---------- single-field structs by value (of different sizes) ---------->
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
536 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
537 ; struct C { char c; }; // <= 2 bytes, but normal alignment as passed like a char
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
538 ; struct S { short s; }; // <= 2 bytes, but normal alignment as passed like a short
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
539 ; struct I { int i; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
540 ; struct F { float f; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
541 ; struct D { double d; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
542 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
543 ; struct C2 { char c[2]; }; // <= 2 bytes, special alignment
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
544 ; struct C3 { char c[3]; }; // > 2 bytes, normal alignment
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
545 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
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)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
547 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
548 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
549 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
550 ; int main()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
551 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
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}});
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
553 ; return 0;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
554 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
555
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
556
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
557
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
558 ; output from darwin-8.0.1-ppc w/ gcc 3.3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
559
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
560 _leaf_call:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
561 00000000 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
562 00000004 stwu r1,0xffc0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
563 00000008 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
564 0000000c sth r3,0x58(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
565 00000010 stb r4,0x5c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
566 00000014 sth r5,0x60(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
567 00000018 stw r6,0x64(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
568 0000001c stfs f1,0x68(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
569 00000020 stfd f2,0x20(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
570 00000024 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
571 00000028 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
572 0000002c blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
573 _main:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
574 00000030 mfspr r0,lr ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
575 00000034 stmw r30,0xfff8(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
576 00000038 stw r0,0x8(r1) ; | prolog
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
577 0000003c stwu r1,0xff80(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
578 00000040 or r30,r1,r1 ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
579 00000044 bcl 20,31,0x48 ; ppc way to get PC in ...
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
580 00000048 mfspr r31,lr ; ... gpr31
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
581 0000004c li r0,0x0 ; | \
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
582 00000050 stb r0,0x40(r30) ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
583 00000054 li r0,0x1 ; | | C2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
584 00000058 stb r0,0x41(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
585 0000005c li r0,0x2 ; | local area struct init \ C
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
586 00000060 stb r0,0x42(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
587 00000064 li r0,0x3 ; | \ S
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
588 00000068 sth r0,0x44(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
589 0000006c li r0,0x4 ; | \ I
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
590 00000070 stw r0,0x48(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
591 00000074 lis r0,0x40a0 ; | \ F
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
592 00000078 stw r0,0x4c(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
593 0000007c addis r2,r31,0x0 ; | \
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
594 00000080 addi r2,r2,0xa8 ; | | D
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
595 00000084 lfd f0,0x0(r2) ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
596 00000088 stfd f0,0x50(r30) ; | /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
597 0000008c addis r2,r31,0x0 ; | \
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
598 00000090 addi r2,r2,0xb0 ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
599 00000094 lhz r0,0x0(r2) ; | | C3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
600 00000098 lbz r2,0x2(r2) ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
601 0000009c sth r0,0x60(r30) ; | |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
602 000000a0 stb r2,0x62(r30) ; / /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
603 000000a4 lhz r0,0x60(r30) ; \
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
604 000000a8 lbz r2,0x62(r30) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
605 000000ac sth r0,0x34(r1) ; | prep arg 6 (struct C3), zero-extended, right justified -> local area on stack
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
606 000000b0 stb r2,0x36(r1) ; /
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
607 000000b4 lhz r3,0x40(r30) ; arg 0 (struct C2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
608 000000b8 lbz r4,0x42(r30) ; arg 1 (struct C)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
609 000000bc lhz r5,0x44(r30) ; arg 2 (struct S)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
610 000000c0 lwz r6,0x48(r30) ; arg 3 (struct I)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
611 000000c4 lfs f1,0x4c(r30) ; arg 4 (struct F, int arg reg r7 then skipped)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
612 000000c8 lfd f2,0x50(r30) ; arg 5 (struct D, int arg regs r8 and r9 then skipped)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
613 000000cc lwz r10,0x34(r1) ; arg 6 (struct C3, fetched from local area)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
614 000000d0 bl 0x0 ; call and put return address -> lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
615 000000d4 li r0,0x0 ; return value (pointlessly) via gpr0 ...
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
616 000000d8 or r3,r0,r0 ; ... to gpr3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
617 000000dc lwz r1,0x0(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
618 000000e0 lwz r0,0x8(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
619 000000e4 mtspr lr,r0 ; | epilog
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
620 000000e8 lmw r30,0xfff8(r1) ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
621 000000ec blr ; |
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
622
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
623
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
624
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
625 ; ---------- structs by value, complex example (multiple structs) ---------->
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
626 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
627 ; struct A { int i, j; float f; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
628 ; struct B { double d; long long l; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
629 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
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)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
631 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
632 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
633 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
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)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
635 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
636 ; /* use some local data */
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
637 ; char l[100] = { 'L' };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
638 ; leaf_call(b, c, d, e, f, g, h, i, j);
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
639 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
640 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
641 ; int main()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
642 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
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);
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
644 ; return 0;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
645 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
646
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
647
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
648
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
649 ; output from darwin-8.0.1-ppc w/ gcc 3.3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
650
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
651 _leaf_call:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
652 00000000 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
653 00000004 stwu r1,0xffd0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
654 00000008 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
655 0000000c stw r3,0x48(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
656 00000010 stw r4,0x4c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
657 00000014 stw r5,0x50(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
658 00000018 stw r6,0x54(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
659 0000001c stw r7,0x58(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
660 00000020 stw r8,0x5c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
661 00000024 stw r9,0x60(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
662 00000028 stw r10,0x64(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
663 0000002c lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
664 00000030 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
665 00000034 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
666 _nonleaf_call:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
667 00000038 mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
668 0000003c stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
669 00000040 stw r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
670 00000044 stwu r1,0xff10(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
671 00000048 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
672 0000004c bcl 20,31,0x50
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
673 00000050 mfspr r31,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
674 00000054 stw r3,0x108(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
675 00000058 stw r4,0x10c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
676 0000005c stw r5,0x110(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
677 00000060 stw r6,0x114(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
678 00000064 stw r7,0x118(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
679 00000068 stw r8,0x11c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
680 0000006c stw r9,0x120(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
681 00000070 stw r10,0x124(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
682 00000074 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
683 00000078 addi r2,r2,0x240
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
684 0000007c addi r0,r30,0x70
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
685 00000080 li r9,0x64
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
686 00000084 or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
687 00000088 or r4,r2,r2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
688 0000008c or r5,r9,r9
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
689 00000090 bl 0x270
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
690 00000094 lwz r0,0x12c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
691 00000098 stw r0,0x38(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
692 0000009c lwz r0,0x130(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
693 000000a0 stw r0,0x3c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
694 000000a4 lwz r0,0x134(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
695 000000a8 lwz r2,0x138(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
696 000000ac lwz r9,0x13c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
697 000000b0 stw r0,0x40(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
698 000000b4 stw r2,0x44(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
699 000000b8 stw r9,0x48(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
700 000000bc lwz r0,0x140(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
701 000000c0 lwz r2,0x144(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
702 000000c4 lwz r9,0x148(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
703 000000c8 lwz r11,0x14c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
704 000000cc stw r0,0x4c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
705 000000d0 stw r2,0x50(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
706 000000d4 stw r9,0x54(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
707 000000d8 stw r11,0x58(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
708 000000dc lwz r0,0x150(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
709 000000e0 stw r0,0x5c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
710 000000e4 lwz r0,0x154(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
711 000000e8 stw r0,0x60(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
712 000000ec lwz r3,0x10c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
713 000000f0 lwz r4,0x110(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
714 000000f4 lwz r5,0x114(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
715 000000f8 lwz r6,0x118(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
716 000000fc lwz r7,0x11c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
717 00000100 lwz r8,0x120(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
718 00000104 lwz r9,0x124(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
719 00000108 lwz r10,0x128(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
720 0000010c bl 0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
721 00000110 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
722 00000114 lwz r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
723 00000118 mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
724 0000011c lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
725 00000120 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
726 _main:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
727 00000124 mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
728 00000128 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
729 0000012c stw r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
730 00000130 stwu r1,0xff40(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
731 00000134 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
732 00000138 bcl 20,31,0x13c
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
733 0000013c mfspr r31,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
734 00000140 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
735 00000144 addi r2,r2,0x1b8
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
736 00000148 lwz r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
737 0000014c lwz r9,0x4(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
738 00000150 lwz r2,0x8(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
739 00000154 stw r0,0x70(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
740 00000158 stw r9,0x74(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
741 0000015c stw r2,0x78(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
742 00000160 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
743 00000164 addi r2,r2,0x1c4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
744 00000168 lwz r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
745 0000016c lwz r9,0x4(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
746 00000170 lwz r11,0x8(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
747 00000174 lwz r2,0xc(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
748 00000178 stw r0,0x80(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
749 0000017c stw r9,0x84(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
750 00000180 stw r11,0x88(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
751 00000184 stw r2,0x8c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
752 00000188 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
753 0000018c addi r2,r2,0x1d4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
754 00000190 lwz r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
755 00000194 lwz r9,0x4(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
756 00000198 lwz r2,0x8(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
757 0000019c stw r0,0x90(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
758 000001a0 stw r9,0x94(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
759 000001a4 stw r2,0x98(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
760 000001a8 addis r2,r31,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
761 000001ac addi r2,r2,0x1e4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
762 000001b0 lwz r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
763 000001b4 lwz r9,0x4(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
764 000001b8 lwz r11,0x8(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
765 000001bc lwz r2,0xc(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
766 000001c0 stw r0,0xa0(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
767 000001c4 stw r9,0xa4(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
768 000001c8 stw r11,0xa8(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
769 000001cc stw r2,0xac(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
770 000001d0 li r0,0x7
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
771 000001d4 stw r0,0x3c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
772 000001d8 li r0,0x8
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
773 000001dc stw r0,0x40(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
774 000001e0 lwz r0,0x90(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
775 000001e4 lwz r2,0x94(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
776 000001e8 lwz r9,0x98(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
777 000001ec stw r0,0x44(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
778 000001f0 stw r2,0x48(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
779 000001f4 stw r9,0x4c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
780 000001f8 lwz r0,0xa0(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
781 000001fc lwz r2,0xa4(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
782 00000200 lwz r9,0xa8(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
783 00000204 lwz r11,0xac(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
784 00000208 stw r0,0x50(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
785 0000020c stw r2,0x54(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
786 00000210 stw r9,0x58(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
787 00000214 stw r11,0x5c(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
788 00000218 li r0,0xe
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
789 0000021c stw r0,0x60(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
790 00000220 li r0,0xf
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
791 00000224 stw r0,0x64(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
792 00000228 lwz r0,0x8c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
793 0000022c stw r0,0x38(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
794 00000230 lwz r8,0x80(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
795 00000234 lwz r9,0x84(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
796 00000238 lwz r10,0x88(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
797 0000023c li r3,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
798 00000240 li r4,0x1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
799 00000244 lwz r5,0x70(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
800 00000248 lwz r6,0x74(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
801 0000024c lwz r7,0x78(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
802 00000250 bl 0x38
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
803 00000254 li r0,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
804 00000258 or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
805 0000025c lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
806 00000260 lwz r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
807 00000264 mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
808 00000268 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
809 0000026c blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
810
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
811
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
812
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
813 ; ---------- returning qwords ---------->
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
814 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
815 ; long long f()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
816 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
817 ; return 7171LL;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
818 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
819 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
820 ; int main()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
821 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
822 ; return (int)f();
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
823 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
824
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
825
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
826
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
827 ; output from darwin-8.0.1-ppc w/ gcc 3.3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
828
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
829 _f:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
830 00000000 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
831 00000004 stwu r1,0xffd0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
832 00000008 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
833 0000000c li r2,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
834 00000010 li r3,0x1c03
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
835 00000014 or r4,r3,r3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
836 00000018 or r3,r2,r2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
837 0000001c lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
838 00000020 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
839 00000024 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
840 _main:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
841 00000028 mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
842 0000002c stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
843 00000030 stw r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
844 00000034 stwu r1,0xffb0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
845 00000038 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
846 0000003c bl 0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
847 00000040 or r2,r3,r3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
848 00000044 or r3,r4,r4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
849 00000048 or r0,r3,r3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
850 0000004c or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
851 00000050 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
852 00000054 lwz r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
853 00000058 mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
854 0000005c lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
855 00000060 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
856
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
857
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
858
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
859 ; ---------- returning structs by value ---------->
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
860 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
861 ; struct Small { char x; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
862 ; struct Big { long long i; long j; };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
863 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
864 ; struct Small f0()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
865 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
866 ; struct Small s = { 132 };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
867 ; return s;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
868 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
869 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
870 ; struct Big f1()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
871 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
872 ; struct Big b = { 7171LL, 232 };
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
873 ; return b;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
874 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
875 ;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
876 ; int main()
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
877 ; {
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
878 ; struct Small s = f0();
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
879 ; struct Big b = f1();
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
880 ; return b.j + s.x;
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
881 ; }
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
882
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
883
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
884
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
885 ; output from darwin-8.0.1-ppc w/ gcc 3.3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
886
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
887 _f0:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
888 00000000 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
889 00000004 stwu r1,0xffc0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
890 00000008 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
891 0000000c or r2,r3,r3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
892 00000010 li r0,0xff84
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
893 00000014 stb r0,0x20(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
894 00000018 lbz r0,0x20(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
895 0000001c stb r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
896 00000020 or r3,r2,r2
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
897 00000024 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
898 00000028 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
899 0000002c blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
900 _f1:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
901 00000030 stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
902 00000034 stwu r1,0xffc0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
903 00000038 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
904 0000003c mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
905 00000040 bcl 20,31,0x44
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
906 00000044 mfspr r8,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
907 00000048 mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
908 0000004c or r9,r3,r3
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
909 00000050 addis r2,r8,0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
910 00000054 addi r2,r2,0xb4
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
911 00000058 lwz r0,0x0(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
912 0000005c lwz r11,0x4(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
913 00000060 lwz r10,0x8(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
914 00000064 lwz r2,0xc(r2)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
915 00000068 stw r0,0x20(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
916 0000006c stw r11,0x24(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
917 00000070 stw r10,0x28(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
918 00000074 stw r2,0x2c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
919 00000078 lwz r0,0x20(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
920 0000007c lwz r2,0x24(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
921 00000080 lwz r11,0x28(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
922 00000084 lwz r10,0x2c(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
923 00000088 stw r0,0x0(r9)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
924 0000008c stw r2,0x4(r9)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
925 00000090 stw r11,0x8(r9)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
926 00000094 stw r10,0xc(r9)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
927 00000098 or r3,r9,r9
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
928 0000009c lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
929 000000a0 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
930 000000a4 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
931 _main:
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
932 000000a8 mfspr r0,lr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
933 000000ac stmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
934 000000b0 stw r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
935 000000b4 stwu r1,0xff90(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
936 000000b8 or r30,r1,r1
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
937 000000bc addi r3,r30,0x40
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
938 000000c0 bl 0x0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
939 000000c4 addi r0,r30,0x50
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
940 000000c8 or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
941 000000cc bl 0x30
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
942 000000d0 lbz r0,0x40(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
943 000000d4 extsb r2,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
944 000000d8 lwz r0,0x58(r30)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
945 000000dc add r0,r2,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
946 000000e0 or r3,r0,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
947 000000e4 lwz r1,0x0(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
948 000000e8 lwz r0,0x8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
949 000000ec mtspr lr,r0
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
950 000000f0 lmw r30,0xfff8(r1)
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
951 000000f4 blr
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
952
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
953
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 331
diff changeset
954
497
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
955 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ---------->
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
956 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
957 ; struct Trivial { int a; };
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
958 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
959 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
960 ; extern "C" {
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
961 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
962 ; void f1(struct Trivial s) { }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
963 ; void f2(struct NonTrivial s) { }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
964 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
965 ; void f()
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
966 ; {
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
967 ; struct Trivial t;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
968 ; struct NonTrivial n;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
969 ; int a=1;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
970 ; a += 123;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
971 ; f1(t);
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
972 ; a -= 123;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
973 ; f2(n);
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
974 ; a -= 12;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
975 ; }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
976 ; }
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
977
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
978
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
979
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
980 ; output from darwin-8.0.1-ppc w/ gcc 3.3
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
981
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
982 _f1:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
983 00000000 stmw r30,0xfff8(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
984 00000004 stwu r1,0xffd0(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
985 00000008 or r30,r1,r1
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
986 0000000c stw r3,0x48(r30)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
987 00000010 lwz r1,_f1(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
988 00000014 lmw r30,0xfff8(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
989 00000018 blr
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
990 _f2:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
991 0000001c stmw r30,0xfff8(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
992 00000020 stwu r1,0xffd0(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
993 00000024 or r30,r1,r1
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
994 00000028 lwz r1,_f1(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
995 0000002c lmw r30,0xfff8(r1)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
996 00000030 blr
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
997 _f:
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
998 00000034 mfspr r0,lr ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
999 00000038 stmw r30,0xfff8(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1000 0000003c stw r0,0x8(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1001 00000040 stwu r1,0xff70(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1002 00000044 or r30,r1,r1 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1003 00000048 addi r0,r30,0x50 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1004 0000004c or r3,r0,r0 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1005 00000050 bl 0x140 ; __ZN10NonTrivialC1Ev ; NonTrivial::NonTrivial() / ctor
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1006 00000054 li r0,0x1 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1007 00000058 stw r0,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1008 0000005c lwz r2,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1009 00000060 addi r0,r2,0x7b ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1010 00000064 stw r0,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1011 00000068 lwz r0,0x40(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1012 0000006c or r3,r0,r0 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1013 00000070 bl _f1 ; call f1(struct Trivial)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1014 00000074 lwz r2,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1015 00000078 addi r0,r2,0xff85 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1016 0000007c stw r0,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1017 00000080 addi r0,r30,0x70 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1018 00000084 addi r2,r30,0x50 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1019 00000088 or r3,r0,r0 ; | ptr to dest of copy of n
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1020 0000008c or r4,r2,r2 ; | copy n ptr to n
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1021 00000090 bl 0x120 ; __ZN10NonTrivialC1ERKS_ ; / NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1022 00000094 addi r0,r30,0x70 ; \
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1023 00000098 or r3,r0,r0 ; | f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1024 0000009c bl _f2 ; call f2(struct NonTrivial)
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1025 000000a0 lwz r2,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1026 000000a4 addi r0,r2,0xfff4 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1027 000000a8 stw r0,0x60(r30) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1028 000000ac lwz r1,_f1(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1029 000000b0 lwz r0,0x8(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1030 000000b4 mtspr lr,r0 ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1031 000000b8 lmw r30,0xfff8(r1) ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1032 000000bc blr ;
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1033
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1034 ; ... snip, removed code of ctor and copy ctor ...
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1035
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1036
cb19b2fe2422 - more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
Tassilo Philipp
parents: 473
diff changeset
1037
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1038 ; vim: ft=asm
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1039