Mercurial > pub > dyncall > dyncall
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/disas_examples/arm64.aapcs.disas Fri Nov 22 23:08:59 2019 +0100 @@ -0,0 +1,990 @@ +; #include <stdlib.h> +; +; void leaf_call(int b, int c, int d, int e, int f, int g, int h) +; { +; } +; +; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h) +; { +; /* use some local data */ +; *(char*)alloca(220) = 'L'; +; leaf_call(b, c, d, e, f, g, h); +; } +; +; int main() +; { +; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7); +; return 0; +; } + + + +; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0 + +leaf_call: + 0: ff 83 00 d1 sub sp, sp, #32 + 4: e0 1f 00 b9 str w0, [sp, #28] + 8: e1 1b 00 b9 str w1, [sp, #24] + c: e2 17 00 b9 str w2, [sp, #20] + 10: e3 13 00 b9 str w3, [sp, #16] + 14: e4 0f 00 b9 str w4, [sp, #12] + 18: e5 0b 00 b9 str w5, [sp, #8] + 1c: e6 07 00 b9 str w6, [sp, #4] + 20: ff 83 00 91 add sp, sp, #32 + 24: c0 03 5f d6 ret + +nonleaf_call: + 28: ff 83 04 d1 sub sp, sp, #288 ; | includes alloca()'d static space, already + 2c: fc 83 00 f9 str x28, [sp, #256] ; | (unsure why r28 is preserved @@@) + 30: fd 7b 11 a9 stp x29, x30, [sp, #272] ; | prolog + 34: fd 43 04 91 add x29, sp, #272 ; | adjust/set frame pointer (since sp was modified first) + 38: 88 09 80 52 mov w8, #76 ; 'L' -> w8 + 3c: a0 c3 1e b8 stur w0, [x29, #-20] ; in arg 0 -> local area (as temp store) + 40: a1 83 1e b8 stur w1, [x29, #-24] ; in arg 1 -> local area (as temp store) + 44: a2 43 1e b8 stur w2, [x29, #-28] ; in arg 2 -> local area (as temp store) + 48: a3 03 1e b8 stur w3, [x29, #-32] ; in arg 3 -> local area (as temp store) + 4c: a4 c3 1d b8 stur w4, [x29, #-36] ; in arg 4 -> local area (as temp store) + 50: a5 83 1d b8 stur w5, [x29, #-40] ; in arg 5 -> local area (as temp store) + 54: a6 43 1d b8 stur w6, [x29, #-44] ; in arg 6 -> local area (as temp store) + 58: a7 03 1d b8 stur w7, [x29, #-48] ; in arg 7 -> local area (as temp store) + 5c: e8 03 00 39 strb w8, [sp] ; place 'L' on top of stack (at alloca()'d addr) + 60: a0 83 5e b8 ldur w0, [x29, #-24] ; arg 0 + 64: a1 43 5e b8 ldur w1, [x29, #-28] ; arg 1 + 68: a2 03 5e b8 ldur w2, [x29, #-32] ; arg 2 + 6c: a3 c3 5d b8 ldur w3, [x29, #-36] ; arg 3 + 70: a4 83 5d b8 ldur w4, [x29, #-40] ; arg 4 + 74: a5 43 5d b8 ldur w5, [x29, #-44] ; arg 5 + 78: a6 03 5d b8 ldur w6, [x29, #-48] ; arg 6 + 7c: e1 ff ff 97 bl #-124 ; return address -> r30/lr, and call + 80: fd 7b 51 a9 ldp x29, x30, [sp, #272] ; | + 84: fc 83 40 f9 ldr x28, [sp, #256] ; | + 88: ff 83 04 91 add sp, sp, #288 ; | epilog + 8c: c0 03 5f d6 ret ; | + +main: + 90: ff 83 00 d1 sub sp, sp, #32 ; | + 94: fd 7b 01 a9 stp x29, x30, [sp, #16] ; | prolog + 98: fd 43 00 91 add x29, sp, #16 ; | + 9c: 08 00 80 52 mov w8, #0 ; clearing r8 (indirect result location pointer) + a0: e1 03 00 32 orr w1, wzr, #0x1 ; arg 1 + a4: e2 03 1f 32 orr w2, wzr, #0x2 ; arg 2 + a8: e3 07 00 32 orr w3, wzr, #0x3 ; arg 3 + ac: e4 03 1e 32 orr w4, wzr, #0x4 ; arg 4 + b0: a5 00 80 52 mov w5, #5 ; arg 5 + b4: e6 07 1f 32 orr w6, wzr, #0x6 ; arg 6 + b8: e7 0b 00 32 orr w7, wzr, #0x7 ; arg 7 + bc: bf c3 1f b8 stur wzr, [x29, #-4] ; unsure... store a zero in local area@@@ + c0: e0 03 08 2a mov w0, w8 ; arg 0 (= 0 set in w8, above) + c4: e8 0b 00 b9 str w8, [sp, #8] ; temp storing 0 in local area + c8: d8 ff ff 97 bl #-160 ; return address -> r30/lr, and call + cc: e0 0b 40 b9 ldr w0, [sp, #8] ; return value (unsure why not just using immediate @@@) + d0: fd 7b 41 a9 ldp x29, x30, [sp, #16] ; | + d4: ff 83 00 91 add sp, sp, #32 ; | epilog + d8: c0 03 5f d6 ret ; | + + + +; ---------- same with more args so stack is also used ----------> + +; #include <stdlib.h> +; +; void leaf_call(int b, int c, int d, int e, int f, int g, int h, int i, int j) +; { +; } +; +; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) +; { +; /* use some local data */ +; *(char*)alloca(220) = 'L'; +; leaf_call(b, c, d, e, f, g, h, i, j); +; } +; +; int main() +; { +; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); +; return 0; +; } + + + +; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0 + +0000000000000000 leaf_call: + 0: ff c3 00 d1 sub sp, sp, #48 + 4: e8 33 40 b9 ldr w8, [sp, #48] + 8: e0 2f 00 b9 str w0, [sp, #44] + c: e1 2b 00 b9 str w1, [sp, #40] + 10: e2 27 00 b9 str w2, [sp, #36] + 14: e3 23 00 b9 str w3, [sp, #32] + 18: e4 1f 00 b9 str w4, [sp, #28] + 1c: e5 1b 00 b9 str w5, [sp, #24] + 20: e6 17 00 b9 str w6, [sp, #20] + 24: e7 13 00 b9 str w7, [sp, #16] + 28: e8 0f 00 b9 str w8, [sp, #12] + 2c: ff c3 00 91 add sp, sp, #48 + 30: c0 03 5f d6 ret + +0000000000000034 nonleaf_call: + 34: ff 03 05 d1 sub sp, sp, #320 ; | includes alloca()'d static space, already + 38: fc 93 00 f9 str x28, [sp, #288] ; | (unsure why r28 is preserved @@@) + 3c: fd 7b 13 a9 stp x29, x30, [sp, #304] ; | prolog + 40: fd c3 04 91 add x29, sp, #304 ; / adjust/set frame pointer (since sp was modified first) + 44: a8 13 40 b9 ldr w8, [x29, #16] ; \ + 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 + 4c: 8a 09 80 52 mov w10, #76 ; 'L' -> w10 + 50: a0 c3 1e b8 stur w0, [x29, #-20] ; | + 54: a1 83 1e b8 stur w1, [x29, #-24] ; | + 58: a2 43 1e b8 stur w2, [x29, #-28] ; | + 5c: a3 03 1e b8 stur w3, [x29, #-32] ; | + 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 ... + 64: a5 83 1d b8 stur w5, [x29, #-40] ; | + 68: a6 43 1d b8 stur w6, [x29, #-44] ; | + 6c: a7 03 1d b8 stur w7, [x29, #-48] ; | + 70: a8 c3 1c b8 stur w8, [x29, #-52] ; | + 74: a9 83 1c b8 stur w9, [x29, #-56] ; | + 78: ea 43 00 39 strb w10, [sp, #16] ; 'L' -> local area (alloca()'d memory) + 7c: a0 83 5e b8 ldur w0, [x29, #-24] ; arg 0 + 80: a1 43 5e b8 ldur w1, [x29, #-28] ; arg 1 + 84: a2 03 5e b8 ldur w2, [x29, #-32] ; arg 2 + 88: a3 c3 5d b8 ldur w3, [x29, #-36] ; arg 3 + 8c: a4 83 5d b8 ldur w4, [x29, #-40] ; arg 4 + 90: a5 43 5d b8 ldur w5, [x29, #-44] ; arg 5 + 94: a6 03 5d b8 ldur w6, [x29, #-48] ; arg 6 + 98: a7 c3 5c b8 ldur w7, [x29, #-52] ; arg 7 + 9c: a8 83 5c b8 ldur w8, [x29, #-56] ; arg 8 -> w8, and ... + a0: eb 03 00 91 mov x11, sp ; ... with help of x11 (why?) ... + a4: 68 01 00 b9 str w8, [x11] ; ... "pushed" onto to of stack + a8: d6 ff ff 97 bl #-168 <leaf_call> ; return address -> r30/lr, and call + ac: fd 7b 53 a9 ldp x29, x30, [sp, #304] ; | + b0: fc 93 40 f9 ldr x28, [sp, #288] ; | + b4: ff 03 05 91 add sp, sp, #320 ; | epilog + b8: c0 03 5f d6 ret ; | + +00000000000000bc main: + bc: ff c3 00 d1 sub sp, sp, #48 ; | + c0: fd 7b 02 a9 stp x29, x30, [sp, #32] ; | prolog + c4: fd 83 00 91 add x29, sp, #32 ; | + c8: 08 00 80 52 mov w8, #0 ; clearing r8 (indirect result location pointer) + cc: e1 03 00 32 orr w1, wzr, #0x1 ; arg 1 + d0: e2 03 1f 32 orr w2, wzr, #0x2 ; arg 2 + d4: e3 07 00 32 orr w3, wzr, #0x3 ; arg 3 + d8: e4 03 1e 32 orr w4, wzr, #0x4 ; arg 4 + dc: a5 00 80 52 mov w5, #5 ; arg 5 + e0: e6 07 1f 32 orr w6, wzr, #0x6 ; arg 6 + e4: e7 0b 00 32 orr w7, wzr, #0x7 ; arg 7 + e8: e9 03 1d 32 orr w9, wzr, #0x8 ; arg 8 -> r9 + ec: 2a 01 80 52 mov w10, #9 ; arg 9 -> r10 + f0: bf c3 1f b8 stur wzr, [x29, #-4] ; unsure... store a zero in local area@@@ + f4: e0 03 08 2a mov w0, w8 ; arg 0 (= 0 set in w8, above) + f8: eb 03 00 91 mov x11, sp ; use sp in x11 (why?), to ... + fc: 69 01 00 b9 str w9, [x11] ; ... place arg 8 on top of stack + 100: eb 03 00 91 mov x11, sp ; use sp in x11 (why?), to ... (set again, pointlessly) + 104: 6a 09 00 b9 str w10, [x11, #8] ; ... place arg 9 on stack (next to arg 8) + 108: a8 83 1f b8 stur w8, [x29, #-8] ; temp storing 0 in local area @@@ why? + 10c: ca ff ff 97 bl #-216 <nonleaf_call> ; return address -> r30/lr, and call + 110: a0 83 5f b8 ldur w0, [x29, #-8] ; | + 114: fd 7b 42 a9 ldp x29, x30, [sp, #32] ; | + 118: ff c3 00 91 add sp, sp, #48 ; | epilog + 11c: c0 03 5f d6 ret ; | + + + +; ---------- for spilling ----------> + +; #include <stdlib.h> +; #include <stdarg.h> +; +; void leaf_call(int b, int c, int d, int e, int f, int g, int h, int i, int j) +; { +; } +; +; void nonleaf_call(int a, ...) +; { +; int b,c,d,e,f,g,h,i,j; +; va_list ap; +; va_start(ap, a); +; b = va_arg(ap, int); +; c = va_arg(ap, int); +; d = va_arg(ap, int); +; e = va_arg(ap, int); +; f = va_arg(ap, int); +; g = va_arg(ap, int); +; h = va_arg(ap, int); +; i = va_arg(ap, int); +; j = va_arg(ap, int); +; +; /* use some local data */ +; *(char*)alloca(220) = 'L'; +; leaf_call(b, c, d, e, f, g, h, i, j); +; } +; +; int main() +; { +; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); +; return 0; +; } + + + +; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0 + +0000000000000000 leaf_call: + 0: ff c3 00 d1 sub sp, sp, #48 + 4: e8 33 40 b9 ldr w8, [sp, #48] + 8: e0 2f 00 b9 str w0, [sp, #44] + c: e1 2b 00 b9 str w1, [sp, #40] + 10: e2 27 00 b9 str w2, [sp, #36] + 14: e3 23 00 b9 str w3, [sp, #32] + 18: e4 1f 00 b9 str w4, [sp, #28] + 1c: e5 1b 00 b9 str w5, [sp, #24] + 20: e6 17 00 b9 str w6, [sp, #20] + 24: e7 13 00 b9 str w7, [sp, #16] + 28: e8 0f 00 b9 str w8, [sp, #12] + 2c: ff c3 00 91 add sp, sp, #48 + 30: c0 03 5f d6 ret + +0000000000000034 nonleaf_call: + 34: fc 4f be a9 stp x28, x19, [sp, #-32]! ; | + 38: fd 7b 01 a9 stp x29, x30, [sp, #16] ; | + 3c: fd 43 00 91 add x29, sp, #16 ; | prolog + 40: ff 83 07 d1 sub sp, sp, #480 ; | + 44: f3 03 00 91 mov x19, sp + 48: 67 56 80 3d str q7, [x19, #336] ; | + 4c: 66 52 80 3d str q6, [x19, #320] ; | + 50: 65 4e 80 3d str q5, [x19, #304] ; | + 54: 64 4a 80 3d str q4, [x19, #288] ; | + 58: 63 46 80 3d str q3, [x19, #272] ; | spill all flot regs (on top of spilled integers, below + 5c: 62 42 80 3d str q2, [x19, #256] ; | + 60: 61 3e 80 3d str q1, [x19, #240] ; | + 64: 60 3a 80 3d str q0, [x19, #224] ; / + 68: a7 03 1a f8 stur x7, [x29, #-96] ; \ + 6c: a6 83 19 f8 stur x6, [x29, #-104] ; | + 70: a5 03 19 f8 stur x5, [x29, #-112] ; | + 74: a4 83 18 f8 stur x4, [x29, #-120] ; | spill integer args (adjacent to prev frame's param area) + 78: a3 03 18 f8 stur x3, [x29, #-128] ; | note: only needed ones are spilled + 7c: a2 83 17 f8 stur x2, [x29, #-136] ; | + 80: a1 03 17 f8 stur x1, [x29, #-144] ; | + 84: a0 c3 1e b8 stur w0, [x29, #-20] + 88: e0 63 19 32 orr w0, wzr, #0xffffff80 + 8c: a0 43 1c b8 stur w0, [x29, #-60] + 90: e0 06 80 12 mov w0, #-56 + 94: a0 03 1c b8 stur w0, [x29, #-64] + 98: 61 82 03 91 add x1, x19, #224 + 9c: 21 00 02 91 add x1, x1, #128 + a0: a1 83 1b f8 stur x1, [x29, #-72] + a4: a1 43 02 d1 sub x1, x29, #144 + a8: 21 e0 00 91 add x1, x1, #56 + ac: a1 03 1b f8 stur x1, [x29, #-80] + b0: a1 43 00 91 add x1, x29, #16 + b4: a1 83 1a f8 stur x1, [x29, #-88] + b8: a1 63 01 d1 sub x1, x29, #88 + bc: 21 60 00 91 add x1, x1, #24 + c0: a0 03 5c b8 ldur w0, [x29, #-64] + c4: e8 03 00 2a mov w8, w0 + c8: 61 6e 00 f9 str x1, [x19, #216] + cc: 68 d6 00 b9 str w8, [x19, #212] + d0: e0 01 f8 36 tbz w0, #31, #60 <nonleaf_call+0xd8> + d4: 01 00 00 14 b #4 <nonleaf_call+0xa4> + d8: 68 d6 40 b9 ldr w8, [x19, #212] + dc: 09 21 00 11 add w9, w8, #8 + e0: 6a 6e 40 f9 ldr x10, [x19, #216] + e4: 49 01 00 b9 str w9, [x10] + e8: 29 01 00 71 subs w9, w9, #0 + ec: 69 d2 00 b9 str w9, [x19, #208] + f0: ec 00 00 54 b.gt #28 <nonleaf_call+0xd8> + f4: 01 00 00 14 b #4 <nonleaf_call+0xc4> + f8: a8 03 5b f8 ldur x8, [x29, #-80] + fc: 69 d6 40 b9 ldr w9, [x19, #212] + 100: 08 c1 29 8b add x8, x8, w9, sxtw + 104: 68 66 00 f9 str x8, [x19, #200] + 108: 06 00 00 14 b #24 <nonleaf_call+0xec> + 10c: a8 83 5a f8 ldur x8, [x29, #-88] + 110: 09 21 00 91 add x9, x8, #8 + 114: a9 83 1a f8 stur x9, [x29, #-88] + 118: 68 66 00 f9 str x8, [x19, #200] + 11c: 01 00 00 14 b #4 <nonleaf_call+0xec> + 120: 68 66 40 f9 ldr x8, [x19, #200] + 124: 09 01 40 b9 ldr w9, [x8] + 128: a9 83 1e b8 stur w9, [x29, #-24] + 12c: a8 63 01 d1 sub x8, x29, #88 + 130: 08 61 00 91 add x8, x8, #24 + 134: a9 03 5c b8 ldur w9, [x29, #-64] + 138: ea 03 09 2a mov w10, w9 + 13c: 68 62 00 f9 str x8, [x19, #192] + 140: 6a be 00 b9 str w10, [x19, #188] + 144: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x14c> + 148: 01 00 00 14 b #4 <nonleaf_call+0x118> + 14c: 68 be 40 b9 ldr w8, [x19, #188] + 150: 09 21 00 11 add w9, w8, #8 + 154: 6a 62 40 f9 ldr x10, [x19, #192] + 158: 49 01 00 b9 str w9, [x10] + 15c: 29 01 00 71 subs w9, w9, #0 + 160: 69 ba 00 b9 str w9, [x19, #184] + 164: ec 00 00 54 b.gt #28 <nonleaf_call+0x14c> + 168: 01 00 00 14 b #4 <nonleaf_call+0x138> + 16c: a8 03 5b f8 ldur x8, [x29, #-80] + 170: 69 be 40 b9 ldr w9, [x19, #188] + 174: 08 c1 29 8b add x8, x8, w9, sxtw + 178: 68 5a 00 f9 str x8, [x19, #176] + 17c: 06 00 00 14 b #24 <nonleaf_call+0x160> + 180: a8 83 5a f8 ldur x8, [x29, #-88] + 184: 09 21 00 91 add x9, x8, #8 + 188: a9 83 1a f8 stur x9, [x29, #-88] + 18c: 68 5a 00 f9 str x8, [x19, #176] + 190: 01 00 00 14 b #4 <nonleaf_call+0x160> + 194: 68 5a 40 f9 ldr x8, [x19, #176] + 198: 09 01 40 b9 ldr w9, [x8] + 19c: a9 43 1e b8 stur w9, [x29, #-28] + 1a0: a8 63 01 d1 sub x8, x29, #88 + 1a4: 08 61 00 91 add x8, x8, #24 + 1a8: a9 03 5c b8 ldur w9, [x29, #-64] + 1ac: ea 03 09 2a mov w10, w9 + 1b0: 68 56 00 f9 str x8, [x19, #168] + 1b4: 6a a6 00 b9 str w10, [x19, #164] + 1b8: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x1c0> + 1bc: 01 00 00 14 b #4 <nonleaf_call+0x18c> + 1c0: 68 a6 40 b9 ldr w8, [x19, #164] + 1c4: 09 21 00 11 add w9, w8, #8 + 1c8: 6a 56 40 f9 ldr x10, [x19, #168] + 1cc: 49 01 00 b9 str w9, [x10] + 1d0: 29 01 00 71 subs w9, w9, #0 + 1d4: 69 a2 00 b9 str w9, [x19, #160] + 1d8: ec 00 00 54 b.gt #28 <nonleaf_call+0x1c0> + 1dc: 01 00 00 14 b #4 <nonleaf_call+0x1ac> + 1e0: a8 03 5b f8 ldur x8, [x29, #-80] + 1e4: 69 a6 40 b9 ldr w9, [x19, #164] + 1e8: 08 c1 29 8b add x8, x8, w9, sxtw + 1ec: 68 4e 00 f9 str x8, [x19, #152] + 1f0: 06 00 00 14 b #24 <nonleaf_call+0x1d4> + 1f4: a8 83 5a f8 ldur x8, [x29, #-88] + 1f8: 09 21 00 91 add x9, x8, #8 + 1fc: a9 83 1a f8 stur x9, [x29, #-88] + 200: 68 4e 00 f9 str x8, [x19, #152] + 204: 01 00 00 14 b #4 <nonleaf_call+0x1d4> + 208: 68 4e 40 f9 ldr x8, [x19, #152] + 20c: 09 01 40 b9 ldr w9, [x8] + 210: a9 03 1e b8 stur w9, [x29, #-32] + 214: a8 63 01 d1 sub x8, x29, #88 + 218: 08 61 00 91 add x8, x8, #24 + 21c: a9 03 5c b8 ldur w9, [x29, #-64] + 220: ea 03 09 2a mov w10, w9 + 224: 68 4a 00 f9 str x8, [x19, #144] + 228: 6a 8e 00 b9 str w10, [x19, #140] + 22c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x234> + 230: 01 00 00 14 b #4 <nonleaf_call+0x200> + 234: 68 8e 40 b9 ldr w8, [x19, #140] + 238: 09 21 00 11 add w9, w8, #8 + 23c: 6a 4a 40 f9 ldr x10, [x19, #144] + 240: 49 01 00 b9 str w9, [x10] + 244: 29 01 00 71 subs w9, w9, #0 + 248: 69 8a 00 b9 str w9, [x19, #136] + 24c: ec 00 00 54 b.gt #28 <nonleaf_call+0x234> + 250: 01 00 00 14 b #4 <nonleaf_call+0x220> + 254: a8 03 5b f8 ldur x8, [x29, #-80] + 258: 69 8e 40 b9 ldr w9, [x19, #140] + 25c: 08 c1 29 8b add x8, x8, w9, sxtw + 260: 68 42 00 f9 str x8, [x19, #128] + 264: 06 00 00 14 b #24 <nonleaf_call+0x248> + 268: a8 83 5a f8 ldur x8, [x29, #-88] + 26c: 09 21 00 91 add x9, x8, #8 + 270: a9 83 1a f8 stur x9, [x29, #-88] + 274: 68 42 00 f9 str x8, [x19, #128] + 278: 01 00 00 14 b #4 <nonleaf_call+0x248> + 27c: 68 42 40 f9 ldr x8, [x19, #128] + 280: 09 01 40 b9 ldr w9, [x8] + 284: a9 c3 1d b8 stur w9, [x29, #-36] + 288: a8 63 01 d1 sub x8, x29, #88 + 28c: 08 61 00 91 add x8, x8, #24 + 290: a9 03 5c b8 ldur w9, [x29, #-64] + 294: ea 03 09 2a mov w10, w9 + 298: 68 3e 00 f9 str x8, [x19, #120] + 29c: 6a 76 00 b9 str w10, [x19, #116] + 2a0: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8> + 2a4: 01 00 00 14 b #4 <nonleaf_call+0x274> + 2a8: 68 76 40 b9 ldr w8, [x19, #116] + 2ac: 09 21 00 11 add w9, w8, #8 + 2b0: 6a 3e 40 f9 ldr x10, [x19, #120] + 2b4: 49 01 00 b9 str w9, [x10] + 2b8: 29 01 00 71 subs w9, w9, #0 + 2bc: 69 72 00 b9 str w9, [x19, #112] + 2c0: ec 00 00 54 b.gt #28 <nonleaf_call+0x2a8> + 2c4: 01 00 00 14 b #4 <nonleaf_call+0x294> + 2c8: a8 03 5b f8 ldur x8, [x29, #-80] + 2cc: 69 76 40 b9 ldr w9, [x19, #116] + 2d0: 08 c1 29 8b add x8, x8, w9, sxtw + 2d4: 68 36 00 f9 str x8, [x19, #104] + 2d8: 06 00 00 14 b #24 <nonleaf_call+0x2bc> + 2dc: a8 83 5a f8 ldur x8, [x29, #-88] + 2e0: 09 21 00 91 add x9, x8, #8 + 2e4: a9 83 1a f8 stur x9, [x29, #-88] + 2e8: 68 36 00 f9 str x8, [x19, #104] + 2ec: 01 00 00 14 b #4 <nonleaf_call+0x2bc> + 2f0: 68 36 40 f9 ldr x8, [x19, #104] + 2f4: 09 01 40 b9 ldr w9, [x8] + 2f8: a9 83 1d b8 stur w9, [x29, #-40] + 2fc: a8 63 01 d1 sub x8, x29, #88 + 300: 08 61 00 91 add x8, x8, #24 + 304: a9 03 5c b8 ldur w9, [x29, #-64] + 308: ea 03 09 2a mov w10, w9 + 30c: 68 32 00 f9 str x8, [x19, #96] + 310: 6a 5e 00 b9 str w10, [x19, #92] + 314: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x31c> + 318: 01 00 00 14 b #4 <nonleaf_call+0x2e8> + 31c: 68 5e 40 b9 ldr w8, [x19, #92] + 320: 09 21 00 11 add w9, w8, #8 + 324: 6a 32 40 f9 ldr x10, [x19, #96] + 328: 49 01 00 b9 str w9, [x10] + 32c: 29 01 00 71 subs w9, w9, #0 + 330: 69 5a 00 b9 str w9, [x19, #88] + 334: ec 00 00 54 b.gt #28 <nonleaf_call+0x31c> + 338: 01 00 00 14 b #4 <nonleaf_call+0x308> + 33c: a8 03 5b f8 ldur x8, [x29, #-80] + 340: 69 5e 40 b9 ldr w9, [x19, #92] + 344: 08 c1 29 8b add x8, x8, w9, sxtw + 348: 68 2a 00 f9 str x8, [x19, #80] + 34c: 06 00 00 14 b #24 <nonleaf_call+0x330> + 350: a8 83 5a f8 ldur x8, [x29, #-88] + 354: 09 21 00 91 add x9, x8, #8 + 358: a9 83 1a f8 stur x9, [x29, #-88] + 35c: 68 2a 00 f9 str x8, [x19, #80] + 360: 01 00 00 14 b #4 <nonleaf_call+0x330> + 364: 68 2a 40 f9 ldr x8, [x19, #80] + 368: 09 01 40 b9 ldr w9, [x8] + 36c: a9 43 1d b8 stur w9, [x29, #-44] + 370: a8 63 01 d1 sub x8, x29, #88 + 374: 08 61 00 91 add x8, x8, #24 + 378: a9 03 5c b8 ldur w9, [x29, #-64] + 37c: ea 03 09 2a mov w10, w9 + 380: 68 26 00 f9 str x8, [x19, #72] + 384: 6a 46 00 b9 str w10, [x19, #68] + 388: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x390> + 38c: 01 00 00 14 b #4 <nonleaf_call+0x35c> + 390: 68 46 40 b9 ldr w8, [x19, #68] + 394: 09 21 00 11 add w9, w8, #8 + 398: 6a 26 40 f9 ldr x10, [x19, #72] + 39c: 49 01 00 b9 str w9, [x10] + 3a0: 29 01 00 71 subs w9, w9, #0 + 3a4: 69 42 00 b9 str w9, [x19, #64] + 3a8: ec 00 00 54 b.gt #28 <nonleaf_call+0x390> + 3ac: 01 00 00 14 b #4 <nonleaf_call+0x37c> + 3b0: a8 03 5b f8 ldur x8, [x29, #-80] + 3b4: 69 46 40 b9 ldr w9, [x19, #68] + 3b8: 08 c1 29 8b add x8, x8, w9, sxtw + 3bc: 68 1e 00 f9 str x8, [x19, #56] + 3c0: 06 00 00 14 b #24 <nonleaf_call+0x3a4> + 3c4: a8 83 5a f8 ldur x8, [x29, #-88] + 3c8: 09 21 00 91 add x9, x8, #8 + 3cc: a9 83 1a f8 stur x9, [x29, #-88] + 3d0: 68 1e 00 f9 str x8, [x19, #56] + 3d4: 01 00 00 14 b #4 <nonleaf_call+0x3a4> + 3d8: 68 1e 40 f9 ldr x8, [x19, #56] + 3dc: 09 01 40 b9 ldr w9, [x8] + 3e0: a9 03 1d b8 stur w9, [x29, #-48] + 3e4: a8 63 01 d1 sub x8, x29, #88 + 3e8: 08 61 00 91 add x8, x8, #24 + 3ec: a9 03 5c b8 ldur w9, [x29, #-64] + 3f0: ea 03 09 2a mov w10, w9 + 3f4: 68 1a 00 f9 str x8, [x19, #48] + 3f8: 6a 2e 00 b9 str w10, [x19, #44] + 3fc: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x404> + 400: 01 00 00 14 b #4 <nonleaf_call+0x3d0> + 404: 68 2e 40 b9 ldr w8, [x19, #44] + 408: 09 21 00 11 add w9, w8, #8 + 40c: 6a 1a 40 f9 ldr x10, [x19, #48] + 410: 49 01 00 b9 str w9, [x10] + 414: 29 01 00 71 subs w9, w9, #0 + 418: 69 2a 00 b9 str w9, [x19, #40] + 41c: ec 00 00 54 b.gt #28 <nonleaf_call+0x404> + 420: 01 00 00 14 b #4 <nonleaf_call+0x3f0> + 424: a8 03 5b f8 ldur x8, [x29, #-80] + 428: 69 2e 40 b9 ldr w9, [x19, #44] + 42c: 08 c1 29 8b add x8, x8, w9, sxtw + 430: 68 12 00 f9 str x8, [x19, #32] + 434: 06 00 00 14 b #24 <nonleaf_call+0x418> + 438: a8 83 5a f8 ldur x8, [x29, #-88] + 43c: 09 21 00 91 add x9, x8, #8 + 440: a9 83 1a f8 stur x9, [x29, #-88] + 444: 68 12 00 f9 str x8, [x19, #32] + 448: 01 00 00 14 b #4 <nonleaf_call+0x418> + 44c: 68 12 40 f9 ldr x8, [x19, #32] + 450: 09 01 40 b9 ldr w9, [x8] + 454: a9 c3 1c b8 stur w9, [x29, #-52] + 458: a8 63 01 d1 sub x8, x29, #88 + 45c: 08 61 00 91 add x8, x8, #24 + 460: a9 03 5c b8 ldur w9, [x29, #-64] + 464: ea 03 09 2a mov w10, w9 + 468: 68 0e 00 f9 str x8, [x19, #24] + 46c: 6a 16 00 b9 str w10, [x19, #20] + 470: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x478> + 474: 01 00 00 14 b #4 <nonleaf_call+0x444> + 478: 68 16 40 b9 ldr w8, [x19, #20] + 47c: 09 21 00 11 add w9, w8, #8 + 480: 6a 0e 40 f9 ldr x10, [x19, #24] + 484: 49 01 00 b9 str w9, [x10] + 488: 29 01 00 71 subs w9, w9, #0 + 48c: 69 12 00 b9 str w9, [x19, #16] + 490: ec 00 00 54 b.gt #28 <nonleaf_call+0x478> + 494: 01 00 00 14 b #4 <nonleaf_call+0x464> + 498: a8 03 5b f8 ldur x8, [x29, #-80] + 49c: 69 16 40 b9 ldr w9, [x19, #20] + 4a0: 08 c1 29 8b add x8, x8, w9, sxtw + 4a4: 68 06 00 f9 str x8, [x19, #8] + 4a8: 06 00 00 14 b #24 <nonleaf_call+0x48c> + 4ac: a8 83 5a f8 ldur x8, [x29, #-88] + 4b0: 09 21 00 91 add x9, x8, #8 + 4b4: a9 83 1a f8 stur x9, [x29, #-88] + 4b8: 68 06 00 f9 str x8, [x19, #8] + 4bc: 01 00 00 14 b #4 <nonleaf_call+0x48c> + 4c0: 68 06 40 f9 ldr x8, [x19, #8] + 4c4: 09 01 40 b9 ldr w9, [x8] + 4c8: a9 83 1c b8 stur w9, [x29, #-56] + 4cc: e8 03 00 91 mov x8, sp + 4d0: 0a 81 03 f1 subs x10, x8, #224 + 4d4: 5f 01 00 91 mov sp, x10 + 4d8: 89 09 80 52 mov w9, #76 + 4dc: 09 01 12 38 sturb w9, [x8, #-224] + 4e0: a0 83 5e b8 ldur w0, [x29, #-24] + 4e4: a1 43 5e b8 ldur w1, [x29, #-28] + 4e8: a2 03 5e b8 ldur w2, [x29, #-32] + 4ec: a3 c3 5d b8 ldur w3, [x29, #-36] + 4f0: a4 83 5d b8 ldur w4, [x29, #-40] + 4f4: a5 43 5d b8 ldur w5, [x29, #-44] + 4f8: a6 03 5d b8 ldur w6, [x29, #-48] + 4fc: a7 c3 5c b8 ldur w7, [x29, #-52] + 500: a9 83 5c b8 ldur w9, [x29, #-56] + 504: ff 43 00 d1 sub sp, sp, #16 + 508: e8 03 00 91 mov x8, sp + 50c: 09 01 00 b9 str w9, [x8] + 510: bc fe ff 97 bl #-1296 <leaf_call> + 514: ff 43 00 91 add sp, sp, #16 + 518: bf 43 00 d1 sub sp, x29, #16 + 51c: fd 7b 41 a9 ldp x29, x30, [sp, #16] + 520: fc 4f c2 a8 ldp x28, x19, [sp], #32 + 524: c0 03 5f d6 ret + +0000000000000528 main: + 528: ff c3 00 d1 sub sp, sp, #48 + 52c: fd 7b 02 a9 stp x29, x30, [sp, #32] + 530: fd 83 00 91 add x29, sp, #32 + 534: 08 00 80 52 mov w8, #0 + 538: e1 03 00 32 orr w1, wzr, #0x1 + 53c: e2 03 1f 32 orr w2, wzr, #0x2 + 540: e3 07 00 32 orr w3, wzr, #0x3 + 544: e4 03 1e 32 orr w4, wzr, #0x4 + 548: a5 00 80 52 mov w5, #5 + 54c: e6 07 1f 32 orr w6, wzr, #0x6 + 550: e7 0b 00 32 orr w7, wzr, #0x7 + 554: e9 03 1d 32 orr w9, wzr, #0x8 + 558: 2a 01 80 52 mov w10, #9 + 55c: bf c3 1f b8 stur wzr, [x29, #-4] + 560: e0 03 08 2a mov w0, w8 + 564: eb 03 00 91 mov x11, sp + 568: 69 01 00 b9 str w9, [x11] + 56c: eb 03 00 91 mov x11, sp + 570: 6a 09 00 b9 str w10, [x11, #8] + 574: a8 83 1f b8 stur w8, [x29, #-8] + 578: af fe ff 97 bl #-1348 <nonleaf_call> + 57c: a0 83 5f b8 ldur w0, [x29, #-8] + 580: fd 7b 42 a9 ldp x29, x30, [sp, #32] + 584: ff c3 00 91 add sp, sp, #48 + 588: c0 03 5f d6 ret + + + +; ---------- for spilling with a float ----------> + +; #include <stdlib.h> +; #include <stdarg.h> +; +; void leaf_call(int b, int c, int d, int e, float f, int g, int h, int i, int j) +; { +; } +; +; void nonleaf_call(int a, ...) +; { +; int b,c,d,e,g,h,i,j; +; float f; +; va_list ap; +; va_start(ap, a); +; b = va_arg(ap, int); +; c = va_arg(ap, int); +; d = va_arg(ap, int); +; e = va_arg(ap, int); +; f = va_arg(ap, float); +; g = va_arg(ap, int); +; h = va_arg(ap, int); +; i = va_arg(ap, int); +; j = va_arg(ap, int); +; +; /* use some local data */ +; *(char*)alloca(220) = 'L'; +; leaf_call(b, c, d, e, f, g, h, i, j); +; } +; +; int main() +; { +; nonleaf_call(0, 1, 2, 3, 4, 5.f, 6, 7, 8, 9); +; return 0; +; } + + + +; output from freebsd-13.0_r348764-arm64 w/ clang 8.0.0 + +0000000000000000 leaf_call: + 0: ff c3 00 d1 sub sp, sp, #48 + 4: e0 2f 00 b9 str w0, [sp, #44] + 8: e1 2b 00 b9 str w1, [sp, #40] + c: e2 27 00 b9 str w2, [sp, #36] + 10: e3 23 00 b9 str w3, [sp, #32] + 14: e0 1f 00 bd str s0, [sp, #28] + 18: e4 1b 00 b9 str w4, [sp, #24] + 1c: e5 17 00 b9 str w5, [sp, #20] + 20: e6 13 00 b9 str w6, [sp, #16] + 24: e7 0f 00 b9 str w7, [sp, #12] + 28: ff c3 00 91 add sp, sp, #48 + 2c: c0 03 5f d6 ret + +0000000000000030 nonleaf_call: + 30: fc 4f be a9 stp x28, x19, [sp, #-32]! + 34: fd 7b 01 a9 stp x29, x30, [sp, #16] + 38: fd 43 00 91 add x29, sp, #16 + 3c: ff 83 07 d1 sub sp, sp, #480 + 40: f3 03 00 91 mov x19, sp + 44: 67 56 80 3d str q7, [x19, #336] + 48: 66 52 80 3d str q6, [x19, #320] + 4c: 65 4e 80 3d str q5, [x19, #304] + 50: 64 4a 80 3d str q4, [x19, #288] + 54: 63 46 80 3d str q3, [x19, #272] + 58: 62 42 80 3d str q2, [x19, #256] + 5c: 61 3e 80 3d str q1, [x19, #240] + 60: 60 3a 80 3d str q0, [x19, #224] + 64: a7 03 1a f8 stur x7, [x29, #-96] + 68: a6 83 19 f8 stur x6, [x29, #-104] + 6c: a5 03 19 f8 stur x5, [x29, #-112] + 70: a4 83 18 f8 stur x4, [x29, #-120] + 74: a3 03 18 f8 stur x3, [x29, #-128] + 78: a2 83 17 f8 stur x2, [x29, #-136] + 7c: a1 03 17 f8 stur x1, [x29, #-144] + 80: a0 c3 1e b8 stur w0, [x29, #-20] + 84: e0 63 19 32 orr w0, wzr, #0xffffff80 + 88: a0 43 1c b8 stur w0, [x29, #-60] + 8c: e0 06 80 12 mov w0, #-56 + 90: a0 03 1c b8 stur w0, [x29, #-64] + 94: 61 82 03 91 add x1, x19, #224 + 98: 21 00 02 91 add x1, x1, #128 + 9c: a1 83 1b f8 stur x1, [x29, #-72] + a0: a1 43 02 d1 sub x1, x29, #144 + a4: 21 e0 00 91 add x1, x1, #56 + a8: a1 03 1b f8 stur x1, [x29, #-80] + ac: a1 43 00 91 add x1, x29, #16 + b0: a1 83 1a f8 stur x1, [x29, #-88] + b4: a1 63 01 d1 sub x1, x29, #88 + b8: 21 60 00 91 add x1, x1, #24 + bc: a0 03 5c b8 ldur w0, [x29, #-64] + c0: e8 03 00 2a mov w8, w0 + c4: 61 6e 00 f9 str x1, [x19, #216] + c8: 68 d6 00 b9 str w8, [x19, #212] + cc: e0 01 f8 36 tbz w0, #31, #60 <nonleaf_call+0xd8> + d0: 01 00 00 14 b #4 <nonleaf_call+0xa4> + d4: 68 d6 40 b9 ldr w8, [x19, #212] + d8: 09 21 00 11 add w9, w8, #8 + dc: 6a 6e 40 f9 ldr x10, [x19, #216] + e0: 49 01 00 b9 str w9, [x10] + e4: 29 01 00 71 subs w9, w9, #0 + e8: 69 d2 00 b9 str w9, [x19, #208] + ec: ec 00 00 54 b.gt #28 <nonleaf_call+0xd8> + f0: 01 00 00 14 b #4 <nonleaf_call+0xc4> + f4: a8 03 5b f8 ldur x8, [x29, #-80] + f8: 69 d6 40 b9 ldr w9, [x19, #212] + fc: 08 c1 29 8b add x8, x8, w9, sxtw + 100: 68 66 00 f9 str x8, [x19, #200] + 104: 06 00 00 14 b #24 <nonleaf_call+0xec> + 108: a8 83 5a f8 ldur x8, [x29, #-88] + 10c: 09 21 00 91 add x9, x8, #8 + 110: a9 83 1a f8 stur x9, [x29, #-88] + 114: 68 66 00 f9 str x8, [x19, #200] + 118: 01 00 00 14 b #4 <nonleaf_call+0xec> + 11c: 68 66 40 f9 ldr x8, [x19, #200] + 120: 09 01 40 b9 ldr w9, [x8] + 124: a9 83 1e b8 stur w9, [x29, #-24] + 128: a8 63 01 d1 sub x8, x29, #88 + 12c: 08 61 00 91 add x8, x8, #24 + 130: a9 03 5c b8 ldur w9, [x29, #-64] + 134: ea 03 09 2a mov w10, w9 + 138: 68 62 00 f9 str x8, [x19, #192] + 13c: 6a be 00 b9 str w10, [x19, #188] + 140: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x14c> + 144: 01 00 00 14 b #4 <nonleaf_call+0x118> + 148: 68 be 40 b9 ldr w8, [x19, #188] + 14c: 09 21 00 11 add w9, w8, #8 + 150: 6a 62 40 f9 ldr x10, [x19, #192] + 154: 49 01 00 b9 str w9, [x10] + 158: 29 01 00 71 subs w9, w9, #0 + 15c: 69 ba 00 b9 str w9, [x19, #184] + 160: ec 00 00 54 b.gt #28 <nonleaf_call+0x14c> + 164: 01 00 00 14 b #4 <nonleaf_call+0x138> + 168: a8 03 5b f8 ldur x8, [x29, #-80] + 16c: 69 be 40 b9 ldr w9, [x19, #188] + 170: 08 c1 29 8b add x8, x8, w9, sxtw + 174: 68 5a 00 f9 str x8, [x19, #176] + 178: 06 00 00 14 b #24 <nonleaf_call+0x160> + 17c: a8 83 5a f8 ldur x8, [x29, #-88] + 180: 09 21 00 91 add x9, x8, #8 + 184: a9 83 1a f8 stur x9, [x29, #-88] + 188: 68 5a 00 f9 str x8, [x19, #176] + 18c: 01 00 00 14 b #4 <nonleaf_call+0x160> + 190: 68 5a 40 f9 ldr x8, [x19, #176] + 194: 09 01 40 b9 ldr w9, [x8] + 198: a9 43 1e b8 stur w9, [x29, #-28] + 19c: a8 63 01 d1 sub x8, x29, #88 + 1a0: 08 61 00 91 add x8, x8, #24 + 1a4: a9 03 5c b8 ldur w9, [x29, #-64] + 1a8: ea 03 09 2a mov w10, w9 + 1ac: 68 56 00 f9 str x8, [x19, #168] + 1b0: 6a a6 00 b9 str w10, [x19, #164] + 1b4: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x1c0> + 1b8: 01 00 00 14 b #4 <nonleaf_call+0x18c> + 1bc: 68 a6 40 b9 ldr w8, [x19, #164] + 1c0: 09 21 00 11 add w9, w8, #8 + 1c4: 6a 56 40 f9 ldr x10, [x19, #168] + 1c8: 49 01 00 b9 str w9, [x10] + 1cc: 29 01 00 71 subs w9, w9, #0 + 1d0: 69 a2 00 b9 str w9, [x19, #160] + 1d4: ec 00 00 54 b.gt #28 <nonleaf_call+0x1c0> + 1d8: 01 00 00 14 b #4 <nonleaf_call+0x1ac> + 1dc: a8 03 5b f8 ldur x8, [x29, #-80] + 1e0: 69 a6 40 b9 ldr w9, [x19, #164] + 1e4: 08 c1 29 8b add x8, x8, w9, sxtw + 1e8: 68 4e 00 f9 str x8, [x19, #152] + 1ec: 06 00 00 14 b #24 <nonleaf_call+0x1d4> + 1f0: a8 83 5a f8 ldur x8, [x29, #-88] + 1f4: 09 21 00 91 add x9, x8, #8 + 1f8: a9 83 1a f8 stur x9, [x29, #-88] + 1fc: 68 4e 00 f9 str x8, [x19, #152] + 200: 01 00 00 14 b #4 <nonleaf_call+0x1d4> + 204: 68 4e 40 f9 ldr x8, [x19, #152] + 208: 09 01 40 b9 ldr w9, [x8] + 20c: a9 03 1e b8 stur w9, [x29, #-32] + 210: a8 63 01 d1 sub x8, x29, #88 + 214: 08 61 00 91 add x8, x8, #24 + 218: a9 03 5c b8 ldur w9, [x29, #-64] + 21c: ea 03 09 2a mov w10, w9 + 220: 68 4a 00 f9 str x8, [x19, #144] + 224: 6a 8e 00 b9 str w10, [x19, #140] + 228: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x234> + 22c: 01 00 00 14 b #4 <nonleaf_call+0x200> + 230: 68 8e 40 b9 ldr w8, [x19, #140] + 234: 09 21 00 11 add w9, w8, #8 + 238: 6a 4a 40 f9 ldr x10, [x19, #144] + 23c: 49 01 00 b9 str w9, [x10] + 240: 29 01 00 71 subs w9, w9, #0 + 244: 69 8a 00 b9 str w9, [x19, #136] + 248: ec 00 00 54 b.gt #28 <nonleaf_call+0x234> + 24c: 01 00 00 14 b #4 <nonleaf_call+0x220> + 250: a8 03 5b f8 ldur x8, [x29, #-80] + 254: 69 8e 40 b9 ldr w9, [x19, #140] + 258: 08 c1 29 8b add x8, x8, w9, sxtw + 25c: 68 42 00 f9 str x8, [x19, #128] + 260: 06 00 00 14 b #24 <nonleaf_call+0x248> + 264: a8 83 5a f8 ldur x8, [x29, #-88] + 268: 09 21 00 91 add x9, x8, #8 + 26c: a9 83 1a f8 stur x9, [x29, #-88] + 270: 68 42 00 f9 str x8, [x19, #128] + 274: 01 00 00 14 b #4 <nonleaf_call+0x248> + 278: 68 42 40 f9 ldr x8, [x19, #128] + 27c: 09 01 40 b9 ldr w9, [x8] + 280: a9 c3 1d b8 stur w9, [x29, #-36] + 284: a8 63 01 d1 sub x8, x29, #88 + 288: 08 71 00 91 add x8, x8, #28 + 28c: a9 43 5c b8 ldur w9, [x29, #-60] + 290: ea 03 09 2a mov w10, w9 + 294: 68 3e 00 f9 str x8, [x19, #120] + 298: 6a 76 00 b9 str w10, [x19, #116] + 29c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x2a8> + 2a0: 01 00 00 14 b #4 <nonleaf_call+0x274> + 2a4: 68 76 40 b9 ldr w8, [x19, #116] + 2a8: 09 41 00 11 add w9, w8, #16 + 2ac: 6a 3e 40 f9 ldr x10, [x19, #120] + 2b0: 49 01 00 b9 str w9, [x10] + 2b4: 29 01 00 71 subs w9, w9, #0 + 2b8: 69 72 00 b9 str w9, [x19, #112] + 2bc: ec 00 00 54 b.gt #28 <nonleaf_call+0x2a8> + 2c0: 01 00 00 14 b #4 <nonleaf_call+0x294> + 2c4: a8 83 5b f8 ldur x8, [x29, #-72] + 2c8: 69 76 40 b9 ldr w9, [x19, #116] + 2cc: 08 c1 29 8b add x8, x8, w9, sxtw + 2d0: 68 36 00 f9 str x8, [x19, #104] + 2d4: 06 00 00 14 b #24 <nonleaf_call+0x2bc> + 2d8: a8 83 5a f8 ldur x8, [x29, #-88] + 2dc: 09 21 00 91 add x9, x8, #8 + 2e0: a9 83 1a f8 stur x9, [x29, #-88] + 2e4: 68 36 00 f9 str x8, [x19, #104] + 2e8: 01 00 00 14 b #4 <nonleaf_call+0x2bc> + 2ec: 68 36 40 f9 ldr x8, [x19, #104] + 2f0: 00 01 40 bd ldr s0, [x8] + 2f4: a0 83 1c bc stur s0, [x29, #-56] + 2f8: a8 63 01 d1 sub x8, x29, #88 + 2fc: 08 61 00 91 add x8, x8, #24 + 300: a9 03 5c b8 ldur w9, [x29, #-64] + 304: ea 03 09 2a mov w10, w9 + 308: 68 32 00 f9 str x8, [x19, #96] + 30c: 6a 5e 00 b9 str w10, [x19, #92] + 310: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x31c> + 314: 01 00 00 14 b #4 <nonleaf_call+0x2e8> + 318: 68 5e 40 b9 ldr w8, [x19, #92] + 31c: 09 21 00 11 add w9, w8, #8 + 320: 6a 32 40 f9 ldr x10, [x19, #96] + 324: 49 01 00 b9 str w9, [x10] + 328: 29 01 00 71 subs w9, w9, #0 + 32c: 69 5a 00 b9 str w9, [x19, #88] + 330: ec 00 00 54 b.gt #28 <nonleaf_call+0x31c> + 334: 01 00 00 14 b #4 <nonleaf_call+0x308> + 338: a8 03 5b f8 ldur x8, [x29, #-80] + 33c: 69 5e 40 b9 ldr w9, [x19, #92] + 340: 08 c1 29 8b add x8, x8, w9, sxtw + 344: 68 2a 00 f9 str x8, [x19, #80] + 348: 06 00 00 14 b #24 <nonleaf_call+0x330> + 34c: a8 83 5a f8 ldur x8, [x29, #-88] + 350: 09 21 00 91 add x9, x8, #8 + 354: a9 83 1a f8 stur x9, [x29, #-88] + 358: 68 2a 00 f9 str x8, [x19, #80] + 35c: 01 00 00 14 b #4 <nonleaf_call+0x330> + 360: 68 2a 40 f9 ldr x8, [x19, #80] + 364: 09 01 40 b9 ldr w9, [x8] + 368: a9 83 1d b8 stur w9, [x29, #-40] + 36c: a8 63 01 d1 sub x8, x29, #88 + 370: 08 61 00 91 add x8, x8, #24 + 374: a9 03 5c b8 ldur w9, [x29, #-64] + 378: ea 03 09 2a mov w10, w9 + 37c: 68 26 00 f9 str x8, [x19, #72] + 380: 6a 46 00 b9 str w10, [x19, #68] + 384: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x390> + 388: 01 00 00 14 b #4 <nonleaf_call+0x35c> + 38c: 68 46 40 b9 ldr w8, [x19, #68] + 390: 09 21 00 11 add w9, w8, #8 + 394: 6a 26 40 f9 ldr x10, [x19, #72] + 398: 49 01 00 b9 str w9, [x10] + 39c: 29 01 00 71 subs w9, w9, #0 + 3a0: 69 42 00 b9 str w9, [x19, #64] + 3a4: ec 00 00 54 b.gt #28 <nonleaf_call+0x390> + 3a8: 01 00 00 14 b #4 <nonleaf_call+0x37c> + 3ac: a8 03 5b f8 ldur x8, [x29, #-80] + 3b0: 69 46 40 b9 ldr w9, [x19, #68] + 3b4: 08 c1 29 8b add x8, x8, w9, sxtw + 3b8: 68 1e 00 f9 str x8, [x19, #56] + 3bc: 06 00 00 14 b #24 <nonleaf_call+0x3a4> + 3c0: a8 83 5a f8 ldur x8, [x29, #-88] + 3c4: 09 21 00 91 add x9, x8, #8 + 3c8: a9 83 1a f8 stur x9, [x29, #-88] + 3cc: 68 1e 00 f9 str x8, [x19, #56] + 3d0: 01 00 00 14 b #4 <nonleaf_call+0x3a4> + 3d4: 68 1e 40 f9 ldr x8, [x19, #56] + 3d8: 09 01 40 b9 ldr w9, [x8] + 3dc: a9 43 1d b8 stur w9, [x29, #-44] + 3e0: a8 63 01 d1 sub x8, x29, #88 + 3e4: 08 61 00 91 add x8, x8, #24 + 3e8: a9 03 5c b8 ldur w9, [x29, #-64] + 3ec: ea 03 09 2a mov w10, w9 + 3f0: 68 1a 00 f9 str x8, [x19, #48] + 3f4: 6a 2e 00 b9 str w10, [x19, #44] + 3f8: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x404> + 3fc: 01 00 00 14 b #4 <nonleaf_call+0x3d0> + 400: 68 2e 40 b9 ldr w8, [x19, #44] + 404: 09 21 00 11 add w9, w8, #8 + 408: 6a 1a 40 f9 ldr x10, [x19, #48] + 40c: 49 01 00 b9 str w9, [x10] + 410: 29 01 00 71 subs w9, w9, #0 + 414: 69 2a 00 b9 str w9, [x19, #40] + 418: ec 00 00 54 b.gt #28 <nonleaf_call+0x404> + 41c: 01 00 00 14 b #4 <nonleaf_call+0x3f0> + 420: a8 03 5b f8 ldur x8, [x29, #-80] + 424: 69 2e 40 b9 ldr w9, [x19, #44] + 428: 08 c1 29 8b add x8, x8, w9, sxtw + 42c: 68 12 00 f9 str x8, [x19, #32] + 430: 06 00 00 14 b #24 <nonleaf_call+0x418> + 434: a8 83 5a f8 ldur x8, [x29, #-88] + 438: 09 21 00 91 add x9, x8, #8 + 43c: a9 83 1a f8 stur x9, [x29, #-88] + 440: 68 12 00 f9 str x8, [x19, #32] + 444: 01 00 00 14 b #4 <nonleaf_call+0x418> + 448: 68 12 40 f9 ldr x8, [x19, #32] + 44c: 09 01 40 b9 ldr w9, [x8] + 450: a9 03 1d b8 stur w9, [x29, #-48] + 454: a8 63 01 d1 sub x8, x29, #88 + 458: 08 61 00 91 add x8, x8, #24 + 45c: a9 03 5c b8 ldur w9, [x29, #-64] + 460: ea 03 09 2a mov w10, w9 + 464: 68 0e 00 f9 str x8, [x19, #24] + 468: 6a 16 00 b9 str w10, [x19, #20] + 46c: e9 01 f8 36 tbz w9, #31, #60 <nonleaf_call+0x478> + 470: 01 00 00 14 b #4 <nonleaf_call+0x444> + 474: 68 16 40 b9 ldr w8, [x19, #20] + 478: 09 21 00 11 add w9, w8, #8 + 47c: 6a 0e 40 f9 ldr x10, [x19, #24] + 480: 49 01 00 b9 str w9, [x10] + 484: 29 01 00 71 subs w9, w9, #0 + 488: 69 12 00 b9 str w9, [x19, #16] + 48c: ec 00 00 54 b.gt #28 <nonleaf_call+0x478> + 490: 01 00 00 14 b #4 <nonleaf_call+0x464> + 494: a8 03 5b f8 ldur x8, [x29, #-80] + 498: 69 16 40 b9 ldr w9, [x19, #20] + 49c: 08 c1 29 8b add x8, x8, w9, sxtw + 4a0: 68 06 00 f9 str x8, [x19, #8] + 4a4: 06 00 00 14 b #24 <nonleaf_call+0x48c> + 4a8: a8 83 5a f8 ldur x8, [x29, #-88] + 4ac: 09 21 00 91 add x9, x8, #8 + 4b0: a9 83 1a f8 stur x9, [x29, #-88] + 4b4: 68 06 00 f9 str x8, [x19, #8] + 4b8: 01 00 00 14 b #4 <nonleaf_call+0x48c> + 4bc: 68 06 40 f9 ldr x8, [x19, #8] + 4c0: 09 01 40 b9 ldr w9, [x8] + 4c4: a9 c3 1c b8 stur w9, [x29, #-52] + 4c8: e8 03 00 91 mov x8, sp + 4cc: 0a 81 03 f1 subs x10, x8, #224 + 4d0: 5f 01 00 91 mov sp, x10 + 4d4: 89 09 80 52 mov w9, #76 + 4d8: 09 01 12 38 sturb w9, [x8, #-224] + 4dc: a0 83 5e b8 ldur w0, [x29, #-24] + 4e0: a1 43 5e b8 ldur w1, [x29, #-28] + 4e4: a2 03 5e b8 ldur w2, [x29, #-32] + 4e8: a3 c3 5d b8 ldur w3, [x29, #-36] + 4ec: a0 83 5c bc ldur s0, [x29, #-56] + 4f0: a4 83 5d b8 ldur w4, [x29, #-40] + 4f4: a5 43 5d b8 ldur w5, [x29, #-44] + 4f8: a6 03 5d b8 ldur w6, [x29, #-48] + 4fc: a7 c3 5c b8 ldur w7, [x29, #-52] + 500: c0 fe ff 97 bl #-1280 <leaf_call> + 504: bf 43 00 d1 sub sp, x29, #16 + 508: fd 7b 41 a9 ldp x29, x30, [sp, #16] + 50c: fc 4f c2 a8 ldp x28, x19, [sp], #32 + 510: c0 03 5f d6 ret + +0000000000000514 main: + 514: ff 83 00 d1 sub sp, sp, #32 + 518: fd 7b 01 a9 stp x29, x30, [sp, #16] + 51c: fd 43 00 91 add x29, sp, #16 + 520: 08 00 80 52 mov w8, #0 + 524: e1 03 00 32 orr w1, wzr, #0x1 + 528: e2 03 1f 32 orr w2, wzr, #0x2 + 52c: e3 07 00 32 orr w3, wzr, #0x3 + 530: e4 03 1e 32 orr w4, wzr, #0x4 + 534: 89 02 e8 d2 mov x9, #4617315517961601024 + 538: 20 01 67 9e fmov d0, x9 + 53c: e5 07 1f 32 orr w5, wzr, #0x6 + 540: e6 0b 00 32 orr w6, wzr, #0x7 + 544: e7 03 1d 32 orr w7, wzr, #0x8 + 548: 2a 01 80 52 mov w10, #9 + 54c: bf c3 1f b8 stur wzr, [x29, #-4] + 550: e0 03 08 2a mov w0, w8 + 554: e9 03 00 91 mov x9, sp + 558: 2a 01 00 b9 str w10, [x9] + 55c: e8 0b 00 b9 str w8, [sp, #8] + 560: b4 fe ff 97 bl #-1328 <nonleaf_call> + 564: e0 0b 40 b9 ldr w0, [sp, #8] + 568: fd 7b 41 a9 ldp x29, x30, [sp, #16] + 56c: ff 83 00 91 add sp, sp, #32 + 570: c0 03 5f d6 ret + +; vim: ft=asm68k +