comparison doc/disas_examples/arm64.aapcs.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 cc78e34958e5
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(220) = '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 freebsd-13.0_r348764-arm64 w/ clang 8.0.0
23
24 leaf_call:
25 0: ff 83 00 d1 sub sp, sp, #32
26 4: e0 1f 00 b9 str w0, [sp, #28]
27 8: e1 1b 00 b9 str w1, [sp, #24]
28 c: e2 17 00 b9 str w2, [sp, #20]
29 10: e3 13 00 b9 str w3, [sp, #16]
30 14: e4 0f 00 b9 str w4, [sp, #12]
31 18: e5 0b 00 b9 str w5, [sp, #8]
32 1c: e6 07 00 b9 str w6, [sp, #4]
33 20: ff 83 00 91 add sp, sp, #32
34 24: c0 03 5f d6 ret
35
36 nonleaf_call:
37 28: ff 83 04 d1 sub sp, sp, #288 ; | includes alloca()'d static space, already
38 2c: fc 83 00 f9 str x28, [sp, #256] ; | (unsure why r28 is preserved @@@)
39 30: fd 7b 11 a9 stp x29, x30, [sp, #272] ; | prolog
40 34: fd 43 04 91 add x29, sp, #272 ; | adjust/set frame pointer (since sp was modified first)
41 38: 88 09 80 52 mov w8, #76 ; 'L' -> w8
42 3c: a0 c3 1e b8 stur w0, [x29, #-20] ; in arg 0 -> local area (as temp store)
43 40: a1 83 1e b8 stur w1, [x29, #-24] ; in arg 1 -> local area (as temp store)
44 44: a2 43 1e b8 stur w2, [x29, #-28] ; in arg 2 -> local area (as temp store)
45 48: a3 03 1e b8 stur w3, [x29, #-32] ; in arg 3 -> local area (as temp store)
46 4c: a4 c3 1d b8 stur w4, [x29, #-36] ; in arg 4 -> local area (as temp store)
47 50: a5 83 1d b8 stur w5, [x29, #-40] ; in arg 5 -> local area (as temp store)
48 54: a6 43 1d b8 stur w6, [x29, #-44] ; in arg 6 -> local area (as temp store)
49 58: a7 03 1d b8 stur w7, [x29, #-48] ; in arg 7 -> local area (as temp store)
50 5c: e8 03 00 39 strb w8, [sp] ; place 'L' on top of stack (at alloca()'d addr)
51 60: a0 83 5e b8 ldur w0, [x29, #-24] ; arg 0
52 64: a1 43 5e b8 ldur w1, [x29, #-28] ; arg 1
53 68: a2 03 5e b8 ldur w2, [x29, #-32] ; arg 2
54 6c: a3 c3 5d b8 ldur w3, [x29, #-36] ; arg 3
55 70: a4 83 5d b8 ldur w4, [x29, #-40] ; arg 4
56 74: a5 43 5d b8 ldur w5, [x29, #-44] ; arg 5
57 78: a6 03 5d b8 ldur w6, [x29, #-48] ; arg 6
58 7c: e1 ff ff 97 bl #-124 ; return address -> r30/lr, and call
59 80: fd 7b 51 a9 ldp x29, x30, [sp, #272] ; |
60 84: fc 83 40 f9 ldr x28, [sp, #256] ; |
61 88: ff 83 04 91 add sp, sp, #288 ; | epilog
62 8c: c0 03 5f d6 ret ; |
63
64 main:
65 90: ff 83 00 d1 sub sp, sp, #32 ; |
66 94: fd 7b 01 a9 stp x29, x30, [sp, #16] ; | prolog
67 98: fd 43 00 91 add x29, sp, #16 ; |
68 9c: 08 00 80 52 mov w8, #0 ; clearing r8 (indirect result location pointer)
69 a0: e1 03 00 32 orr w1, wzr, #0x1 ; arg 1
70 a4: e2 03 1f 32 orr w2, wzr, #0x2 ; arg 2
71 a8: e3 07 00 32 orr w3, wzr, #0x3 ; arg 3
72 ac: e4 03 1e 32 orr w4, wzr, #0x4 ; arg 4
73 b0: a5 00 80 52 mov w5, #5 ; arg 5
74 b4: e6 07 1f 32 orr w6, wzr, #0x6 ; arg 6
75 b8: e7 0b 00 32 orr w7, wzr, #0x7 ; arg 7
76 bc: bf c3 1f b8 stur wzr, [x29, #-4] ; unsure... store a zero in local area@@@
77 c0: e0 03 08 2a mov w0, w8 ; arg 0 (= 0 set in w8, above)
78 c4: e8 0b 00 b9 str w8, [sp, #8] ; temp storing 0 in local area
79 c8: d8 ff ff 97 bl #-160 ; return address -> r30/lr, and call
80 cc: e0 0b 40 b9 ldr w0, [sp, #8] ; return value (unsure why not just using immediate @@@)
81 d0: fd 7b 41 a9 ldp x29, x30, [sp, #16] ; |
82 d4: ff 83 00 91 add sp, sp, #32 ; | epilog
83 d8: c0 03 5f d6 ret ; |
84
85
86
87 ; ---------- same with more args so stack is also used ---------->
88
89 ; #include <stdlib.h>
90 ;
91 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h, int i, int j)
92 ; {
93 ; }
94 ;
95 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
96 ; {
97 ; /* use some local data */
98 ; *(char*)alloca(220) = 'L';
99 ; leaf_call(b, c, d, e, f, g, h, i, j);
100 ; }
101 ;
102 ; int main()
103 ; {
104 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
105 ; return 0;
106 ; }
107
108
109
110 ; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0
111
112 0000000000000000 leaf_call:
113 0: ff c3 00 d1 sub sp, sp, #48
114 4: e8 33 40 b9 ldr w8, [sp, #48]
115 8: e0 2f 00 b9 str w0, [sp, #44]
116 c: e1 2b 00 b9 str w1, [sp, #40]
117 10: e2 27 00 b9 str w2, [sp, #36]
118 14: e3 23 00 b9 str w3, [sp, #32]
119 18: e4 1f 00 b9 str w4, [sp, #28]
120 1c: e5 1b 00 b9 str w5, [sp, #24]
121 20: e6 17 00 b9 str w6, [sp, #20]
122 24: e7 13 00 b9 str w7, [sp, #16]
123 28: e8 0f 00 b9 str w8, [sp, #12]
124 2c: ff c3 00 91 add sp, sp, #48
125 30: c0 03 5f d6 ret
126
127 0000000000000034 nonleaf_call:
128 34: ff 03 05 d1 sub sp, sp, #320 ; | includes alloca()'d static space, already
129 38: fc 93 00 f9 str x28, [sp, #288] ; | (unsure why r28 is preserved @@@)
130 3c: fd 7b 13 a9 stp x29, x30, [sp, #304] ; | prolog
131 40: fd c3 04 91 add x29, sp, #304 ; / adjust/set frame pointer (since sp was modified first)
132 44: a8 13 40 b9 ldr w8, [x29, #16] ; \
133 48: a9 1b 40 b9 ldr w9, [x29, #24] ; | in args 8,9 from prev frame's param area -> regs, no we have args 0-9 all in r0-r9
134 4c: 8a 09 80 52 mov w10, #76 ; 'L' -> w10
135 50: a0 c3 1e b8 stur w0, [x29, #-20] ; |
136 54: a1 83 1e b8 stur w1, [x29, #-24] ; |
137 58: a2 43 1e b8 stur w2, [x29, #-28] ; |
138 5c: a3 03 1e b8 stur w3, [x29, #-32] ; |
139 60: a4 c3 1d b8 stur w4, [x29, #-36] ; | ... in args 0,1,2,3,4,5,6,7,8,9 -> temp space in local area ...
140 64: a5 83 1d b8 stur w5, [x29, #-40] ; |
141 68: a6 43 1d b8 stur w6, [x29, #-44] ; |
142 6c: a7 03 1d b8 stur w7, [x29, #-48] ; |
143 70: a8 c3 1c b8 stur w8, [x29, #-52] ; |
144 74: a9 83 1c b8 stur w9, [x29, #-56] ; |
145 78: ea 43 00 39 strb w10, [sp, #16] ; 'L' -> local area (alloca()'d memory)
146 7c: a0 83 5e b8 ldur w0, [x29, #-24] ; arg 0
147 80: a1 43 5e b8 ldur w1, [x29, #-28] ; arg 1
148 84: a2 03 5e b8 ldur w2, [x29, #-32] ; arg 2
149 88: a3 c3 5d b8 ldur w3, [x29, #-36] ; arg 3
150 8c: a4 83 5d b8 ldur w4, [x29, #-40] ; arg 4
151 90: a5 43 5d b8 ldur w5, [x29, #-44] ; arg 5
152 94: a6 03 5d b8 ldur w6, [x29, #-48] ; arg 6
153 98: a7 c3 5c b8 ldur w7, [x29, #-52] ; arg 7
154 9c: a8 83 5c b8 ldur w8, [x29, #-56] ; arg 8 -> w8, and ...
155 a0: eb 03 00 91 mov x11, sp ; ... with help of x11 (why?) ...
156 a4: 68 01 00 b9 str w8, [x11] ; ... "pushed" onto to of stack
157 a8: d6 ff ff 97 bl #-168 <leaf_call> ; return address -> r30/lr, and call
158 ac: fd 7b 53 a9 ldp x29, x30, [sp, #304] ; |
159 b0: fc 93 40 f9 ldr x28, [sp, #288] ; |
160 b4: ff 03 05 91 add sp, sp, #320 ; | epilog
161 b8: c0 03 5f d6 ret ; |
162
163 00000000000000bc main:
164 bc: ff c3 00 d1 sub sp, sp, #48 ; |
165 c0: fd 7b 02 a9 stp x29, x30, [sp, #32] ; | prolog
166 c4: fd 83 00 91 add x29, sp, #32 ; |
167 c8: 08 00 80 52 mov w8, #0 ; clearing r8 (indirect result location pointer)
168 cc: e1 03 00 32 orr w1, wzr, #0x1 ; arg 1
169 d0: e2 03 1f 32 orr w2, wzr, #0x2 ; arg 2
170 d4: e3 07 00 32 orr w3, wzr, #0x3 ; arg 3
171 d8: e4 03 1e 32 orr w4, wzr, #0x4 ; arg 4
172 dc: a5 00 80 52 mov w5, #5 ; arg 5
173 e0: e6 07 1f 32 orr w6, wzr, #0x6 ; arg 6
174 e4: e7 0b 00 32 orr w7, wzr, #0x7 ; arg 7
175 e8: e9 03 1d 32 orr w9, wzr, #0x8 ; arg 8 -> r9
176 ec: 2a 01 80 52 mov w10, #9 ; arg 9 -> r10
177 f0: bf c3 1f b8 stur wzr, [x29, #-4] ; unsure... store a zero in local area@@@
178 f4: e0 03 08 2a mov w0, w8 ; arg 0 (= 0 set in w8, above)
179 f8: eb 03 00 91 mov x11, sp ; use sp in x11 (why?), to ...
180 fc: 69 01 00 b9 str w9, [x11] ; ... place arg 8 on top of stack
181 100: eb 03 00 91 mov x11, sp ; use sp in x11 (why?), to ... (set again, pointlessly)
182 104: 6a 09 00 b9 str w10, [x11, #8] ; ... place arg 9 on stack (next to arg 8)
183 108: a8 83 1f b8 stur w8, [x29, #-8] ; temp storing 0 in local area @@@ why?
184 10c: ca ff ff 97 bl #-216 <nonleaf_call> ; return address -> r30/lr, and call
185 110: a0 83 5f b8 ldur w0, [x29, #-8] ; |
186 114: fd 7b 42 a9 ldp x29, x30, [sp, #32] ; |
187 118: ff c3 00 91 add sp, sp, #48 ; | epilog
188 11c: c0 03 5f d6 ret ; |
189
190
191
192 ; ---------- for spilling ---------->
193
194 ; #include <stdlib.h>
195 ; #include <stdarg.h>
196 ;
197 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h, int i, int j)
198 ; {
199 ; }
200 ;
201 ; void nonleaf_call(int a, ...)
202 ; {
203 ; int b,c,d,e,f,g,h,i,j;
204 ; va_list ap;
205 ; va_start(ap, a);
206 ; b = va_arg(ap, int);
207 ; c = va_arg(ap, int);
208 ; d = va_arg(ap, int);
209 ; e = va_arg(ap, int);
210 ; f = va_arg(ap, int);
211 ; g = va_arg(ap, int);
212 ; h = va_arg(ap, int);
213 ; i = va_arg(ap, int);
214 ; j = va_arg(ap, int);
215 ;
216 ; /* use some local data */
217 ; *(char*)alloca(220) = 'L';
218 ; leaf_call(b, c, d, e, f, g, h, i, j);
219 ; }
220 ;
221 ; int main()
222 ; {
223 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
224 ; return 0;
225 ; }
226
227
228
229 ; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0
230
231 0000000000000000 leaf_call:
232 0: ff c3 00 d1 sub sp, sp, #48
233 4: e8 33 40 b9 ldr w8, [sp, #48]
234 8: e0 2f 00 b9 str w0, [sp, #44]
235 c: e1 2b 00 b9 str w1, [sp, #40]
236 10: e2 27 00 b9 str w2, [sp, #36]
237 14: e3 23 00 b9 str w3, [sp, #32]
238 18: e4 1f 00 b9 str w4, [sp, #28]
239 1c: e5 1b 00 b9 str w5, [sp, #24]
240 20: e6 17 00 b9 str w6, [sp, #20]
241 24: e7 13 00 b9 str w7, [sp, #16]
242 28: e8 0f 00 b9 str w8, [sp, #12]
243 2c: ff c3 00 91 add sp, sp, #48
244 30: c0 03 5f d6 ret
245
246 0000000000000034 nonleaf_call:
247 34: fc 4f be a9 stp x28, x19, [sp, #-32]! ; |
248 38: fd 7b 01 a9 stp x29, x30, [sp, #16] ; |
249 3c: fd 43 00 91 add x29, sp, #16 ; | prolog
250 40: ff 83 07 d1 sub sp, sp, #480 ; |
251 44: f3 03 00 91 mov x19, sp
252 48: 67 56 80 3d str q7, [x19, #336] ; |
253 4c: 66 52 80 3d str q6, [x19, #320] ; |
254 50: 65 4e 80 3d str q5, [x19, #304] ; |
255 54: 64 4a 80 3d str q4, [x19, #288] ; |
256 58: 63 46 80 3d str q3, [x19, #272] ; | spill all flot regs (on top of spilled integers, below
257 5c: 62 42 80 3d str q2, [x19, #256] ; |
258 60: 61 3e 80 3d str q1, [x19, #240] ; |
259 64: 60 3a 80 3d str q0, [x19, #224] ; /
260 68: a7 03 1a f8 stur x7, [x29, #-96] ; \
261 6c: a6 83 19 f8 stur x6, [x29, #-104] ; |
262 70: a5 03 19 f8 stur x5, [x29, #-112] ; |
263 74: a4 83 18 f8 stur x4, [x29, #-120] ; | spill integer args (adjacent to prev frame's param area)
264 78: a3 03 18 f8 stur x3, [x29, #-128] ; | note: only needed ones are spilled
265 7c: a2 83 17 f8 stur x2, [x29, #-136] ; |
266 80: a1 03 17 f8 stur x1, [x29, #-144] ; |
267 84: a0 c3 1e b8 stur w0, [x29, #-20]
268 88: e0 63 19 32 orr w0, wzr, #0xffffff80
269 8c: a0 43 1c b8 stur w0, [x29, #-60]
270 90: e0 06 80 12 mov w0, #-56
271 94: a0 03 1c b8 stur w0, [x29, #-64]
272 98: 61 82 03 91 add x1, x19, #224
273 9c: 21 00 02 91 add x1, x1, #128
274 a0: a1 83 1b f8 stur x1, [x29, #-72]
275 a4: a1 43 02 d1 sub x1, x29, #144
276 a8: 21 e0 00 91 add x1, x1, #56
277 ac: a1 03 1b f8 stur x1, [x29, #-80]
278 b0: a1 43 00 91 add x1, x29, #16
279 b4: a1 83 1a f8 stur x1, [x29, #-88]
280 b8: a1 63 01 d1 sub x1, x29, #88
281 bc: 21 60 00 91 add x1, x1, #24
282 c0: a0 03 5c b8 ldur w0, [x29, #-64]
283 c4: e8 03 00 2a mov w8, w0
284 c8: 61 6e 00 f9 str x1, [x19, #216]
285 cc: 68 d6 00 b9 str w8, [x19, #212]
286 d0: e0 01 f8 36 tbz w0, #31, #60 <nonleaf_call+0xd8>
287 d4: 01 00 00 14 b #4 <nonleaf_call+0xa4>
288 d8: 68 d6 40 b9 ldr w8, [x19, #212]
289 dc: 09 21 00 11 add w9, w8, #8
290 e0: 6a 6e 40 f9 ldr x10, [x19, #216]
291 e4: 49 01 00 b9 str w9, [x10]
292 e8: 29 01 00 71 subs w9, w9, #0
293 ec: 69 d2 00 b9 str w9, [x19, #208]
294 f0: ec 00 00 54 b.gt #28 <nonleaf_call+0xd8>
295 f4: 01 00 00 14 b #4 <nonleaf_call+0xc4>
296 f8: a8 03 5b f8 ldur x8, [x29, #-80]
297 fc: 69 d6 40 b9 ldr w9, [x19, #212]
298 100: 08 c1 29 8b add x8, x8, w9, sxtw
299 104: 68 66 00 f9 str x8, [x19, #200]
300 108: 06 00 00 14 b #24 <nonleaf_call+0xec>
301 10c: a8 83 5a f8 ldur x8, [x29, #-88]
302 110: 09 21 00 91 add x9, x8, #8
303 114: a9 83 1a f8 stur x9, [x29, #-88]
304 118: 68 66 00 f9 str x8, [x19, #200]
305 11c: 01 00 00 14 b #4 <nonleaf_call+0xec>
306 120: 68 66 40 f9 ldr x8, [x19, #200]
307 124: 09 01 40 b9 ldr w9, [x8]
308 128: a9 83 1e b8 stur w9, [x29, #-24]
309 12c: a8 63 01 d1 sub x8, x29, #88
310 130: 08 61 00 91 add x8, x8, #24
311 134: a9 03 5c b8 ldur w9, [x29, #-64]
312 138: ea 03 09 2a mov w10, w9
313 13c: 68 62 00 f9 str x8, [x19, #192]
314 140: 6a be 00 b9 str w10, [x19, #188]
315 144: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x14c>
316 148: 01 00 00 14 b #4 <nonleaf_call+0x118>
317 14c: 68 be 40 b9 ldr w8, [x19, #188]
318 150: 09 21 00 11 add w9, w8, #8
319 154: 6a 62 40 f9 ldr x10, [x19, #192]
320 158: 49 01 00 b9 str w9, [x10]
321 15c: 29 01 00 71 subs w9, w9, #0
322 160: 69 ba 00 b9 str w9, [x19, #184]
323 164: ec 00 00 54 b.gt #28 <nonleaf_call+0x14c>
324 168: 01 00 00 14 b #4 <nonleaf_call+0x138>
325 16c: a8 03 5b f8 ldur x8, [x29, #-80]
326 170: 69 be 40 b9 ldr w9, [x19, #188]
327 174: 08 c1 29 8b add x8, x8, w9, sxtw
328 178: 68 5a 00 f9 str x8, [x19, #176]
329 17c: 06 00 00 14 b #24 <nonleaf_call+0x160>
330 180: a8 83 5a f8 ldur x8, [x29, #-88]
331 184: 09 21 00 91 add x9, x8, #8
332 188: a9 83 1a f8 stur x9, [x29, #-88]
333 18c: 68 5a 00 f9 str x8, [x19, #176]
334 190: 01 00 00 14 b #4 <nonleaf_call+0x160>
335 194: 68 5a 40 f9 ldr x8, [x19, #176]
336 198: 09 01 40 b9 ldr w9, [x8]
337 19c: a9 43 1e b8 stur w9, [x29, #-28]
338 1a0: a8 63 01 d1 sub x8, x29, #88
339 1a4: 08 61 00 91 add x8, x8, #24
340 1a8: a9 03 5c b8 ldur w9, [x29, #-64]
341 1ac: ea 03 09 2a mov w10, w9
342 1b0: 68 56 00 f9 str x8, [x19, #168]
343 1b4: 6a a6 00 b9 str w10, [x19, #164]
344 1b8: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x1c0>
345 1bc: 01 00 00 14 b #4 <nonleaf_call+0x18c>
346 1c0: 68 a6 40 b9 ldr w8, [x19, #164]
347 1c4: 09 21 00 11 add w9, w8, #8
348 1c8: 6a 56 40 f9 ldr x10, [x19, #168]
349 1cc: 49 01 00 b9 str w9, [x10]
350 1d0: 29 01 00 71 subs w9, w9, #0
351 1d4: 69 a2 00 b9 str w9, [x19, #160]
352 1d8: ec 00 00 54 b.gt #28 <nonleaf_call+0x1c0>
353 1dc: 01 00 00 14 b #4 <nonleaf_call+0x1ac>
354 1e0: a8 03 5b f8 ldur x8, [x29, #-80]
355 1e4: 69 a6 40 b9 ldr w9, [x19, #164]
356 1e8: 08 c1 29 8b add x8, x8, w9, sxtw
357 1ec: 68 4e 00 f9 str x8, [x19, #152]
358 1f0: 06 00 00 14 b #24 <nonleaf_call+0x1d4>
359 1f4: a8 83 5a f8 ldur x8, [x29, #-88]
360 1f8: 09 21 00 91 add x9, x8, #8
361 1fc: a9 83 1a f8 stur x9, [x29, #-88]
362 200: 68 4e 00 f9 str x8, [x19, #152]
363 204: 01 00 00 14 b #4 <nonleaf_call+0x1d4>
364 208: 68 4e 40 f9 ldr x8, [x19, #152]
365 20c: 09 01 40 b9 ldr w9, [x8]
366 210: a9 03 1e b8 stur w9, [x29, #-32]
367 214: a8 63 01 d1 sub x8, x29, #88
368 218: 08 61 00 91 add x8, x8, #24
369 21c: a9 03 5c b8 ldur w9, [x29, #-64]
370 220: ea 03 09 2a mov w10, w9
371 224: 68 4a 00 f9 str x8, [x19, #144]
372 228: 6a 8e 00 b9 str w10, [x19, #140]
373 22c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x234>
374 230: 01 00 00 14 b #4 <nonleaf_call+0x200>
375 234: 68 8e 40 b9 ldr w8, [x19, #140]
376 238: 09 21 00 11 add w9, w8, #8
377 23c: 6a 4a 40 f9 ldr x10, [x19, #144]
378 240: 49 01 00 b9 str w9, [x10]
379 244: 29 01 00 71 subs w9, w9, #0
380 248: 69 8a 00 b9 str w9, [x19, #136]
381 24c: ec 00 00 54 b.gt #28 <nonleaf_call+0x234>
382 250: 01 00 00 14 b #4 <nonleaf_call+0x220>
383 254: a8 03 5b f8 ldur x8, [x29, #-80]
384 258: 69 8e 40 b9 ldr w9, [x19, #140]
385 25c: 08 c1 29 8b add x8, x8, w9, sxtw
386 260: 68 42 00 f9 str x8, [x19, #128]
387 264: 06 00 00 14 b #24 <nonleaf_call+0x248>
388 268: a8 83 5a f8 ldur x8, [x29, #-88]
389 26c: 09 21 00 91 add x9, x8, #8
390 270: a9 83 1a f8 stur x9, [x29, #-88]
391 274: 68 42 00 f9 str x8, [x19, #128]
392 278: 01 00 00 14 b #4 <nonleaf_call+0x248>
393 27c: 68 42 40 f9 ldr x8, [x19, #128]
394 280: 09 01 40 b9 ldr w9, [x8]
395 284: a9 c3 1d b8 stur w9, [x29, #-36]
396 288: a8 63 01 d1 sub x8, x29, #88
397 28c: 08 61 00 91 add x8, x8, #24
398 290: a9 03 5c b8 ldur w9, [x29, #-64]
399 294: ea 03 09 2a mov w10, w9
400 298: 68 3e 00 f9 str x8, [x19, #120]
401 29c: 6a 76 00 b9 str w10, [x19, #116]
402 2a0: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8>
403 2a4: 01 00 00 14 b #4 <nonleaf_call+0x274>
404 2a8: 68 76 40 b9 ldr w8, [x19, #116]
405 2ac: 09 21 00 11 add w9, w8, #8
406 2b0: 6a 3e 40 f9 ldr x10, [x19, #120]
407 2b4: 49 01 00 b9 str w9, [x10]
408 2b8: 29 01 00 71 subs w9, w9, #0
409 2bc: 69 72 00 b9 str w9, [x19, #112]
410 2c0: ec 00 00 54 b.gt #28 <nonleaf_call+0x2a8>
411 2c4: 01 00 00 14 b #4 <nonleaf_call+0x294>
412 2c8: a8 03 5b f8 ldur x8, [x29, #-80]
413 2cc: 69 76 40 b9 ldr w9, [x19, #116]
414 2d0: 08 c1 29 8b add x8, x8, w9, sxtw
415 2d4: 68 36 00 f9 str x8, [x19, #104]
416 2d8: 06 00 00 14 b #24 <nonleaf_call+0x2bc>
417 2dc: a8 83 5a f8 ldur x8, [x29, #-88]
418 2e0: 09 21 00 91 add x9, x8, #8
419 2e4: a9 83 1a f8 stur x9, [x29, #-88]
420 2e8: 68 36 00 f9 str x8, [x19, #104]
421 2ec: 01 00 00 14 b #4 <nonleaf_call+0x2bc>
422 2f0: 68 36 40 f9 ldr x8, [x19, #104]
423 2f4: 09 01 40 b9 ldr w9, [x8]
424 2f8: a9 83 1d b8 stur w9, [x29, #-40]
425 2fc: a8 63 01 d1 sub x8, x29, #88
426 300: 08 61 00 91 add x8, x8, #24
427 304: a9 03 5c b8 ldur w9, [x29, #-64]
428 308: ea 03 09 2a mov w10, w9
429 30c: 68 32 00 f9 str x8, [x19, #96]
430 310: 6a 5e 00 b9 str w10, [x19, #92]
431 314: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x31c>
432 318: 01 00 00 14 b #4 <nonleaf_call+0x2e8>
433 31c: 68 5e 40 b9 ldr w8, [x19, #92]
434 320: 09 21 00 11 add w9, w8, #8
435 324: 6a 32 40 f9 ldr x10, [x19, #96]
436 328: 49 01 00 b9 str w9, [x10]
437 32c: 29 01 00 71 subs w9, w9, #0
438 330: 69 5a 00 b9 str w9, [x19, #88]
439 334: ec 00 00 54 b.gt #28 <nonleaf_call+0x31c>
440 338: 01 00 00 14 b #4 <nonleaf_call+0x308>
441 33c: a8 03 5b f8 ldur x8, [x29, #-80]
442 340: 69 5e 40 b9 ldr w9, [x19, #92]
443 344: 08 c1 29 8b add x8, x8, w9, sxtw
444 348: 68 2a 00 f9 str x8, [x19, #80]
445 34c: 06 00 00 14 b #24 <nonleaf_call+0x330>
446 350: a8 83 5a f8 ldur x8, [x29, #-88]
447 354: 09 21 00 91 add x9, x8, #8
448 358: a9 83 1a f8 stur x9, [x29, #-88]
449 35c: 68 2a 00 f9 str x8, [x19, #80]
450 360: 01 00 00 14 b #4 <nonleaf_call+0x330>
451 364: 68 2a 40 f9 ldr x8, [x19, #80]
452 368: 09 01 40 b9 ldr w9, [x8]
453 36c: a9 43 1d b8 stur w9, [x29, #-44]
454 370: a8 63 01 d1 sub x8, x29, #88
455 374: 08 61 00 91 add x8, x8, #24
456 378: a9 03 5c b8 ldur w9, [x29, #-64]
457 37c: ea 03 09 2a mov w10, w9
458 380: 68 26 00 f9 str x8, [x19, #72]
459 384: 6a 46 00 b9 str w10, [x19, #68]
460 388: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x390>
461 38c: 01 00 00 14 b #4 <nonleaf_call+0x35c>
462 390: 68 46 40 b9 ldr w8, [x19, #68]
463 394: 09 21 00 11 add w9, w8, #8
464 398: 6a 26 40 f9 ldr x10, [x19, #72]
465 39c: 49 01 00 b9 str w9, [x10]
466 3a0: 29 01 00 71 subs w9, w9, #0
467 3a4: 69 42 00 b9 str w9, [x19, #64]
468 3a8: ec 00 00 54 b.gt #28 <nonleaf_call+0x390>
469 3ac: 01 00 00 14 b #4 <nonleaf_call+0x37c>
470 3b0: a8 03 5b f8 ldur x8, [x29, #-80]
471 3b4: 69 46 40 b9 ldr w9, [x19, #68]
472 3b8: 08 c1 29 8b add x8, x8, w9, sxtw
473 3bc: 68 1e 00 f9 str x8, [x19, #56]
474 3c0: 06 00 00 14 b #24 <nonleaf_call+0x3a4>
475 3c4: a8 83 5a f8 ldur x8, [x29, #-88]
476 3c8: 09 21 00 91 add x9, x8, #8
477 3cc: a9 83 1a f8 stur x9, [x29, #-88]
478 3d0: 68 1e 00 f9 str x8, [x19, #56]
479 3d4: 01 00 00 14 b #4 <nonleaf_call+0x3a4>
480 3d8: 68 1e 40 f9 ldr x8, [x19, #56]
481 3dc: 09 01 40 b9 ldr w9, [x8]
482 3e0: a9 03 1d b8 stur w9, [x29, #-48]
483 3e4: a8 63 01 d1 sub x8, x29, #88
484 3e8: 08 61 00 91 add x8, x8, #24
485 3ec: a9 03 5c b8 ldur w9, [x29, #-64]
486 3f0: ea 03 09 2a mov w10, w9
487 3f4: 68 1a 00 f9 str x8, [x19, #48]
488 3f8: 6a 2e 00 b9 str w10, [x19, #44]
489 3fc: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x404>
490 400: 01 00 00 14 b #4 <nonleaf_call+0x3d0>
491 404: 68 2e 40 b9 ldr w8, [x19, #44]
492 408: 09 21 00 11 add w9, w8, #8
493 40c: 6a 1a 40 f9 ldr x10, [x19, #48]
494 410: 49 01 00 b9 str w9, [x10]
495 414: 29 01 00 71 subs w9, w9, #0
496 418: 69 2a 00 b9 str w9, [x19, #40]
497 41c: ec 00 00 54 b.gt #28 <nonleaf_call+0x404>
498 420: 01 00 00 14 b #4 <nonleaf_call+0x3f0>
499 424: a8 03 5b f8 ldur x8, [x29, #-80]
500 428: 69 2e 40 b9 ldr w9, [x19, #44]
501 42c: 08 c1 29 8b add x8, x8, w9, sxtw
502 430: 68 12 00 f9 str x8, [x19, #32]
503 434: 06 00 00 14 b #24 <nonleaf_call+0x418>
504 438: a8 83 5a f8 ldur x8, [x29, #-88]
505 43c: 09 21 00 91 add x9, x8, #8
506 440: a9 83 1a f8 stur x9, [x29, #-88]
507 444: 68 12 00 f9 str x8, [x19, #32]
508 448: 01 00 00 14 b #4 <nonleaf_call+0x418>
509 44c: 68 12 40 f9 ldr x8, [x19, #32]
510 450: 09 01 40 b9 ldr w9, [x8]
511 454: a9 c3 1c b8 stur w9, [x29, #-52]
512 458: a8 63 01 d1 sub x8, x29, #88
513 45c: 08 61 00 91 add x8, x8, #24
514 460: a9 03 5c b8 ldur w9, [x29, #-64]
515 464: ea 03 09 2a mov w10, w9
516 468: 68 0e 00 f9 str x8, [x19, #24]
517 46c: 6a 16 00 b9 str w10, [x19, #20]
518 470: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x478>
519 474: 01 00 00 14 b #4 <nonleaf_call+0x444>
520 478: 68 16 40 b9 ldr w8, [x19, #20]
521 47c: 09 21 00 11 add w9, w8, #8
522 480: 6a 0e 40 f9 ldr x10, [x19, #24]
523 484: 49 01 00 b9 str w9, [x10]
524 488: 29 01 00 71 subs w9, w9, #0
525 48c: 69 12 00 b9 str w9, [x19, #16]
526 490: ec 00 00 54 b.gt #28 <nonleaf_call+0x478>
527 494: 01 00 00 14 b #4 <nonleaf_call+0x464>
528 498: a8 03 5b f8 ldur x8, [x29, #-80]
529 49c: 69 16 40 b9 ldr w9, [x19, #20]
530 4a0: 08 c1 29 8b add x8, x8, w9, sxtw
531 4a4: 68 06 00 f9 str x8, [x19, #8]
532 4a8: 06 00 00 14 b #24 <nonleaf_call+0x48c>
533 4ac: a8 83 5a f8 ldur x8, [x29, #-88]
534 4b0: 09 21 00 91 add x9, x8, #8
535 4b4: a9 83 1a f8 stur x9, [x29, #-88]
536 4b8: 68 06 00 f9 str x8, [x19, #8]
537 4bc: 01 00 00 14 b #4 <nonleaf_call+0x48c>
538 4c0: 68 06 40 f9 ldr x8, [x19, #8]
539 4c4: 09 01 40 b9 ldr w9, [x8]
540 4c8: a9 83 1c b8 stur w9, [x29, #-56]
541 4cc: e8 03 00 91 mov x8, sp
542 4d0: 0a 81 03 f1 subs x10, x8, #224
543 4d4: 5f 01 00 91 mov sp, x10
544 4d8: 89 09 80 52 mov w9, #76
545 4dc: 09 01 12 38 sturb w9, [x8, #-224]
546 4e0: a0 83 5e b8 ldur w0, [x29, #-24]
547 4e4: a1 43 5e b8 ldur w1, [x29, #-28]
548 4e8: a2 03 5e b8 ldur w2, [x29, #-32]
549 4ec: a3 c3 5d b8 ldur w3, [x29, #-36]
550 4f0: a4 83 5d b8 ldur w4, [x29, #-40]
551 4f4: a5 43 5d b8 ldur w5, [x29, #-44]
552 4f8: a6 03 5d b8 ldur w6, [x29, #-48]
553 4fc: a7 c3 5c b8 ldur w7, [x29, #-52]
554 500: a9 83 5c b8 ldur w9, [x29, #-56]
555 504: ff 43 00 d1 sub sp, sp, #16
556 508: e8 03 00 91 mov x8, sp
557 50c: 09 01 00 b9 str w9, [x8]
558 510: bc fe ff 97 bl #-1296 <leaf_call>
559 514: ff 43 00 91 add sp, sp, #16
560 518: bf 43 00 d1 sub sp, x29, #16
561 51c: fd 7b 41 a9 ldp x29, x30, [sp, #16]
562 520: fc 4f c2 a8 ldp x28, x19, [sp], #32
563 524: c0 03 5f d6 ret
564
565 0000000000000528 main:
566 528: ff c3 00 d1 sub sp, sp, #48
567 52c: fd 7b 02 a9 stp x29, x30, [sp, #32]
568 530: fd 83 00 91 add x29, sp, #32
569 534: 08 00 80 52 mov w8, #0
570 538: e1 03 00 32 orr w1, wzr, #0x1
571 53c: e2 03 1f 32 orr w2, wzr, #0x2
572 540: e3 07 00 32 orr w3, wzr, #0x3
573 544: e4 03 1e 32 orr w4, wzr, #0x4
574 548: a5 00 80 52 mov w5, #5
575 54c: e6 07 1f 32 orr w6, wzr, #0x6
576 550: e7 0b 00 32 orr w7, wzr, #0x7
577 554: e9 03 1d 32 orr w9, wzr, #0x8
578 558: 2a 01 80 52 mov w10, #9
579 55c: bf c3 1f b8 stur wzr, [x29, #-4]
580 560: e0 03 08 2a mov w0, w8
581 564: eb 03 00 91 mov x11, sp
582 568: 69 01 00 b9 str w9, [x11]
583 56c: eb 03 00 91 mov x11, sp
584 570: 6a 09 00 b9 str w10, [x11, #8]
585 574: a8 83 1f b8 stur w8, [x29, #-8]
586 578: af fe ff 97 bl #-1348 <nonleaf_call>
587 57c: a0 83 5f b8 ldur w0, [x29, #-8]
588 580: fd 7b 42 a9 ldp x29, x30, [sp, #32]
589 584: ff c3 00 91 add sp, sp, #48
590 588: c0 03 5f d6 ret
591
592
593
594 ; ---------- for spilling with a float ---------->
595
596 ; #include <stdlib.h>
597 ; #include <stdarg.h>
598 ;
599 ; void leaf_call(int b, int c, int d, int e, float f, int g, int h, int i, int j)
600 ; {
601 ; }
602 ;
603 ; void nonleaf_call(int a, ...)
604 ; {
605 ; int b,c,d,e,g,h,i,j;
606 ; float f;
607 ; va_list ap;
608 ; va_start(ap, a);
609 ; b = va_arg(ap, int);
610 ; c = va_arg(ap, int);
611 ; d = va_arg(ap, int);
612 ; e = va_arg(ap, int);
613 ; f = va_arg(ap, float);
614 ; g = va_arg(ap, int);
615 ; h = va_arg(ap, int);
616 ; i = va_arg(ap, int);
617 ; j = va_arg(ap, int);
618 ;
619 ; /* use some local data */
620 ; *(char*)alloca(220) = 'L';
621 ; leaf_call(b, c, d, e, f, g, h, i, j);
622 ; }
623 ;
624 ; int main()
625 ; {
626 ; nonleaf_call(0, 1, 2, 3, 4, 5.f, 6, 7, 8, 9);
627 ; return 0;
628 ; }
629
630
631
632 ; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0
633
634 0000000000000000 leaf_call:
635 0: ff c3 00 d1 sub sp, sp, #48
636 4: e0 2f 00 b9 str w0, [sp, #44]
637 8: e1 2b 00 b9 str w1, [sp, #40]
638 c: e2 27 00 b9 str w2, [sp, #36]
639 10: e3 23 00 b9 str w3, [sp, #32]
640 14: e0 1f 00 bd str s0, [sp, #28]
641 18: e4 1b 00 b9 str w4, [sp, #24]
642 1c: e5 17 00 b9 str w5, [sp, #20]
643 20: e6 13 00 b9 str w6, [sp, #16]
644 24: e7 0f 00 b9 str w7, [sp, #12]
645 28: ff c3 00 91 add sp, sp, #48
646 2c: c0 03 5f d6 ret
647
648 0000000000000030 nonleaf_call:
649 30: fc 4f be a9 stp x28, x19, [sp, #-32]!
650 34: fd 7b 01 a9 stp x29, x30, [sp, #16]
651 38: fd 43 00 91 add x29, sp, #16
652 3c: ff 83 07 d1 sub sp, sp, #480
653 40: f3 03 00 91 mov x19, sp
654 44: 67 56 80 3d str q7, [x19, #336]
655 48: 66 52 80 3d str q6, [x19, #320]
656 4c: 65 4e 80 3d str q5, [x19, #304]
657 50: 64 4a 80 3d str q4, [x19, #288]
658 54: 63 46 80 3d str q3, [x19, #272]
659 58: 62 42 80 3d str q2, [x19, #256]
660 5c: 61 3e 80 3d str q1, [x19, #240]
661 60: 60 3a 80 3d str q0, [x19, #224]
662 64: a7 03 1a f8 stur x7, [x29, #-96]
663 68: a6 83 19 f8 stur x6, [x29, #-104]
664 6c: a5 03 19 f8 stur x5, [x29, #-112]
665 70: a4 83 18 f8 stur x4, [x29, #-120]
666 74: a3 03 18 f8 stur x3, [x29, #-128]
667 78: a2 83 17 f8 stur x2, [x29, #-136]
668 7c: a1 03 17 f8 stur x1, [x29, #-144]
669 80: a0 c3 1e b8 stur w0, [x29, #-20]
670 84: e0 63 19 32 orr w0, wzr, #0xffffff80
671 88: a0 43 1c b8 stur w0, [x29, #-60]
672 8c: e0 06 80 12 mov w0, #-56
673 90: a0 03 1c b8 stur w0, [x29, #-64]
674 94: 61 82 03 91 add x1, x19, #224
675 98: 21 00 02 91 add x1, x1, #128
676 9c: a1 83 1b f8 stur x1, [x29, #-72]
677 a0: a1 43 02 d1 sub x1, x29, #144
678 a4: 21 e0 00 91 add x1, x1, #56
679 a8: a1 03 1b f8 stur x1, [x29, #-80]
680 ac: a1 43 00 91 add x1, x29, #16
681 b0: a1 83 1a f8 stur x1, [x29, #-88]
682 b4: a1 63 01 d1 sub x1, x29, #88
683 b8: 21 60 00 91 add x1, x1, #24
684 bc: a0 03 5c b8 ldur w0, [x29, #-64]
685 c0: e8 03 00 2a mov w8, w0
686 c4: 61 6e 00 f9 str x1, [x19, #216]
687 c8: 68 d6 00 b9 str w8, [x19, #212]
688 cc: e0 01 f8 36 tbz w0, #31, #60 <nonleaf_call+0xd8>
689 d0: 01 00 00 14 b #4 <nonleaf_call+0xa4>
690 d4: 68 d6 40 b9 ldr w8, [x19, #212]
691 d8: 09 21 00 11 add w9, w8, #8
692 dc: 6a 6e 40 f9 ldr x10, [x19, #216]
693 e0: 49 01 00 b9 str w9, [x10]
694 e4: 29 01 00 71 subs w9, w9, #0
695 e8: 69 d2 00 b9 str w9, [x19, #208]
696 ec: ec 00 00 54 b.gt #28 <nonleaf_call+0xd8>
697 f0: 01 00 00 14 b #4 <nonleaf_call+0xc4>
698 f4: a8 03 5b f8 ldur x8, [x29, #-80]
699 f8: 69 d6 40 b9 ldr w9, [x19, #212]
700 fc: 08 c1 29 8b add x8, x8, w9, sxtw
701 100: 68 66 00 f9 str x8, [x19, #200]
702 104: 06 00 00 14 b #24 <nonleaf_call+0xec>
703 108: a8 83 5a f8 ldur x8, [x29, #-88]
704 10c: 09 21 00 91 add x9, x8, #8
705 110: a9 83 1a f8 stur x9, [x29, #-88]
706 114: 68 66 00 f9 str x8, [x19, #200]
707 118: 01 00 00 14 b #4 <nonleaf_call+0xec>
708 11c: 68 66 40 f9 ldr x8, [x19, #200]
709 120: 09 01 40 b9 ldr w9, [x8]
710 124: a9 83 1e b8 stur w9, [x29, #-24]
711 128: a8 63 01 d1 sub x8, x29, #88
712 12c: 08 61 00 91 add x8, x8, #24
713 130: a9 03 5c b8 ldur w9, [x29, #-64]
714 134: ea 03 09 2a mov w10, w9
715 138: 68 62 00 f9 str x8, [x19, #192]
716 13c: 6a be 00 b9 str w10, [x19, #188]
717 140: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x14c>
718 144: 01 00 00 14 b #4 <nonleaf_call+0x118>
719 148: 68 be 40 b9 ldr w8, [x19, #188]
720 14c: 09 21 00 11 add w9, w8, #8
721 150: 6a 62 40 f9 ldr x10, [x19, #192]
722 154: 49 01 00 b9 str w9, [x10]
723 158: 29 01 00 71 subs w9, w9, #0
724 15c: 69 ba 00 b9 str w9, [x19, #184]
725 160: ec 00 00 54 b.gt #28 <nonleaf_call+0x14c>
726 164: 01 00 00 14 b #4 <nonleaf_call+0x138>
727 168: a8 03 5b f8 ldur x8, [x29, #-80]
728 16c: 69 be 40 b9 ldr w9, [x19, #188]
729 170: 08 c1 29 8b add x8, x8, w9, sxtw
730 174: 68 5a 00 f9 str x8, [x19, #176]
731 178: 06 00 00 14 b #24 <nonleaf_call+0x160>
732 17c: a8 83 5a f8 ldur x8, [x29, #-88]
733 180: 09 21 00 91 add x9, x8, #8
734 184: a9 83 1a f8 stur x9, [x29, #-88]
735 188: 68 5a 00 f9 str x8, [x19, #176]
736 18c: 01 00 00 14 b #4 <nonleaf_call+0x160>
737 190: 68 5a 40 f9 ldr x8, [x19, #176]
738 194: 09 01 40 b9 ldr w9, [x8]
739 198: a9 43 1e b8 stur w9, [x29, #-28]
740 19c: a8 63 01 d1 sub x8, x29, #88
741 1a0: 08 61 00 91 add x8, x8, #24
742 1a4: a9 03 5c b8 ldur w9, [x29, #-64]
743 1a8: ea 03 09 2a mov w10, w9
744 1ac: 68 56 00 f9 str x8, [x19, #168]
745 1b0: 6a a6 00 b9 str w10, [x19, #164]
746 1b4: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x1c0>
747 1b8: 01 00 00 14 b #4 <nonleaf_call+0x18c>
748 1bc: 68 a6 40 b9 ldr w8, [x19, #164]
749 1c0: 09 21 00 11 add w9, w8, #8
750 1c4: 6a 56 40 f9 ldr x10, [x19, #168]
751 1c8: 49 01 00 b9 str w9, [x10]
752 1cc: 29 01 00 71 subs w9, w9, #0
753 1d0: 69 a2 00 b9 str w9, [x19, #160]
754 1d4: ec 00 00 54 b.gt #28 <nonleaf_call+0x1c0>
755 1d8: 01 00 00 14 b #4 <nonleaf_call+0x1ac>
756 1dc: a8 03 5b f8 ldur x8, [x29, #-80]
757 1e0: 69 a6 40 b9 ldr w9, [x19, #164]
758 1e4: 08 c1 29 8b add x8, x8, w9, sxtw
759 1e8: 68 4e 00 f9 str x8, [x19, #152]
760 1ec: 06 00 00 14 b #24 <nonleaf_call+0x1d4>
761 1f0: a8 83 5a f8 ldur x8, [x29, #-88]
762 1f4: 09 21 00 91 add x9, x8, #8
763 1f8: a9 83 1a f8 stur x9, [x29, #-88]
764 1fc: 68 4e 00 f9 str x8, [x19, #152]
765 200: 01 00 00 14 b #4 <nonleaf_call+0x1d4>
766 204: 68 4e 40 f9 ldr x8, [x19, #152]
767 208: 09 01 40 b9 ldr w9, [x8]
768 20c: a9 03 1e b8 stur w9, [x29, #-32]
769 210: a8 63 01 d1 sub x8, x29, #88
770 214: 08 61 00 91 add x8, x8, #24
771 218: a9 03 5c b8 ldur w9, [x29, #-64]
772 21c: ea 03 09 2a mov w10, w9
773 220: 68 4a 00 f9 str x8, [x19, #144]
774 224: 6a 8e 00 b9 str w10, [x19, #140]
775 228: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x234>
776 22c: 01 00 00 14 b #4 <nonleaf_call+0x200>
777 230: 68 8e 40 b9 ldr w8, [x19, #140]
778 234: 09 21 00 11 add w9, w8, #8
779 238: 6a 4a 40 f9 ldr x10, [x19, #144]
780 23c: 49 01 00 b9 str w9, [x10]
781 240: 29 01 00 71 subs w9, w9, #0
782 244: 69 8a 00 b9 str w9, [x19, #136]
783 248: ec 00 00 54 b.gt #28 <nonleaf_call+0x234>
784 24c: 01 00 00 14 b #4 <nonleaf_call+0x220>
785 250: a8 03 5b f8 ldur x8, [x29, #-80]
786 254: 69 8e 40 b9 ldr w9, [x19, #140]
787 258: 08 c1 29 8b add x8, x8, w9, sxtw
788 25c: 68 42 00 f9 str x8, [x19, #128]
789 260: 06 00 00 14 b #24 <nonleaf_call+0x248>
790 264: a8 83 5a f8 ldur x8, [x29, #-88]
791 268: 09 21 00 91 add x9, x8, #8
792 26c: a9 83 1a f8 stur x9, [x29, #-88]
793 270: 68 42 00 f9 str x8, [x19, #128]
794 274: 01 00 00 14 b #4 <nonleaf_call+0x248>
795 278: 68 42 40 f9 ldr x8, [x19, #128]
796 27c: 09 01 40 b9 ldr w9, [x8]
797 280: a9 c3 1d b8 stur w9, [x29, #-36]
798 284: a8 63 01 d1 sub x8, x29, #88
799 288: 08 71 00 91 add x8, x8, #28
800 28c: a9 43 5c b8 ldur w9, [x29, #-60]
801 290: ea 03 09 2a mov w10, w9
802 294: 68 3e 00 f9 str x8, [x19, #120]
803 298: 6a 76 00 b9 str w10, [x19, #116]
804 29c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8>
805 2a0: 01 00 00 14 b #4 <nonleaf_call+0x274>
806 2a4: 68 76 40 b9 ldr w8, [x19, #116]
807 2a8: 09 41 00 11 add w9, w8, #16
808 2ac: 6a 3e 40 f9 ldr x10, [x19, #120]
809 2b0: 49 01 00 b9 str w9, [x10]
810 2b4: 29 01 00 71 subs w9, w9, #0
811 2b8: 69 72 00 b9 str w9, [x19, #112]
812 2bc: ec 00 00 54 b.gt #28 <nonleaf_call+0x2a8>
813 2c0: 01 00 00 14 b #4 <nonleaf_call+0x294>
814 2c4: a8 83 5b f8 ldur x8, [x29, #-72]
815 2c8: 69 76 40 b9 ldr w9, [x19, #116]
816 2cc: 08 c1 29 8b add x8, x8, w9, sxtw
817 2d0: 68 36 00 f9 str x8, [x19, #104]
818 2d4: 06 00 00 14 b #24 <nonleaf_call+0x2bc>
819 2d8: a8 83 5a f8 ldur x8, [x29, #-88]
820 2dc: 09 21 00 91 add x9, x8, #8
821 2e0: a9 83 1a f8 stur x9, [x29, #-88]
822 2e4: 68 36 00 f9 str x8, [x19, #104]
823 2e8: 01 00 00 14 b #4 <nonleaf_call+0x2bc>
824 2ec: 68 36 40 f9 ldr x8, [x19, #104]
825 2f0: 00 01 40 bd ldr s0, [x8]
826 2f4: a0 83 1c bc stur s0, [x29, #-56]
827 2f8: a8 63 01 d1 sub x8, x29, #88
828 2fc: 08 61 00 91 add x8, x8, #24
829 300: a9 03 5c b8 ldur w9, [x29, #-64]
830 304: ea 03 09 2a mov w10, w9
831 308: 68 32 00 f9 str x8, [x19, #96]
832 30c: 6a 5e 00 b9 str w10, [x19, #92]
833 310: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x31c>
834 314: 01 00 00 14 b #4 <nonleaf_call+0x2e8>
835 318: 68 5e 40 b9 ldr w8, [x19, #92]
836 31c: 09 21 00 11 add w9, w8, #8
837 320: 6a 32 40 f9 ldr x10, [x19, #96]
838 324: 49 01 00 b9 str w9, [x10]
839 328: 29 01 00 71 subs w9, w9, #0
840 32c: 69 5a 00 b9 str w9, [x19, #88]
841 330: ec 00 00 54 b.gt #28 <nonleaf_call+0x31c>
842 334: 01 00 00 14 b #4 <nonleaf_call+0x308>
843 338: a8 03 5b f8 ldur x8, [x29, #-80]
844 33c: 69 5e 40 b9 ldr w9, [x19, #92]
845 340: 08 c1 29 8b add x8, x8, w9, sxtw
846 344: 68 2a 00 f9 str x8, [x19, #80]
847 348: 06 00 00 14 b #24 <nonleaf_call+0x330>
848 34c: a8 83 5a f8 ldur x8, [x29, #-88]
849 350: 09 21 00 91 add x9, x8, #8
850 354: a9 83 1a f8 stur x9, [x29, #-88]
851 358: 68 2a 00 f9 str x8, [x19, #80]
852 35c: 01 00 00 14 b #4 <nonleaf_call+0x330>
853 360: 68 2a 40 f9 ldr x8, [x19, #80]
854 364: 09 01 40 b9 ldr w9, [x8]
855 368: a9 83 1d b8 stur w9, [x29, #-40]
856 36c: a8 63 01 d1 sub x8, x29, #88
857 370: 08 61 00 91 add x8, x8, #24
858 374: a9 03 5c b8 ldur w9, [x29, #-64]
859 378: ea 03 09 2a mov w10, w9
860 37c: 68 26 00 f9 str x8, [x19, #72]
861 380: 6a 46 00 b9 str w10, [x19, #68]
862 384: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x390>
863 388: 01 00 00 14 b #4 <nonleaf_call+0x35c>
864 38c: 68 46 40 b9 ldr w8, [x19, #68]
865 390: 09 21 00 11 add w9, w8, #8
866 394: 6a 26 40 f9 ldr x10, [x19, #72]
867 398: 49 01 00 b9 str w9, [x10]
868 39c: 29 01 00 71 subs w9, w9, #0
869 3a0: 69 42 00 b9 str w9, [x19, #64]
870 3a4: ec 00 00 54 b.gt #28 <nonleaf_call+0x390>
871 3a8: 01 00 00 14 b #4 <nonleaf_call+0x37c>
872 3ac: a8 03 5b f8 ldur x8, [x29, #-80]
873 3b0: 69 46 40 b9 ldr w9, [x19, #68]
874 3b4: 08 c1 29 8b add x8, x8, w9, sxtw
875 3b8: 68 1e 00 f9 str x8, [x19, #56]
876 3bc: 06 00 00 14 b #24 <nonleaf_call+0x3a4>
877 3c0: a8 83 5a f8 ldur x8, [x29, #-88]
878 3c4: 09 21 00 91 add x9, x8, #8
879 3c8: a9 83 1a f8 stur x9, [x29, #-88]
880 3cc: 68 1e 00 f9 str x8, [x19, #56]
881 3d0: 01 00 00 14 b #4 <nonleaf_call+0x3a4>
882 3d4: 68 1e 40 f9 ldr x8, [x19, #56]
883 3d8: 09 01 40 b9 ldr w9, [x8]
884 3dc: a9 43 1d b8 stur w9, [x29, #-44]
885 3e0: a8 63 01 d1 sub x8, x29, #88
886 3e4: 08 61 00 91 add x8, x8, #24
887 3e8: a9 03 5c b8 ldur w9, [x29, #-64]
888 3ec: ea 03 09 2a mov w10, w9
889 3f0: 68 1a 00 f9 str x8, [x19, #48]
890 3f4: 6a 2e 00 b9 str w10, [x19, #44]
891 3f8: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x404>
892 3fc: 01 00 00 14 b #4 <nonleaf_call+0x3d0>
893 400: 68 2e 40 b9 ldr w8, [x19, #44]
894 404: 09 21 00 11 add w9, w8, #8
895 408: 6a 1a 40 f9 ldr x10, [x19, #48]
896 40c: 49 01 00 b9 str w9, [x10]
897 410: 29 01 00 71 subs w9, w9, #0
898 414: 69 2a 00 b9 str w9, [x19, #40]
899 418: ec 00 00 54 b.gt #28 <nonleaf_call+0x404>
900 41c: 01 00 00 14 b #4 <nonleaf_call+0x3f0>
901 420: a8 03 5b f8 ldur x8, [x29, #-80]
902 424: 69 2e 40 b9 ldr w9, [x19, #44]
903 428: 08 c1 29 8b add x8, x8, w9, sxtw
904 42c: 68 12 00 f9 str x8, [x19, #32]
905 430: 06 00 00 14 b #24 <nonleaf_call+0x418>
906 434: a8 83 5a f8 ldur x8, [x29, #-88]
907 438: 09 21 00 91 add x9, x8, #8
908 43c: a9 83 1a f8 stur x9, [x29, #-88]
909 440: 68 12 00 f9 str x8, [x19, #32]
910 444: 01 00 00 14 b #4 <nonleaf_call+0x418>
911 448: 68 12 40 f9 ldr x8, [x19, #32]
912 44c: 09 01 40 b9 ldr w9, [x8]
913 450: a9 03 1d b8 stur w9, [x29, #-48]
914 454: a8 63 01 d1 sub x8, x29, #88
915 458: 08 61 00 91 add x8, x8, #24
916 45c: a9 03 5c b8 ldur w9, [x29, #-64]
917 460: ea 03 09 2a mov w10, w9
918 464: 68 0e 00 f9 str x8, [x19, #24]
919 468: 6a 16 00 b9 str w10, [x19, #20]
920 46c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x478>
921 470: 01 00 00 14 b #4 <nonleaf_call+0x444>
922 474: 68 16 40 b9 ldr w8, [x19, #20]
923 478: 09 21 00 11 add w9, w8, #8
924 47c: 6a 0e 40 f9 ldr x10, [x19, #24]
925 480: 49 01 00 b9 str w9, [x10]
926 484: 29 01 00 71 subs w9, w9, #0
927 488: 69 12 00 b9 str w9, [x19, #16]
928 48c: ec 00 00 54 b.gt #28 <nonleaf_call+0x478>
929 490: 01 00 00 14 b #4 <nonleaf_call+0x464>
930 494: a8 03 5b f8 ldur x8, [x29, #-80]
931 498: 69 16 40 b9 ldr w9, [x19, #20]
932 49c: 08 c1 29 8b add x8, x8, w9, sxtw
933 4a0: 68 06 00 f9 str x8, [x19, #8]
934 4a4: 06 00 00 14 b #24 <nonleaf_call+0x48c>
935 4a8: a8 83 5a f8 ldur x8, [x29, #-88]
936 4ac: 09 21 00 91 add x9, x8, #8
937 4b0: a9 83 1a f8 stur x9, [x29, #-88]
938 4b4: 68 06 00 f9 str x8, [x19, #8]
939 4b8: 01 00 00 14 b #4 <nonleaf_call+0x48c>
940 4bc: 68 06 40 f9 ldr x8, [x19, #8]
941 4c0: 09 01 40 b9 ldr w9, [x8]
942 4c4: a9 c3 1c b8 stur w9, [x29, #-52]
943 4c8: e8 03 00 91 mov x8, sp
944 4cc: 0a 81 03 f1 subs x10, x8, #224
945 4d0: 5f 01 00 91 mov sp, x10
946 4d4: 89 09 80 52 mov w9, #76
947 4d8: 09 01 12 38 sturb w9, [x8, #-224]
948 4dc: a0 83 5e b8 ldur w0, [x29, #-24]
949 4e0: a1 43 5e b8 ldur w1, [x29, #-28]
950 4e4: a2 03 5e b8 ldur w2, [x29, #-32]
951 4e8: a3 c3 5d b8 ldur w3, [x29, #-36]
952 4ec: a0 83 5c bc ldur s0, [x29, #-56]
953 4f0: a4 83 5d b8 ldur w4, [x29, #-40]
954 4f4: a5 43 5d b8 ldur w5, [x29, #-44]
955 4f8: a6 03 5d b8 ldur w6, [x29, #-48]
956 4fc: a7 c3 5c b8 ldur w7, [x29, #-52]
957 500: c0 fe ff 97 bl #-1280 <leaf_call>
958 504: bf 43 00 d1 sub sp, x29, #16
959 508: fd 7b 41 a9 ldp x29, x30, [sp, #16]
960 50c: fc 4f c2 a8 ldp x28, x19, [sp], #32
961 510: c0 03 5f d6 ret
962
963 0000000000000514 main:
964 514: ff 83 00 d1 sub sp, sp, #32
965 518: fd 7b 01 a9 stp x29, x30, [sp, #16]
966 51c: fd 43 00 91 add x29, sp, #16
967 520: 08 00 80 52 mov w8, #0
968 524: e1 03 00 32 orr w1, wzr, #0x1
969 528: e2 03 1f 32 orr w2, wzr, #0x2
970 52c: e3 07 00 32 orr w3, wzr, #0x3
971 530: e4 03 1e 32 orr w4, wzr, #0x4
972 534: 89 02 e8 d2 mov x9, #4617315517961601024
973 538: 20 01 67 9e fmov d0, x9
974 53c: e5 07 1f 32 orr w5, wzr, #0x6
975 540: e6 0b 00 32 orr w6, wzr, #0x7
976 544: e7 03 1d 32 orr w7, wzr, #0x8
977 548: 2a 01 80 52 mov w10, #9
978 54c: bf c3 1f b8 stur wzr, [x29, #-4]
979 550: e0 03 08 2a mov w0, w8
980 554: e9 03 00 91 mov x9, sp
981 558: 2a 01 00 b9 str w10, [x9]
982 55c: e8 0b 00 b9 str w8, [sp, #8]
983 560: b4 fe ff 97 bl #-1328 <nonleaf_call>
984 564: e0 0b 40 b9 ldr w0, [sp, #8]
985 568: fd 7b 41 a9 ldp x29, x30, [sp, #16]
986 56c: ff 83 00 91 add sp, sp, #32
987 570: c0 03 5f d6 ret
988
989 ; vim: ft=asm68k
990