comparison doc/disas_examples/ppc.sysv.disas @ 327:c0390dc85a07

- doc: added disassembly examples for many platforms and calling conventions, for reference
author Tassilo Philipp
date Fri, 22 Nov 2019 23:08:59 +0100
parents
children 06c9adae114d
comparison
equal deleted inserted replaced
326:09aaa2e774cd 327:c0390dc85a07
1 ; #include <stdlib.h>
2 ;
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
4 ; {
5 ; }
6 ;
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
8 ; {
9 ; /* use some local data */
10 ; *(char*)alloca(10) = 'L';
11 ; leaf_call(b, c, d, e, f, g, h);
12 ; }
13 ;
14 ; int main()
15 ; {
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
17 ; return 0;
18 ; }
19
20
21
22 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2
23
24 00000000 <leaf_call>:
25 0: 94 21 ff d0 stwu r1,-48(r1)
26 4: 93 e1 00 2c stw r31,44(r1)
27 8: 7c 3f 0b 78 mr r31,r1
28 c: 90 7f 00 08 stw r3,8(r31)
29 10: 90 9f 00 0c stw r4,12(r31)
30 14: 90 bf 00 10 stw r5,16(r31)
31 18: 90 df 00 14 stw r6,20(r31)
32 1c: 90 ff 00 18 stw r7,24(r31)
33 20: 91 1f 00 1c stw r8,28(r31)
34 24: 91 3f 00 20 stw r9,32(r31)
35 28: 81 61 00 00 lwz r11,0(r1)
36 2c: 83 eb ff fc lwz r31,-4(r11)
37 30: 7d 61 5b 78 mr r1,r11
38 34: 4e 80 00 20 blr
39
40 00000038 <nonleaf_call>:
41 38: 94 21 ff c0 stwu r1,-64(r1) ; | open frame and store sp at top of stack
42 3c: 7c 08 02 a6 mflr r0 ; | lr -> gpr0
43 40: 93 e1 00 3c stw r31,60(r1) ; | prolog store gpr31
44 44: 90 01 00 44 stw r0,68(r1) ; | store lr
45 48: 7c 3f 0b 78 mr r31,r1 ; / sp -> gpr31, latter used for some fixed addressing below
46 4c: 90 7f 00 08 stw r3,8(r31) ; \
47 50: 90 9f 00 0c stw r4,12(r31) ; |
48 54: 90 bf 00 10 stw r5,16(r31) ; |
49 58: 90 df 00 14 stw r6,20(r31) ; |
50 5c: 90 ff 00 18 stw r7,24(r31) ; | all in args -> temp space in local area
51 60: 91 1f 00 1c stw r8,28(r31) ; |
52 64: 91 3f 00 20 stw r9,32(r31) ; |
53 68: 91 5f 00 24 stw r10,36(r31) ; |
54 6c: 80 01 00 00 lwz r0,0(r1) ; fetch sp saved on stack of top by prolog -> gpr0, and ...
55 70: 94 01 ff 10 stwu r0,-240(r1) ; ... update it further up the stack for alloca(220) - with padding to guarantee alignment
56 74: 39 21 00 08 addi r9,r1,8 ; |
57 78: 91 3f 00 28 stw r9,40(r31) ; |
58 7c: 81 3f 00 28 lwz r9,40(r31) ; |
59 80: 38 09 00 0f addi r0,r9,15 ; | start of alloca()'d memory -> gpr9, by ...
60 84: 54 00 e1 3e rlwinm r0,r0,28,4,31 ; | ... using gpr0 as helper to align to 16b, leaving at least 8b at top of stock
61 88: 54 00 20 36 rlwinm r0,r0,4,0,27 ; |
62 8c: 90 1f 00 28 stw r0,40(r31) ; |
63 90: 81 3f 00 28 lwz r9,40(r31) ; |
64 94: 38 00 00 4c li r0,76 ; 'L' -> gpr0, and ...
65 98: 98 09 00 00 stb r0,0(r9) ; ... store in local area (of alloca()'d space)
66 9c: 80 7f 00 0c lwz r3,12(r31) ; arg 0
67 a0: 80 9f 00 10 lwz r4,16(r31) ; arg 1
68 a4: 80 bf 00 14 lwz r5,20(r31) ; arg 2
69 a8: 80 df 00 18 lwz r6,24(r31) ; arg 3
70 ac: 80 ff 00 1c lwz r7,28(r31) ; arg 4
71 b0: 81 1f 00 20 lwz r8,32(r31) ; arg 5
72 b4: 81 3f 00 24 lwz r9,36(r31) ; arg 6
73 b8: 48 00 00 01 bl b8 <nonleaf_call+0x80> ; call and put return address -> lr
74 bc: 81 61 00 00 lwz r11,0(r1) ; |
75 c0: 80 0b 00 04 lwz r0,4(r11) ; |
76 c4: 7c 08 03 a6 mtlr r0 ; |
77 c8: 83 eb ff fc lwz r31,-4(r11) ; | epilog
78 cc: 7d 61 5b 78 mr r1,r11 ; |
79 d0: 4e 80 00 20 blr ; |
80
81 000000d4 <main>:
82 d4: 94 21 ff f0 stwu r1,-16(r1) ; |
83 d8: 7c 08 02 a6 mflr r0 ; |
84 dc: 93 e1 00 0c stw r31,12(r1) ; | prolog
85 e0: 90 01 00 14 stw r0,20(r1) ; |
86 e4: 7c 3f 0b 78 mr r31,r1 ; |
87 e8: 38 60 00 00 li r3,0 ; arg 0
88 ec: 38 80 00 01 li r4,1 ; arg 1
89 f0: 38 a0 00 02 li r5,2 ; arg 2
90 f4: 38 c0 00 03 li r6,3 ; arg 3
91 f8: 38 e0 00 04 li r7,4 ; arg 4
92 fc: 39 00 00 05 li r8,5 ; arg 5
93 100: 39 20 00 06 li r9,6 ; arg 6
94 104: 39 40 00 07 li r10,7 ; arg 7
95 108: 48 00 00 01 bl 108 <main+0x34> ; call and put return address -> lr
96 10c: 38 00 00 00 li r0,0 ; return value (pointlessly) via gpr0 ...
97 110: 7c 03 03 78 mr r3,r0 ; ... to gpr3
98 114: 81 61 00 00 lwz r11,0(r1) ; |
99 118: 80 0b 00 04 lwz r0,4(r11) ; |
100 11c: 7c 08 03 a6 mtlr r0 ; |
101 120: 83 eb ff fc lwz r31,-4(r11) ; | epilog
102 124: 7d 61 5b 78 mr r1,r11 ; |
103 128: 4e 80 00 20 blr ; |
104
105
106
107 ; output from netbsd-4.0.1-macppc w/ gcc 4.1.2
108
109 00000000 <leaf_call>:
110 0: 94 21 ff c0 stwu r1,-64(r1)
111 4: 93 e1 00 3c stw r31,60(r1)
112 8: 7c 3f 0b 78 mr r31,r1
113 c: 90 7f 00 08 stw r3,8(r31)
114 10: 90 9f 00 0c stw r4,12(r31)
115 14: 90 bf 00 10 stw r5,16(r31)
116 18: 90 df 00 14 stw r6,20(r31)
117 1c: 90 ff 00 18 stw r7,24(r31)
118 20: 91 1f 00 1c stw r8,28(r31)
119 24: 91 3f 00 20 stw r9,32(r31)
120 28: 81 61 00 00 lwz r11,0(r1)
121 2c: 83 eb ff fc lwz r31,-4(r11)
122 30: 7d 61 5b 78 mr r1,r11
123 34: 4e 80 00 20 blr
124
125 00000038 <nonleaf_call>:
126 38: 94 21 ff c0 stwu r1,-64(r1)
127 3c: 7c 08 02 a6 mflr r0
128 40: 93 e1 00 3c stw r31,60(r1)
129 44: 90 01 00 44 stw r0,68(r1)
130 48: 7c 3f 0b 78 mr r31,r1
131 4c: 90 7f 00 08 stw r3,8(r31)
132 50: 90 9f 00 0c stw r4,12(r31)
133 54: 90 bf 00 10 stw r5,16(r31)
134 58: 90 df 00 14 stw r6,20(r31)
135 5c: 90 ff 00 18 stw r7,24(r31)
136 60: 91 1f 00 1c stw r8,28(r31)
137 64: 91 3f 00 20 stw r9,32(r31)
138 68: 91 5f 00 24 stw r10,36(r31)
139 6c: 80 01 00 00 lwz r0,0(r1)
140 70: 94 01 ff 10 stwu r0,-240(r1)
141 74: 39 21 00 08 addi r9,r1,8
142 78: 91 3f 00 28 stw r9,40(r31)
143 7c: 81 3f 00 28 lwz r9,40(r31)
144 80: 38 09 00 0f addi r0,r9,15
145 84: 54 00 e1 3e rlwinm r0,r0,28,4,31
146 88: 54 00 20 36 rlwinm r0,r0,4,0,27
147 8c: 90 1f 00 28 stw r0,40(r31)
148 90: 81 3f 00 28 lwz r9,40(r31)
149 94: 38 00 00 4c li r0,76
150 98: 98 09 00 00 stb r0,0(r9)
151 9c: 80 7f 00 0c lwz r3,12(r31)
152 a0: 80 9f 00 10 lwz r4,16(r31)
153 a4: 80 bf 00 14 lwz r5,20(r31)
154 a8: 80 df 00 18 lwz r6,24(r31)
155 ac: 80 ff 00 1c lwz r7,28(r31)
156 b0: 81 1f 00 20 lwz r8,32(r31)
157 b4: 81 3f 00 24 lwz r9,36(r31)
158 b8: 48 00 00 01 bl b8 <nonleaf_call+0x80>
159 bc: 81 61 00 00 lwz r11,0(r1)
160 c0: 80 0b 00 04 lwz r0,4(r11)
161 c4: 7c 08 03 a6 mtlr r0
162 c8: 83 eb ff fc lwz r31,-4(r11)
163 cc: 7d 61 5b 78 mr r1,r11
164 d0: 4e 80 00 20 blr
165
166 000000d4 <main>:
167 d4: 94 21 ff e0 stwu r1,-32(r1)
168 d8: 7c 08 02 a6 mflr r0
169 dc: 93 e1 00 1c stw r31,28(r1)
170 e0: 90 01 00 24 stw r0,36(r1)
171 e4: 7c 3f 0b 78 mr r31,r1
172 e8: 38 60 00 00 li r3,0
173 ec: 38 80 00 01 li r4,1
174 f0: 38 a0 00 02 li r5,2
175 f4: 38 c0 00 03 li r6,3
176 f8: 38 e0 00 04 li r7,4
177 fc: 39 00 00 05 li r8,5
178 100: 39 20 00 06 li r9,6
179 104: 39 40 00 07 li r10,7
180 108: 48 00 00 01 bl 108 <main+0x34>
181 10c: 38 00 00 00 li r0,0
182 110: 7c 03 03 78 mr r3,r0
183 114: 81 61 00 00 lwz r11,0(r1)
184 118: 80 0b 00 04 lwz r0,4(r11)
185 11c: 7c 08 03 a6 mtlr r0
186 120: 83 eb ff fc lwz r31,-4(r11)
187 124: 7d 61 5b 78 mr r1,r11
188 128: 4e 80 00 20 blr
189
190
191
192 ; ------------- check register skipping for 64bit args ----------->
193
194 ; void call(int a, long long b, int c, int d, long long e, long long f)
195 ; {
196 ; }
197 ;
198 ; int main()
199 ; {
200 ; call(0,1,2,3,4,5);
201 ; return 1;
202 ; }
203
204
205
206 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2
207
208 00000000 <call>:
209 0: 94 21 ff d0 stwu r1,-48(r1)
210 4: 93 e1 00 2c stw r31,44(r1)
211 8: 7c 3f 0b 78 mr r31,r1
212 c: 90 7f 00 08 stw r3,8(r31)
213 10: 90 bf 00 10 stw r5,16(r31)
214 14: 90 df 00 14 stw r6,20(r31)
215 18: 90 ff 00 18 stw r7,24(r31)
216 1c: 91 1f 00 1c stw r8,28(r31)
217 20: 91 3f 00 20 stw r9,32(r31)
218 24: 91 5f 00 24 stw r10,36(r31)
219 28: 81 61 00 00 lwz r11,0(r1)
220 2c: 83 eb ff fc lwz r31,-4(r11)
221 30: 7d 61 5b 78 mr r1,r11
222 34: 4e 80 00 20 blr
223
224 00000038 <main>:
225 38: 94 21 ff e0 stwu r1,-32(r1) ; |
226 3c: 7c 08 02 a6 mflr r0 ; |
227 40: 93 e1 00 1c stw r31,28(r1) ; | prolog
228 44: 90 01 00 24 stw r0,36(r1) ; |
229 48: 7c 3f 0b 78 mr r31,r1 ; /
230 4c: 39 20 00 00 li r9,0 ; \
231 50: 39 40 00 05 li r10,5 ; |
232 54: 91 21 00 08 stw r9,8(r1) ; | arg 5 via stack
233 58: 91 41 00 0c stw r10,12(r1) ; |
234 5c: 38 60 00 00 li r3,0 ; arg 0
235 60: 38 a0 00 00 li r5,0 ; |
236 64: 38 c0 00 01 li r6,1 ; | arg 1 (note that r4 is skipped)
237 68: 38 e0 00 02 li r7,2 ; arg 2
238 6c: 39 00 00 03 li r8,3 ; arg 3
239 70: 39 20 00 00 li r9,0 ; |
240 74: 39 40 00 04 li r10,4 ; | arg 4
241 78: 48 00 00 01 bl 78 <main+0x40> ; call and put return address -> lr
242 7c: 38 00 00 01 li r0,1 ; return value (pointlessly) via gpr0 ...
243 80: 7c 03 03 78 mr r3,r0 ; ... to gpr3
244 84: 81 61 00 00 lwz r11,0(r1) ; |
245 88: 80 0b 00 04 lwz r0,4(r11) ; |
246 8c: 7c 08 03 a6 mtlr r0 ; |
247 90: 83 eb ff fc lwz r31,-4(r11) ; | epilog
248 94: 7d 61 5b 78 mr r1,r11 ; |
249 98: 4e 80 00 20 blr ; |
250
251
252
253 ; ------------- 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 (...) ----------->
254
255 ; #include <stdlib.h>
256 ; #include <stdarg.h>
257 ;
258 ; void leaf_call(int b, int c, int d, int e, float f, float g, int h, int i, float j)
259 ; {
260 ; }
261 ;
262 ; void nonleaf_call(int a, ...)
263 ; {
264 ; int b, c, d, e, h, i;
265 ; float f, g, j;
266 ; va_list ap;
267 ; va_start(ap, a);
268 ; b = va_arg(ap, int);
269 ; c = va_arg(ap, int);
270 ; d = va_arg(ap, int);
271 ; e = va_arg(ap, int);
272 ; f = (float)va_arg(ap, double);
273 ; g = (float)va_arg(ap, double);
274 ; h = va_arg(ap, int);
275 ; i = va_arg(ap, int);
276 ; j = (float)va_arg(ap, double);
277 ; /* use some local data */
278 ; *(char*)alloca(220) = 'L';
279 ; leaf_call(b, c, d, e, f, g, h, i, j);
280 ; }
281 ;
282 ; int main()
283 ; {
284 ; nonleaf_call(0, 1, 2, 3, 4, 5.f, 6.f, 7, 8, 9.f);
285 ; return 0;
286 ; }
287
288
289
290 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2
291
292 00000000 <leaf_call>:
293 0: 94 21 ff c0 stwu r1,-64(r1)
294 4: 93 e1 00 3c stw r31,60(r1)
295 8: 7c 3f 0b 78 mr r31,r1
296 c: 90 7f 00 08 stw r3,8(r31)
297 10: 90 9f 00 0c stw r4,12(r31)
298 14: 90 bf 00 10 stw r5,16(r31)
299 18: 90 df 00 14 stw r6,20(r31)
300 1c: d0 3f 00 18 stfs f1,24(r31)
301 20: d0 5f 00 1c stfs f2,28(r31)
302 24: 90 ff 00 20 stw r7,32(r31)
303 28: 91 1f 00 24 stw r8,36(r31)
304 2c: d0 7f 00 28 stfs f3,40(r31)
305 30: 81 61 00 00 lwz r11,0(r1)
306 34: 83 eb ff fc lwz r31,-4(r11)
307 38: 7d 61 5b 78 mr r1,r11
308 3c: 4e 80 00 20 blr
309
310 00000040 <nonleaf_call>:
311 40: 94 21 ff 30 stwu r1,-208(r1)
312 44: 7c 08 02 a6 mflr r0
313 48: 93 e1 00 cc stw r31,204(r1)
314 4c: 90 01 00 d4 stw r0,212(r1)
315 50: 7c 3f 0b 78 mr r31,r1
316 54: 90 9f 00 3c stw r4,60(r31)
317 58: 90 bf 00 40 stw r5,64(r31)
318 5c: 90 df 00 44 stw r6,68(r31)
319 60: 90 ff 00 48 stw r7,72(r31)
320 64: 91 1f 00 4c stw r8,76(r31)
321 68: 91 3f 00 50 stw r9,80(r31)
322 6c: 91 5f 00 54 stw r10,84(r31)
323 70: 40 86 00 24 bne- cr1,94 <nonleaf_call+0x54>
324 74: d8 3f 00 58 stfd f1,88(r31)
325 78: d8 5f 00 60 stfd f2,96(r31)
326 7c: d8 7f 00 68 stfd f3,104(r31)
327 80: d8 9f 00 70 stfd f4,112(r31)
328 84: d8 bf 00 78 stfd f5,120(r31)
329 88: d8 df 00 80 stfd f6,128(r31)
330 8c: d8 ff 00 88 stfd f7,136(r31)
331 90: d9 1f 00 90 stfd f8,144(r31)
332 94: 90 7f 00 98 stw r3,152(r31)
333 98: 38 00 00 01 li r0,1
334 9c: 98 1f 00 2c stb r0,44(r31)
335 a0: 38 00 00 00 li r0,0
336 a4: 98 1f 00 2d stb r0,45(r31)
337 a8: 38 1f 00 d8 addi r0,r31,216 ; make r0 point to start of prev frame's param area (would make sense as no spill area to define param area start for iteration)
338 ac: 90 1f 00 30 stw r0,48(r31)
339 b0: 38 1f 00 38 addi r0,r31,56 ; make r0 point to end of prev frame's param area (would make sense as no spill area to define param area end for iteration)
340 b4: 90 1f 00 34 stw r0,52(r31)
341 b8: 88 1f 00 2c lbz r0,44(r31)
342 bc: 54 00 06 3e clrlwi r0,r0,24
343 c0: 2b 80 00 08 cmplwi cr7,r0,8
344 c4: 40 9c 00 30 bge- cr7,f4 <nonleaf_call+0xb4>
345 c8: 81 7f 00 34 lwz r11,52(r31)
346 cc: 88 1f 00 2c lbz r0,44(r31)
347 d0: 54 09 06 3e clrlwi r9,r0,24
348 d4: 7d 20 4b 78 mr r0,r9
349 d8: 54 00 10 3a rlwinm r0,r0,2,0,29
350 dc: 7d 6b 02 14 add r11,r11,r0
351 e0: 91 7f 00 c0 stw r11,192(r31)
352 e4: 38 09 00 01 addi r0,r9,1
353 e8: 54 00 06 3e clrlwi r0,r0,24
354 ec: 98 1f 00 2c stb r0,44(r31)
355 f0: 48 00 00 14 b 104 <nonleaf_call+0xc4>
356 f4: 81 3f 00 30 lwz r9,48(r31)
357 f8: 91 3f 00 c0 stw r9,192(r31)
358 fc: 38 09 00 04 addi r0,r9,4
359 100: 90 1f 00 30 stw r0,48(r31)
360 104: 81 3f 00 c0 lwz r9,192(r31)
361 108: 80 09 00 00 lwz r0,0(r9)
362 10c: 90 1f 00 28 stw r0,40(r31)
363 110: 88 1f 00 2c lbz r0,44(r31)
364 114: 54 00 06 3e clrlwi r0,r0,24
365 118: 2b 80 00 08 cmplwi cr7,r0,8
366 11c: 40 9c 00 30 bge- cr7,14c <nonleaf_call+0x10c>
367 120: 81 7f 00 34 lwz r11,52(r31)
368 124: 88 1f 00 2c lbz r0,44(r31)
369 128: 54 09 06 3e clrlwi r9,r0,24
370 12c: 7d 20 4b 78 mr r0,r9
371 130: 54 00 10 3a rlwinm r0,r0,2,0,29
372 134: 7d 6b 02 14 add r11,r11,r0
373 138: 91 7f 00 bc stw r11,188(r31)
374 13c: 38 09 00 01 addi r0,r9,1
375 140: 54 00 06 3e clrlwi r0,r0,24
376 144: 98 1f 00 2c stb r0,44(r31)
377 148: 48 00 00 14 b 15c <nonleaf_call+0x11c>
378 14c: 81 3f 00 30 lwz r9,48(r31)
379 150: 91 3f 00 bc stw r9,188(r31)
380 154: 38 09 00 04 addi r0,r9,4
381 158: 90 1f 00 30 stw r0,48(r31)
382 15c: 81 3f 00 bc lwz r9,188(r31)
383 160: 80 09 00 00 lwz r0,0(r9)
384 164: 90 1f 00 24 stw r0,36(r31)
385 168: 88 1f 00 2c lbz r0,44(r31)
386 16c: 54 00 06 3e clrlwi r0,r0,24
387 170: 2b 80 00 08 cmplwi cr7,r0,8
388 174: 40 9c 00 30 bge- cr7,1a4 <nonleaf_call+0x164>
389 178: 81 7f 00 34 lwz r11,52(r31)
390 17c: 88 1f 00 2c lbz r0,44(r31)
391 180: 54 09 06 3e clrlwi r9,r0,24
392 184: 7d 20 4b 78 mr r0,r9
393 188: 54 00 10 3a rlwinm r0,r0,2,0,29
394 18c: 7d 6b 02 14 add r11,r11,r0
395 190: 91 7f 00 b8 stw r11,184(r31)
396 194: 38 09 00 01 addi r0,r9,1
397 198: 54 00 06 3e clrlwi r0,r0,24
398 19c: 98 1f 00 2c stb r0,44(r31)
399 1a0: 48 00 00 14 b 1b4 <nonleaf_call+0x174>
400 1a4: 81 3f 00 30 lwz r9,48(r31)
401 1a8: 91 3f 00 b8 stw r9,184(r31)
402 1ac: 38 09 00 04 addi r0,r9,4
403 1b0: 90 1f 00 30 stw r0,48(r31)
404 1b4: 81 3f 00 b8 lwz r9,184(r31)
405 1b8: 80 09 00 00 lwz r0,0(r9)
406 1bc: 90 1f 00 20 stw r0,32(r31)
407 1c0: 88 1f 00 2c lbz r0,44(r31)
408 1c4: 54 00 06 3e clrlwi r0,r0,24
409 1c8: 2b 80 00 08 cmplwi cr7,r0,8
410 1cc: 40 9c 00 30 bge- cr7,1fc <nonleaf_call+0x1bc>
411 1d0: 81 7f 00 34 lwz r11,52(r31)
412 1d4: 88 1f 00 2c lbz r0,44(r31)
413 1d8: 54 09 06 3e clrlwi r9,r0,24
414 1dc: 7d 20 4b 78 mr r0,r9
415 1e0: 54 00 10 3a rlwinm r0,r0,2,0,29
416 1e4: 7d 6b 02 14 add r11,r11,r0
417 1e8: 91 7f 00 b4 stw r11,180(r31)
418 1ec: 38 09 00 01 addi r0,r9,1
419 1f0: 54 00 06 3e clrlwi r0,r0,24
420 1f4: 98 1f 00 2c stb r0,44(r31)
421 1f8: 48 00 00 14 b 20c <nonleaf_call+0x1cc>
422 1fc: 81 3f 00 30 lwz r9,48(r31)
423 200: 91 3f 00 b4 stw r9,180(r31)
424 204: 38 09 00 04 addi r0,r9,4
425 208: 90 1f 00 30 stw r0,48(r31)
426 20c: 81 3f 00 b4 lwz r9,180(r31)
427 210: 80 09 00 00 lwz r0,0(r9)
428 214: 90 1f 00 1c stw r0,28(r31)
429 218: 88 1f 00 2d lbz r0,45(r31)
430 21c: 54 00 06 3e clrlwi r0,r0,24
431 220: 2b 80 00 08 cmplwi cr7,r0,8
432 224: 40 9c 00 34 bge- cr7,258 <nonleaf_call+0x218>
433 228: 81 3f 00 34 lwz r9,52(r31)
434 22c: 39 69 00 20 addi r11,r9,32
435 230: 88 1f 00 2d lbz r0,45(r31)
436 234: 54 09 06 3e clrlwi r9,r0,24
437 238: 7d 20 4b 78 mr r0,r9
438 23c: 54 00 18 38 rlwinm r0,r0,3,0,28
439 240: 7d 6b 02 14 add r11,r11,r0
440 244: 91 7f 00 b0 stw r11,176(r31)
441 248: 38 09 00 01 addi r0,r9,1
442 24c: 54 00 06 3e clrlwi r0,r0,24
443 250: 98 1f 00 2d stb r0,45(r31)
444 254: 48 00 00 1c b 270 <nonleaf_call+0x230>
445 258: 81 3f 00 30 lwz r9,48(r31)
446 25c: 38 09 00 07 addi r0,r9,7
447 260: 54 09 00 38 rlwinm r9,r0,0,0,28
448 264: 91 3f 00 b0 stw r9,176(r31)
449 268: 38 09 00 08 addi r0,r9,8
450 26c: 90 1f 00 30 stw r0,48(r31)
451 270: 81 3f 00 b0 lwz r9,176(r31)
452 274: c8 09 00 00 lfd f0,0(r9)
453 278: fc 00 00 18 frsp f0,f0
454 27c: d0 1f 00 10 stfs f0,16(r31)
455 280: 88 1f 00 2d lbz r0,45(r31)
456 284: 54 00 06 3e clrlwi r0,r0,24
457 288: 2b 80 00 08 cmplwi cr7,r0,8
458 28c: 40 9c 00 34 bge- cr7,2c0 <nonleaf_call+0x280>
459 290: 81 3f 00 34 lwz r9,52(r31)
460 294: 39 69 00 20 addi r11,r9,32
461 298: 88 1f 00 2d lbz r0,45(r31)
462 29c: 54 09 06 3e clrlwi r9,r0,24
463 2a0: 7d 20 4b 78 mr r0,r9
464 2a4: 54 00 18 38 rlwinm r0,r0,3,0,28
465 2a8: 7d 6b 02 14 add r11,r11,r0
466 2ac: 91 7f 00 ac stw r11,172(r31)
467 2b0: 38 09 00 01 addi r0,r9,1
468 2b4: 54 00 06 3e clrlwi r0,r0,24
469 2b8: 98 1f 00 2d stb r0,45(r31)
470 2bc: 48 00 00 1c b 2d8 <nonleaf_call+0x298>
471 2c0: 81 3f 00 30 lwz r9,48(r31)
472 2c4: 38 09 00 07 addi r0,r9,7
473 2c8: 54 09 00 38 rlwinm r9,r0,0,0,28
474 2cc: 91 3f 00 ac stw r9,172(r31)
475 2d0: 38 09 00 08 addi r0,r9,8
476 2d4: 90 1f 00 30 stw r0,48(r31)
477 2d8: 81 3f 00 ac lwz r9,172(r31)
478 2dc: c8 09 00 00 lfd f0,0(r9)
479 2e0: fc 00 00 18 frsp f0,f0
480 2e4: d0 1f 00 0c stfs f0,12(r31)
481 2e8: 88 1f 00 2c lbz r0,44(r31)
482 2ec: 54 00 06 3e clrlwi r0,r0,24
483 2f0: 2b 80 00 08 cmplwi cr7,r0,8
484 2f4: 40 9c 00 30 bge- cr7,324 <nonleaf_call+0x2e4>
485 2f8: 81 7f 00 34 lwz r11,52(r31)
486 2fc: 88 1f 00 2c lbz r0,44(r31)
487 300: 54 09 06 3e clrlwi r9,r0,24
488 304: 7d 20 4b 78 mr r0,r9
489 308: 54 00 10 3a rlwinm r0,r0,2,0,29
490 30c: 7d 6b 02 14 add r11,r11,r0
491 310: 91 7f 00 a8 stw r11,168(r31)
492 314: 38 09 00 01 addi r0,r9,1
493 318: 54 00 06 3e clrlwi r0,r0,24
494 31c: 98 1f 00 2c stb r0,44(r31)
495 320: 48 00 00 14 b 334 <nonleaf_call+0x2f4>
496 324: 81 3f 00 30 lwz r9,48(r31)
497 328: 91 3f 00 a8 stw r9,168(r31)
498 32c: 38 09 00 04 addi r0,r9,4
499 330: 90 1f 00 30 stw r0,48(r31)
500 334: 81 3f 00 a8 lwz r9,168(r31)
501 338: 80 09 00 00 lwz r0,0(r9)
502 33c: 90 1f 00 18 stw r0,24(r31)
503 340: 88 1f 00 2c lbz r0,44(r31)
504 344: 54 00 06 3e clrlwi r0,r0,24
505 348: 2b 80 00 08 cmplwi cr7,r0,8
506 34c: 40 9c 00 30 bge- cr7,37c <nonleaf_call+0x33c>
507 350: 81 7f 00 34 lwz r11,52(r31)
508 354: 88 1f 00 2c lbz r0,44(r31)
509 358: 54 09 06 3e clrlwi r9,r0,24
510 35c: 7d 20 4b 78 mr r0,r9
511 360: 54 00 10 3a rlwinm r0,r0,2,0,29
512 364: 7d 6b 02 14 add r11,r11,r0
513 368: 91 7f 00 a4 stw r11,164(r31)
514 36c: 38 09 00 01 addi r0,r9,1
515 370: 54 00 06 3e clrlwi r0,r0,24
516 374: 98 1f 00 2c stb r0,44(r31)
517 378: 48 00 00 14 b 38c <nonleaf_call+0x34c>
518 37c: 81 3f 00 30 lwz r9,48(r31)
519 380: 91 3f 00 a4 stw r9,164(r31)
520 384: 38 09 00 04 addi r0,r9,4
521 388: 90 1f 00 30 stw r0,48(r31)
522 38c: 81 3f 00 a4 lwz r9,164(r31)
523 390: 80 09 00 00 lwz r0,0(r9)
524 394: 90 1f 00 14 stw r0,20(r31)
525 398: 88 1f 00 2d lbz r0,45(r31)
526 39c: 54 00 06 3e clrlwi r0,r0,24
527 3a0: 2b 80 00 08 cmplwi cr7,r0,8
528 3a4: 40 9c 00 34 bge- cr7,3d8 <nonleaf_call+0x398>
529 3a8: 81 3f 00 34 lwz r9,52(r31)
530 3ac: 39 69 00 20 addi r11,r9,32
531 3b0: 88 1f 00 2d lbz r0,45(r31)
532 3b4: 54 09 06 3e clrlwi r9,r0,24
533 3b8: 7d 20 4b 78 mr r0,r9
534 3bc: 54 00 18 38 rlwinm r0,r0,3,0,28
535 3c0: 7d 6b 02 14 add r11,r11,r0
536 3c4: 91 7f 00 a0 stw r11,160(r31)
537 3c8: 38 09 00 01 addi r0,r9,1
538 3cc: 54 00 06 3e clrlwi r0,r0,24
539 3d0: 98 1f 00 2d stb r0,45(r31)
540 3d4: 48 00 00 1c b 3f0 <nonleaf_call+0x3b0>
541 3d8: 81 3f 00 30 lwz r9,48(r31)
542 3dc: 38 09 00 07 addi r0,r9,7
543 3e0: 54 09 00 38 rlwinm r9,r0,0,0,28
544 3e4: 91 3f 00 a0 stw r9,160(r31)
545 3e8: 38 09 00 08 addi r0,r9,8
546 3ec: 90 1f 00 30 stw r0,48(r31)
547 3f0: 81 3f 00 a0 lwz r9,160(r31)
548 3f4: c8 09 00 00 lfd f0,0(r9)
549 3f8: fc 00 00 18 frsp f0,f0
550 3fc: d0 1f 00 08 stfs f0,8(r31)
551 400: 80 01 00 00 lwz r0,0(r1)
552 404: 94 01 ff 10 stwu r0,-240(r1)
553 408: 39 21 00 08 addi r9,r1,8
554 40c: 91 3f 00 9c stw r9,156(r31)
555 410: 81 3f 00 9c lwz r9,156(r31)
556 414: 38 09 00 0f addi r0,r9,15
557 418: 54 00 e1 3e rlwinm r0,r0,28,4,31
558 41c: 54 00 20 36 rlwinm r0,r0,4,0,27
559 420: 90 1f 00 9c stw r0,156(r31)
560 424: 81 3f 00 9c lwz r9,156(r31)
561 428: 38 00 00 4c li r0,76
562 42c: 98 09 00 00 stb r0,0(r9)
563 430: 80 7f 00 28 lwz r3,40(r31)
564 434: 80 9f 00 24 lwz r4,36(r31)
565 438: 80 bf 00 20 lwz r5,32(r31)
566 43c: 80 df 00 1c lwz r6,28(r31)
567 440: c0 3f 00 10 lfs f1,16(r31)
568 444: c0 5f 00 0c lfs f2,12(r31)
569 448: 80 ff 00 18 lwz r7,24(r31)
570 44c: 81 1f 00 14 lwz r8,20(r31)
571 450: c0 7f 00 08 lfs f3,8(r31)
572 454: 48 00 00 01 bl 454 <nonleaf_call+0x414>
573 458: 81 61 00 00 lwz r11,0(r1)
574 45c: 80 0b 00 04 lwz r0,4(r11)
575 460: 7c 08 03 a6 mtlr r0
576 464: 83 eb ff fc lwz r31,-4(r11)
577 468: 7d 61 5b 78 mr r1,r11
578 46c: 4e 80 00 20 blr
579
580 00000470 <main>:
581 470: 94 21 ff f0 stwu r1,-16(r1) ; |
582 474: 7c 08 02 a6 mflr r0 ; |
583 478: 93 e1 00 0c stw r31,12(r1) ; | prolog
584 47c: 90 01 00 14 stw r0,20(r1) ; |
585 480: 7c 3f 0b 78 mr r31,r1 ; /
586 484: 3d 20 00 00 lis r9,0 ; \ prep arg 5 (float, but double in reg & ellipsis), load from 0 b/c objdump is from .o, not finally linked exec
587 488: c8 09 00 00 lfd f0,0(r9) ; /
588 48c: 3d 20 00 00 lis r9,0 ; \ prep arg 6 (float, but double in reg & ellipsis), load from 0 b/c objdump is from .o, not finally linked exec
589 490: c9 a9 00 08 lfd f13,8(r9) ; /
590 494: 3d 20 00 00 lis r9,0 ; \ prep arg 9 (float, but double in reg & ellipsis), load from 0 b/c objdump is from .o, not finally linked exec
591 498: c9 89 00 10 lfd f12,16(r9) ; /
592 49c: 38 60 00 00 li r3,0 ; arg 0
593 4a0: 38 80 00 01 li r4,1 ; arg 1
594 4a4: 38 a0 00 02 li r5,2 ; arg 2
595 4a8: 38 c0 00 03 li r6,3 ; arg 3
596 4ac: 38 e0 00 04 li r7,4 ; arg 4
597 4b0: fc 20 00 90 fmr f1,f0 ; arg 5
598 4b4: fc 40 68 90 fmr f2,f13 ; arg 6
599 4b8: 39 00 00 07 li r8,7 ; arg 7
600 4bc: 39 20 00 08 li r9,8 ; arg 8
601 4c0: fc 60 60 90 fmr f3,f12 ; arg 9
602 4c4: 4c c6 32 42 crset 4*cr1+eq ; set CR bit for ellipse call
603 4c8: 48 00 00 01 bl 4c8 <main+0x58> ; call and put return address -> lr
604 4cc: 38 00 00 00 li r0,0 ; return value (pointlessly) via gpr0 ...
605 4d0: 7c 03 03 78 mr r3,r0 ; ... to gpr3
606 4d4: 81 61 00 00 lwz r11,0(r1) ; |
607 4d8: 80 0b 00 04 lwz r0,4(r11) ; |
608 4dc: 7c 08 03 a6 mtlr r0 ; |
609 4e0: 83 eb ff fc lwz r31,-4(r11) ; | epilog
610 4e4: 7d 61 5b 78 mr r1,r11 ; |
611 4e8: 4e 80 00 20 blr ; |
612
613 ; vim: ft=asm68k
614