view 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 source

; #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