Mercurial > pub > dyncall > dyncall
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 |