changeset 648:a54e1f04588f

- riscv64 disas examples
author Tassilo Philipp
date Thu, 22 Feb 2024 17:45:53 +0100
parents 9d630465f6f4
children 0909837648d2
files doc/disas_examples/riscv64.rvg.disas
diffstat 1 files changed, 632 insertions(+), 632 deletions(-) [+]
line wrap: on
line diff
--- a/doc/disas_examples/riscv64.rvg.disas	Tue Feb 20 15:56:25 2024 +0100
+++ b/doc/disas_examples/riscv64.rvg.disas	Thu Feb 22 17:45:53 2024 +0100
@@ -39,56 +39,56 @@
       2a: 82 80         ret
 
 000000000000002c <nonleaf_call>:
-      2c: 6d 71         addi    sp, sp, -272
-      2e: 06 e6         sd      ra, 264(sp)
-      30: 22 e2         sd      s0, 256(sp)
-      32: 00 0a         addi    s0, sp, 272
-      34: 23 26 a4 fe   sw      a0, -20(s0)
-      38: 23 24 b4 fe   sw      a1, -24(s0)
-      3c: 23 22 c4 fe   sw      a2, -28(s0)
-      40: 23 20 d4 fe   sw      a3, -32(s0)
-      44: 23 2e e4 fc   sw      a4, -36(s0)
-      48: 23 2c f4 fc   sw      a5, -40(s0)
-      4c: 23 2a 04 fd   sw      a6, -44(s0)
-      50: 23 28 14 fd   sw      a7, -48(s0)
-      54: 13 05 c0 04   li      a0, 76
-      58: 23 08 a4 ee   sb      a0, -272(s0)
-      5c: 03 25 84 fe   lw      a0, -24(s0)
-      60: 83 25 44 fe   lw      a1, -28(s0)
-      64: 03 26 04 fe   lw      a2, -32(s0)
-      68: 83 26 c4 fd   lw      a3, -36(s0)
-      6c: 03 27 84 fd   lw      a4, -40(s0)
-      70: 83 27 44 fd   lw      a5, -44(s0)
-      74: 03 28 04 fd   lw      a6, -48(s0)
-      78: 97 00 00 00   auipc   ra, 0
-      7c: e7 80 00 00   jalr    ra
-      80: b2 60         ld      ra, 264(sp)
-      82: 12 64         ld      s0, 256(sp)
-      84: 51 61         addi    sp, sp, 272
-      86: 82 80         ret
+      2c: 6d 71         addi    sp, sp, -272 ; |          open frame, includes space for alloca(220)
+      2e: 06 e6         sd      ra, 264(sp)  ; | prolog
+      30: 22 e2         sd      s0, 256(sp)  ; |
+      32: 00 0a         addi    s0, sp, 272  ; /
+      34: 23 26 a4 fe   sw      a0, -20(s0)  ; \
+      38: 23 24 b4 fe   sw      a1, -24(s0)  ; |
+      3c: 23 22 c4 fe   sw      a2, -28(s0)  ; |
+      40: 23 20 d4 fe   sw      a3, -32(s0)  ; | store arg 0-7 on stack
+      44: 23 2e e4 fc   sw      a4, -36(s0)  ; |
+      48: 23 2c f4 fc   sw      a5, -40(s0)  ; |
+      4c: 23 2a 04 fd   sw      a6, -44(s0)  ; |
+      50: 23 28 14 fd   sw      a7, -48(s0)  ; /
+      54: 13 05 c0 04   li      a0, 76       ; \
+      58: 23 08 a4 ee   sb      a0, -272(s0) ; / store 'L' into alloca'd space
+      5c: 03 25 84 fe   lw      a0, -24(s0)  ; \
+      60: 83 25 44 fe   lw      a1, -28(s0)  ; |
+      64: 03 26 04 fe   lw      a2, -32(s0)  ; |
+      68: 83 26 c4 fd   lw      a3, -36(s0)  ; | arg 0-6, fetch from stack (stored above)
+      6c: 03 27 84 fd   lw      a4, -40(s0)  ; |
+      70: 83 27 44 fd   lw      a5, -44(s0)  ; |
+      74: 03 28 04 fd   lw      a6, -48(s0)  ; /
+      78: 97 00 00 00   auipc   ra, 0        ; \
+      7c: e7 80 00 00   jalr    ra           ; / build relative call addr and call (offset 0 b/c not relocated)
+      80: b2 60         ld      ra, 264(sp)  ; \
+      82: 12 64         ld      s0, 256(sp)  ; |
+      84: 51 61         addi    sp, sp, 272  ; | epilog
+      86: 82 80         ret                  ; |
 
 0000000000000088 <main>:
-      88: 01 11         addi    sp, sp, -32
-      8a: 06 ec         sd      ra, 24(sp)
-      8c: 22 e8         sd      s0, 16(sp)
-      8e: 00 10         addi    s0, sp, 32
-      90: 01 45         li      a0, 0
-      92: 23 30 a4 fe   sd      a0, -32(s0)
-      96: 23 26 a4 fe   sw      a0, -20(s0)
-      9a: 85 45         li      a1, 1
-      9c: 09 46         li      a2, 2
-      9e: 8d 46         li      a3, 3
-      a0: 11 47         li      a4, 4
-      a2: 95 47         li      a5, 5
-      a4: 19 48         li      a6, 6
-      a6: 9d 48         li      a7, 7
-      a8: 97 00 00 00   auipc   ra, 0
-      ac: e7 80 00 00   jalr    ra
-      b0: 03 35 04 fe   ld      a0, -32(s0)
-      b4: e2 60         ld      ra, 24(sp)
-      b6: 42 64         ld      s0, 16(sp)
-      b8: 05 61         addi    sp, sp, 32
-      ba: 82 80         ret
+      88: 01 11         addi    sp, sp, -32  ; |
+      8a: 06 ec         sd      ra, 24(sp)   ; | prolog
+      8c: 22 e8         sd      s0, 16(sp)   ; |
+      8e: 00 10         addi    s0, sp, 32   ; |
+      90: 01 45         li      a0, 0        ; arg 0
+      92: 23 30 a4 fe   sd      a0, -32(s0)  ; write 0LL to local area on stack, is restored below into a0 on return as retval
+      96: 23 26 a4 fe   sw      a0, -20(s0)  ; write 0 to fp-20 - unsure why
+      9a: 85 45         li      a1, 1        ; arg 1
+      9c: 09 46         li      a2, 2        ; arg 2
+      9e: 8d 46         li      a3, 3        ; arg 3
+      a0: 11 47         li      a4, 4        ; arg 4
+      a2: 95 47         li      a5, 5        ; arg 5
+      a4: 19 48         li      a6, 6        ; arg 6
+      a6: 9d 48         li      a7, 7        ; arg 7
+      a8: 97 00 00 00   auipc   ra, 0        ; |
+      ac: e7 80 00 00   jalr    ra           ; | build relative call addr and call (offset 0 b/c not relocated)
+      b0: 03 35 04 fe   ld      a0, -32(s0)  ; a0 = 0 (stored above), return value
+      b4: e2 60         ld      ra, 24(sp)   ; |
+      b6: 42 64         ld      s0, 16(sp)   ; |
+      b8: 05 61         addi    sp, sp, 32   ; | epilog
+      ba: 82 80         ret                  ; |
 
 
 
@@ -494,112 +494,112 @@
       36: 82 80         ret
 
 0000000000000038 <nonleaf_call>:
-      38: 49 71         addi    sp, sp, -368
-      3a: 06 f6         sd      ra, 296(sp)
-      3c: 22 f2         sd      s0, 288(sp)
-      3e: 00 1a         addi    s0, sp, 304
-      40: 23 3c 14 03   sd      a7, 56(s0)
-      44: 23 38 04 03   sd      a6, 48(s0)
-      48: 1c f4         sd      a5, 40(s0)
-      4a: 18 f0         sd      a4, 32(s0)
-      4c: 14 ec         sd      a3, 24(s0)
-      4e: 10 e8         sd      a2, 16(s0)
-      50: 0c e4         sd      a1, 8(s0)
-      52: 23 26 a4 fe   sw      a0, -20(s0)
-      56: 13 05 84 00   addi    a0, s0, 8
-      5a: 23 30 a4 fc   sd      a0, -64(s0)
-      5e: 03 35 04 fc   ld      a0, -64(s0)
-      62: 93 05 85 00   addi    a1, a0, 8
-      66: 23 30 b4 fc   sd      a1, -64(s0)
-      6a: 08 41         lw      a0, 0(a0)
-      6c: 23 24 a4 fe   sw      a0, -24(s0)
-      70: 03 35 04 fc   ld      a0, -64(s0)
-      74: 93 05 85 00   addi    a1, a0, 8
-      78: 23 30 b4 fc   sd      a1, -64(s0)
-      7c: 08 41         lw      a0, 0(a0)
-      7e: 23 22 a4 fe   sw      a0, -28(s0)
-      82: 03 35 04 fc   ld      a0, -64(s0)
-      86: 93 05 85 00   addi    a1, a0, 8
-      8a: 23 30 b4 fc   sd      a1, -64(s0)
-      8e: 08 41         lw      a0, 0(a0)
-      90: 23 20 a4 fe   sw      a0, -32(s0)
-      94: 03 35 04 fc   ld      a0, -64(s0)
-      98: 93 05 85 00   addi    a1, a0, 8
-      9c: 23 30 b4 fc   sd      a1, -64(s0)
-      a0: 08 41         lw      a0, 0(a0)
-      a2: 23 2e a4 fc   sw      a0, -36(s0)
-      a6: 03 35 04 fc   ld      a0, -64(s0)
-      aa: 93 05 85 00   addi    a1, a0, 8
-      ae: 23 30 b4 fc   sd      a1, -64(s0)
-      b2: 08 41         lw      a0, 0(a0)
-      b4: 23 2c a4 fc   sw      a0, -40(s0)
-      b8: 03 35 04 fc   ld      a0, -64(s0)
-      bc: 93 05 85 00   addi    a1, a0, 8
-      c0: 23 30 b4 fc   sd      a1, -64(s0)
-      c4: 08 41         lw      a0, 0(a0)
-      c6: 23 2a a4 fc   sw      a0, -44(s0)
-      ca: 03 35 04 fc   ld      a0, -64(s0)
-      ce: 93 05 85 00   addi    a1, a0, 8
-      d2: 23 30 b4 fc   sd      a1, -64(s0)
-      d6: 08 41         lw      a0, 0(a0)
-      d8: 23 28 a4 fc   sw      a0, -48(s0)
-      dc: 03 35 04 fc   ld      a0, -64(s0)
-      e0: 93 05 85 00   addi    a1, a0, 8
-      e4: 23 30 b4 fc   sd      a1, -64(s0)
-      e8: 08 41         lw      a0, 0(a0)
-      ea: 23 26 a4 fc   sw      a0, -52(s0)
-      ee: 03 35 04 fc   ld      a0, -64(s0)
-      f2: 93 05 85 00   addi    a1, a0, 8
-      f6: 23 30 b4 fc   sd      a1, -64(s0)
-      fa: 08 41         lw      a0, 0(a0)
-      fc: 23 24 a4 fc   sw      a0, -56(s0)
-     100: 13 05 c0 04   li      a0, 76
-     104: 23 00 a4 ee   sb      a0, -288(s0)
-     108: 03 25 84 fe   lw      a0, -24(s0)
-     10c: 83 25 44 fe   lw      a1, -28(s0)
-     110: 03 26 04 fe   lw      a2, -32(s0)
-     114: 83 26 c4 fd   lw      a3, -36(s0)
-     118: 03 27 84 fd   lw      a4, -40(s0)
-     11c: 83 27 44 fd   lw      a5, -44(s0)
-     120: 03 28 04 fd   lw      a6, -48(s0)
-     124: 83 28 c4 fc   lw      a7, -52(s0)
-     128: 83 22 84 fc   lw      t0, -56(s0)
-     12c: 0a 83         mv      t1, sp
-     12e: 23 30 53 00   sd      t0, 0(t1)
-     132: 97 00 00 00   auipc   ra, 0
-     136: e7 80 00 00   jalr    ra
-     13a: b2 70         ld      ra, 296(sp)
-     13c: 12 74         ld      s0, 288(sp)
-     13e: 75 61         addi    sp, sp, 368
-     140: 82 80         ret
+      38: 49 71         addi    sp, sp, -368 ; |          open frame, includes space for alloca(220)
+      3a: 06 f6         sd      ra, 296(sp)  ; |
+      3c: 22 f2         sd      s0, 288(sp)  ; | prolog (sets frame pointer to beginning of spill area of 64 bytes)
+      3e: 00 1a         addi    s0, sp, 304  ; /
+      40: 23 3c 14 03   sd      a7, 56(s0)   ; \
+      44: 23 38 04 03   sd      a6, 48(s0)   ; |
+      48: 1c f4         sd      a5, 40(s0)   ; |
+      4a: 18 f0         sd      a4, 32(s0)   ; | spill in args 1-7 (named arg 0 not spilled, not needed for vararg logic)
+      4c: 14 ec         sd      a3, 24(s0)   ; |
+      4e: 10 e8         sd      a2, 16(s0)   ; |
+      50: 0c e4         sd      a1, 8(s0)    ; |
+      52: 23 26 a4 fe   sw      a0, -20(s0)  ; store in arg 0 = 0 to local stack area (pointless, as unused, but probably to (re)use a0, freely)
+      56: 13 05 84 00   addi    a0, s0, 8    ; ptr to spilled in arg 1
+      5a: 23 30 a4 fc   sd      a0, -64(s0)  ; store ptr to spilled in arg 1
+      5e: 03 35 04 fc   ld      a0, -64(s0)  ; \                load ptr to in arg 1
+      62: 93 05 85 00   addi    a1, a0, 8    ; | copy in arg    advance ptr to spilled in arg 2 (for next var)
+      66: 23 30 b4 fc   sd      a1, -64(s0)  ; | 1 to local     store ptr
+      6a: 08 41         lw      a0, 0(a0)    ; | stack area     | read spilled in arg 1 into a0
+      6c: 23 24 a4 fe   sw      a0, -24(s0)  ; /                | store value in local stack area
+      70: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      74: 93 05 85 00   addi    a1, a0, 8    ; |
+      78: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 2 (from spill area) to local stack area
+      7c: 08 41         lw      a0, 0(a0)    ; |
+      7e: 23 22 a4 fe   sw      a0, -28(s0)  ; /
+      82: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      86: 93 05 85 00   addi    a1, a0, 8    ; |
+      8a: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 3 (from spill area) to local stack area
+      8e: 08 41         lw      a0, 0(a0)    ; |
+      90: 23 20 a4 fe   sw      a0, -32(s0)  ; /
+      94: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      98: 93 05 85 00   addi    a1, a0, 8    ; |
+      9c: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 4 (from spill area) to local stack area
+      a0: 08 41         lw      a0, 0(a0)    ; |
+      a2: 23 2e a4 fc   sw      a0, -36(s0)  ; /
+      a6: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      aa: 93 05 85 00   addi    a1, a0, 8    ; |
+      ae: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 5 (from spill area) to local stack area
+      b2: 08 41         lw      a0, 0(a0)    ; |
+      b4: 23 2c a4 fc   sw      a0, -40(s0)  ; /
+      b8: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      bc: 93 05 85 00   addi    a1, a0, 8    ; |
+      c0: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 6 (from spill area) to local stack area
+      c4: 08 41         lw      a0, 0(a0)    ; |
+      c6: 23 2a a4 fc   sw      a0, -44(s0)  ; /
+      ca: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      ce: 93 05 85 00   addi    a1, a0, 8    ; |
+      d2: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 7 (from spill area) to local stack area
+      d6: 08 41         lw      a0, 0(a0)    ; |
+      d8: 23 28 a4 fc   sw      a0, -48(s0)  ; /
+      dc: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      e0: 93 05 85 00   addi    a1, a0, 8    ; |
+      e4: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 8 (from param area) to local stack area
+      e8: 08 41         lw      a0, 0(a0)    ; |
+      ea: 23 26 a4 fc   sw      a0, -52(s0)  ; /
+      ee: 03 35 04 fc   ld      a0, -64(s0)  ; \
+      f2: 93 05 85 00   addi    a1, a0, 8    ; |
+      f6: 23 30 b4 fc   sd      a1, -64(s0)  ; | copy in arg 9 (from param area) to local stack area
+      fa: 08 41         lw      a0, 0(a0)    ; |
+      fc: 23 24 a4 fc   sw      a0, -56(s0)  ; /
+     100: 13 05 c0 04   li      a0, 76       ; \
+     104: 23 00 a4 ee   sb      a0, -288(s0) ; / store 'L' into alloca'd space
+     108: 03 25 84 fe   lw      a0, -24(s0)  ; arg 0
+     10c: 83 25 44 fe   lw      a1, -28(s0)  ; arg 1
+     110: 03 26 04 fe   lw      a2, -32(s0)  ; arg 2
+     114: 83 26 c4 fd   lw      a3, -36(s0)  ; arg 3
+     118: 03 27 84 fd   lw      a4, -40(s0)  ; arg 4
+     11c: 83 27 44 fd   lw      a5, -44(s0)  ; arg 5
+     120: 03 28 04 fd   lw      a6, -48(s0)  ; arg 6
+     124: 83 28 c4 fc   lw      a7, -52(s0)  ; arg 7
+     128: 83 22 84 fc   lw      t0, -56(s0)  ; |
+     12c: 0a 83         mv      t1, sp       ; | "push" arg 8 onto stack
+     12e: 23 30 53 00   sd      t0, 0(t1)    ; /
+     132: 97 00 00 00   auipc   ra, 0        ; \
+     136: e7 80 00 00   jalr    ra           ; / build relative call addr and call (offset 0 b/c not relocated)
+     13a: b2 70         ld      ra, 296(sp)  ; \
+     13c: 12 74         ld      s0, 288(sp)  ; |
+     13e: 75 61         addi    sp, sp, 368  ; | epilog
+     140: 82 80         ret                  ; |
 
 0000000000000142 <main>:
-     142: 79 71         addi    sp, sp, -48
-     144: 06 f4         sd      ra, 40(sp)
-     146: 22 f0         sd      s0, 32(sp)
-     148: 00 18         addi    s0, sp, 48
-     14a: 01 45         li      a0, 0
-     14c: 23 30 a4 fe   sd      a0, -32(s0)
-     150: 23 26 a4 fe   sw      a0, -20(s0)
-     154: 0a 86         mv      a2, sp
-     156: a5 45         li      a1, 9
-     158: 0c e6         sd      a1, 8(a2)
-     15a: a1 45         li      a1, 8
-     15c: 0c e2         sd      a1, 0(a2)
-     15e: 85 45         li      a1, 1
-     160: 09 46         li      a2, 2
-     162: 8d 46         li      a3, 3
-     164: 11 47         li      a4, 4
-     166: 95 47         li      a5, 5
-     168: 19 48         li      a6, 6
-     16a: 9d 48         li      a7, 7
-     16c: 97 00 00 00   auipc   ra, 0
-     170: e7 80 00 00   jalr    ra
-     174: 03 35 04 fe   ld      a0, -32(s0)
-     178: a2 70         ld      ra, 40(sp)
-     17a: 02 74         ld      s0, 32(sp)
-     17c: 45 61         addi    sp, sp, 48
-     17e: 82 80         ret
+     142: 79 71         addi    sp, sp, -48  ; |
+     144: 06 f4         sd      ra, 40(sp)   ; | prolog
+     146: 22 f0         sd      s0, 32(sp)   ; |
+     148: 00 18         addi    s0, sp, 48   ; |
+     14a: 01 45         li      a0, 0        ; arg 0
+     14c: 23 30 a4 fe   sd      a0, -32(s0)  ; write 0LL to local area on stack, is restored below into a0 on return as retval
+     150: 23 26 a4 fe   sw      a0, -20(s0)  ; write 0 to fp-20 - unsure why
+     154: 0a 86         mv      a2, sp       ; use a2 as addr helper for stack pushes (a bit pointless, b/c one could use sp directly)
+     156: a5 45         li      a1, 9        ; \
+     158: 0c e6         sd      a1, 8(a2)    ; / "push" arg 9 onto stack
+     15a: a1 45         li      a1, 8        ; \
+     15c: 0c e2         sd      a1, 0(a2)    ; / "push" arg 8 onto stack
+     15e: 85 45         li      a1, 1        ; arg 1
+     160: 09 46         li      a2, 2        ; arg 2
+     162: 8d 46         li      a3, 3        ; arg 3
+     164: 11 47         li      a4, 4        ; arg 4
+     166: 95 47         li      a5, 5        ; arg 5
+     168: 19 48         li      a6, 6        ; arg 6
+     16a: 9d 48         li      a7, 7        ; arg 7
+     16c: 97 00 00 00   auipc   ra, 0        ; |
+     170: e7 80 00 00   jalr    ra           ; | build relative call addr and call (offset 0 b/c not relocated)
+     174: 03 35 04 fe   ld      a0, -32(s0)  ; a0 = 0 (stored above), return value
+     178: a2 70         ld      ra, 40(sp)   ; |
+     17a: 02 74         ld      s0, 32(sp)   ; |
+     17c: 45 61         addi    sp, sp, 48   ; | epilog
+     17e: 82 80         ret                  ; |
 
 
 
@@ -816,111 +816,111 @@
       32: 82 80         ret
 
 0000000000000034 <nonleaf_call>:
-      34: 0d 71         addi    sp, sp, -352
-      36: 06 ee         sd      ra, 280(sp)
-      38: 22 ea         sd      s0, 272(sp)
-      3a: 00 12         addi    s0, sp, 288
-      3c: 23 3c 14 03   sd      a7, 56(s0)
-      40: 23 38 04 03   sd      a6, 48(s0)
-      44: 1c f4         sd      a5, 40(s0)
-      46: 18 f0         sd      a4, 32(s0)
-      48: 14 ec         sd      a3, 24(s0)
-      4a: 10 e8         sd      a2, 16(s0)
-      4c: 0c e4         sd      a1, 8(s0)
-      4e: 23 26 a4 fe   sw      a0, -20(s0)
-      52: 13 05 84 00   addi    a0, s0, 8
-      56: 23 30 a4 fc   sd      a0, -64(s0)
-      5a: 03 35 04 fc   ld      a0, -64(s0)
-      5e: 93 05 85 00   addi    a1, a0, 8
-      62: 23 30 b4 fc   sd      a1, -64(s0)
-      66: 08 41         lw      a0, 0(a0)
-      68: 23 24 a4 fe   sw      a0, -24(s0)
-      6c: 03 35 04 fc   ld      a0, -64(s0)
-      70: 93 05 85 00   addi    a1, a0, 8
-      74: 23 30 b4 fc   sd      a1, -64(s0)
-      78: 08 41         lw      a0, 0(a0)
-      7a: 23 22 a4 fe   sw      a0, -28(s0)
-      7e: 03 35 04 fc   ld      a0, -64(s0)
-      82: 93 05 85 00   addi    a1, a0, 8
-      86: 23 30 b4 fc   sd      a1, -64(s0)
-      8a: 08 41         lw      a0, 0(a0)
-      8c: 23 20 a4 fe   sw      a0, -32(s0)
-      90: 03 35 04 fc   ld      a0, -64(s0)
-      94: 93 05 85 00   addi    a1, a0, 8
-      98: 23 30 b4 fc   sd      a1, -64(s0)
-      9c: 08 41         lw      a0, 0(a0)
-      9e: 23 2e a4 fc   sw      a0, -36(s0)
-      a2: 03 35 04 fc   ld      a0, -64(s0)
-      a6: 93 05 85 00   addi    a1, a0, 8
-      aa: 23 30 b4 fc   sd      a1, -64(s0)
-      ae: 87 27 05 00   flw     fa5, 0(a0)
-      b2: 27 24 f4 fc   fsw     fa5, -56(s0)
-      b6: 03 35 04 fc   ld      a0, -64(s0)
-      ba: 93 05 85 00   addi    a1, a0, 8
-      be: 23 30 b4 fc   sd      a1, -64(s0)
-      c2: 08 41         lw      a0, 0(a0)
-      c4: 23 2c a4 fc   sw      a0, -40(s0)
-      c8: 03 35 04 fc   ld      a0, -64(s0)
-      cc: 93 05 85 00   addi    a1, a0, 8
-      d0: 23 30 b4 fc   sd      a1, -64(s0)
-      d4: 08 41         lw      a0, 0(a0)
-      d6: 23 2a a4 fc   sw      a0, -44(s0)
-      da: 03 35 04 fc   ld      a0, -64(s0)
-      de: 93 05 85 00   addi    a1, a0, 8
-      e2: 23 30 b4 fc   sd      a1, -64(s0)
-      e6: 08 41         lw      a0, 0(a0)
-      e8: 23 28 a4 fc   sw      a0, -48(s0)
-      ec: 03 35 04 fc   ld      a0, -64(s0)
-      f0: 93 05 85 00   addi    a1, a0, 8
-      f4: 23 30 b4 fc   sd      a1, -64(s0)
-      f8: 08 41         lw      a0, 0(a0)
-      fa: 23 26 a4 fc   sw      a0, -52(s0)
-      fe: 13 05 c0 04   li      a0, 76
-     102: 23 00 a4 ee   sb      a0, -288(s0)
-     106: 03 25 84 fe   lw      a0, -24(s0)
-     10a: 83 25 44 fe   lw      a1, -28(s0)
-     10e: 03 26 04 fe   lw      a2, -32(s0)
-     112: 83 26 c4 fd   lw      a3, -36(s0)
-     116: 07 25 84 fc   flw     fa0, -56(s0)
-     11a: 03 27 84 fd   lw      a4, -40(s0)
-     11e: 83 27 44 fd   lw      a5, -44(s0)
-     122: 03 28 04 fd   lw      a6, -48(s0)
-     126: 83 28 c4 fc   lw      a7, -52(s0)
-     12a: 97 00 00 00   auipc   ra, 0
-     12e: e7 80 00 00   jalr    ra
-     132: f2 60         ld      ra, 280(sp)
-     134: 52 64         ld      s0, 272(sp)
-     136: 35 61         addi    sp, sp, 352
-     138: 82 80         ret
+      34: 0d 71         addi    sp, sp, -352 ; |
+      36: 06 ee         sd      ra, 280(sp)  ; | prolog
+      38: 22 ea         sd      s0, 272(sp)  ; |
+      3a: 00 12         addi    s0, sp, 288  ; /
+      3c: 23 3c 14 03   sd      a7, 56(s0)   ; \
+      40: 23 38 04 03   sd      a6, 48(s0)   ; |
+      44: 1c f4         sd      a5, 40(s0)   ; |
+      46: 18 f0         sd      a4, 32(s0)   ; | spill unnamed args
+      48: 14 ec         sd      a3, 24(s0)   ; |
+      4a: 10 e8         sd      a2, 16(s0)   ; |
+      4c: 0c e4         sd      a1, 8(s0)    ; |
+      4e: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      52: 13 05 84 00   addi    a0, s0, 8    ;
+      56: 23 30 a4 fc   sd      a0, -64(s0)  ;
+      5a: 03 35 04 fc   ld      a0, -64(s0)  ;
+      5e: 93 05 85 00   addi    a1, a0, 8    ;
+      62: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      66: 08 41         lw      a0, 0(a0)    ;
+      68: 23 24 a4 fe   sw      a0, -24(s0)  ;
+      6c: 03 35 04 fc   ld      a0, -64(s0)  ;
+      70: 93 05 85 00   addi    a1, a0, 8    ;
+      74: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      78: 08 41         lw      a0, 0(a0)    ;
+      7a: 23 22 a4 fe   sw      a0, -28(s0)  ;
+      7e: 03 35 04 fc   ld      a0, -64(s0)  ;
+      82: 93 05 85 00   addi    a1, a0, 8    ;
+      86: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      8a: 08 41         lw      a0, 0(a0)    ;
+      8c: 23 20 a4 fe   sw      a0, -32(s0)  ;
+      90: 03 35 04 fc   ld      a0, -64(s0)  ;
+      94: 93 05 85 00   addi    a1, a0, 8    ;
+      98: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      9c: 08 41         lw      a0, 0(a0)    ;
+      9e: 23 2e a4 fc   sw      a0, -36(s0)  ;
+      a2: 03 35 04 fc   ld      a0, -64(s0)  ;
+      a6: 93 05 85 00   addi    a1, a0, 8    ;
+      aa: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      ae: 87 27 05 00   flw     fa5, 0(a0)   ;
+      b2: 27 24 f4 fc   fsw     fa5, -56(s0) ;
+      b6: 03 35 04 fc   ld      a0, -64(s0)  ;
+      ba: 93 05 85 00   addi    a1, a0, 8    ;
+      be: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      c2: 08 41         lw      a0, 0(a0)    ;
+      c4: 23 2c a4 fc   sw      a0, -40(s0)  ;
+      c8: 03 35 04 fc   ld      a0, -64(s0)  ;
+      cc: 93 05 85 00   addi    a1, a0, 8    ;
+      d0: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      d4: 08 41         lw      a0, 0(a0)    ;
+      d6: 23 2a a4 fc   sw      a0, -44(s0)  ;
+      da: 03 35 04 fc   ld      a0, -64(s0)  ;
+      de: 93 05 85 00   addi    a1, a0, 8    ;
+      e2: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      e6: 08 41         lw      a0, 0(a0)    ;
+      e8: 23 28 a4 fc   sw      a0, -48(s0)  ;
+      ec: 03 35 04 fc   ld      a0, -64(s0)  ;
+      f0: 93 05 85 00   addi    a1, a0, 8    ;
+      f4: 23 30 b4 fc   sd      a1, -64(s0)  ;
+      f8: 08 41         lw      a0, 0(a0)    ;
+      fa: 23 26 a4 fc   sw      a0, -52(s0)  ;
+      fe: 13 05 c0 04   li      a0, 76       ; | 'L'
+     102: 23 00 a4 ee   sb      a0, -288(s0) ; | write to alloca'd space
+     106: 03 25 84 fe   lw      a0, -24(s0)  ; arg 0
+     10a: 83 25 44 fe   lw      a1, -28(s0)  ; arg 1
+     10e: 03 26 04 fe   lw      a2, -32(s0)  ; arg 2
+     112: 83 26 c4 fd   lw      a3, -36(s0)  ; arg 3
+     116: 07 25 84 fc   flw     fa0, -56(s0) ; arg 4 (float arg)
+     11a: 03 27 84 fd   lw      a4, -40(s0)  ; arg 5
+     11e: 83 27 44 fd   lw      a5, -44(s0)  ; arg 6
+     122: 03 28 04 fd   lw      a6, -48(s0)  ; arg 7
+     126: 83 28 c4 fc   lw      a7, -52(s0)  ; arg 8 (passed via int reg, b/c arg 4 was in float reg)
+     12a: 97 00 00 00   auipc   ra, 0        ;
+     12e: e7 80 00 00   jalr    ra           ;
+     132: f2 60         ld      ra, 280(sp)  ; |
+     134: 52 64         ld      s0, 272(sp)  ; |
+     136: 35 61         addi    sp, sp, 352  ; | epilog
+     138: 82 80         ret                  ; |
 
 000000000000013a <main>:
-     13a: 79 71         addi    sp, sp, -48
-     13c: 06 f4         sd      ra, 40(sp)
-     13e: 22 f0         sd      s0, 32(sp)
-     140: 00 18         addi    s0, sp, 48
-     142: 01 45         li      a0, 0
-     144: 23 30 a4 fe   sd      a0, -32(s0)
-     148: 23 26 a4 fe   sw      a0, -20(s0)
-     14c: 0a 86         mv      a2, sp
-     14e: a5 45         li      a1, 9
-     150: 0c e6         sd      a1, 8(a2)
-     152: a1 45         li      a1, 8
-     154: 0c e2         sd      a1, 0(a2)
-     156: b7 55 00 01   lui     a1, 4101
-     15a: 93 97 65 02   slli    a5, a1, 38
-     15e: 85 45         li      a1, 1
-     160: 09 46         li      a2, 2
-     162: 8d 46         li      a3, 3
-     164: 11 47         li      a4, 4
-     166: 19 48         li      a6, 6
-     168: 9d 48         li      a7, 7
-     16a: 97 00 00 00   auipc   ra, 0
-     16e: e7 80 00 00   jalr    ra
-     172: 03 35 04 fe   ld      a0, -32(s0)
-     176: a2 70         ld      ra, 40(sp)
-     178: 02 74         ld      s0, 32(sp)
-     17a: 45 61         addi    sp, sp, 48
-     17c: 82 80         ret
+     13a: 79 71         addi    sp, sp, -48 ; |
+     13c: 06 f4         sd      ra, 40(sp)  ; | prolog
+     13e: 22 f0         sd      s0, 32(sp)  ; |
+     140: 00 18         addi    s0, sp, 48  ; |
+     142: 01 45         li      a0, 0       ; arg 0
+     144: 23 30 a4 fe   sd      a0, -32(s0) ; write 0LL to local area on stack, is restored below into a0 on return as retval
+     148: 23 26 a4 fe   sw      a0, -20(s0) ; write 0 to fp-20 - unsure why
+     14c: 0a 86         mv      a2, sp      ; use a2 as addr helper for stack pushes (a bit pointless, b/c one could use sp directly)
+     14e: a5 45         li      a1, 9       ; \
+     150: 0c e6         sd      a1, 8(a2)   ; / "push" arg 9 onto stack
+     152: a1 45         li      a1, 8       ; \
+     154: 0c e2         sd      a1, 0(a2)   ; / "push" arg 8 onto stack
+     156: b7 55 00 01   lui     a1, 4101    ; \
+     15a: 93 97 65 02   slli    a5, a1, 38  ; | arg 5 (float passed in int reg, b/c unnamed vararg)
+     15e: 85 45         li      a1, 1       ; arg 1
+     160: 09 46         li      a2, 2       ; arg 2
+     162: 8d 46         li      a3, 3       ; arg 3
+     164: 11 47         li      a4, 4       ; arg 4
+     166: 19 48         li      a6, 6       ; arg 6
+     168: 9d 48         li      a7, 7       ; arg 7
+     16a: 97 00 00 00   auipc   ra, 0       ; |
+     16e: e7 80 00 00   jalr    ra          ; | build relative call addr and call (offset 0 b/c not relocated)
+     172: 03 35 04 fe   ld      a0, -32(s0) ; a0 = 0 (stored above), return value
+     176: a2 70         ld      ra, 40(sp)  ; |
+     178: 02 74         ld      s0, 32(sp)  ; |
+     17a: 45 61         addi    sp, sp, 48  ; | epilog
+     17c: 82 80         ret                 ; |
 
 
 
@@ -1074,76 +1074,76 @@
       2e: 82 80         ret
 
 0000000000000030 <nonleaf_call>:
-      30: 35 71         addi    sp, sp, -160
-      32: 06 ed         sd      ra, 152(sp)
-      34: 22 e9         sd      s0, 144(sp)
-      36: 00 11         addi    s0, sp, 160
-      38: c2 82         mv      t0, a6
-      3a: 3e 88         mv      a6, a5
-      3c: aa 87         mv      a5, a0
-      3e: 08 60         ld      a0, 0(s0)
-      40: 23 34 54 fe   sd      t0, -24(s0)
-      44: 23 30 04 ff   sd      a6, -32(s0)
-      48: 23 2e f4 fc   sw      a5, -36(s0)
-      4c: 23 2c b4 fc   sw      a1, -40(s0)
-      50: 23 2a c4 fc   sw      a2, -44(s0)
-      54: 23 28 d4 fc   sw      a3, -48(s0)
-      58: 23 26 e4 fc   sw      a4, -52(s0)
-      5c: 23 24 14 fd   sw      a7, -56(s0)
-      60: 23 22 a4 fc   sw      a0, -60(s0)
-      64: 13 05 04 f6   addi    a0, s0, -160
-      68: 81 45         li      a1, 0
-      6a: 13 06 40 06   li      a2, 100
-      6e: 97 00 00 00   auipc   ra, 0
-      72: e7 80 00 00   jalr    ra
-      76: 13 05 c0 04   li      a0, 76
-      7a: 23 00 a4 f6   sb      a0, -160(s0)
-      7e: 03 25 84 fd   lw      a0, -40(s0)
-      82: 83 25 44 fd   lw      a1, -44(s0)
-      86: 03 26 04 fd   lw      a2, -48(s0)
-      8a: 83 26 c4 fc   lw      a3, -52(s0)
-      8e: 03 28 84 fc   lw      a6, -56(s0)
-      92: 83 28 44 fc   lw      a7, -60(s0)
-      96: 83 37 84 fe   ld      a5, -24(s0)
-      9a: 03 37 04 fe   ld      a4, -32(s0)
-      9e: 97 00 00 00   auipc   ra, 0
-      a2: e7 80 00 00   jalr    ra
-      a6: ea 60         ld      ra, 152(sp)
-      a8: 4a 64         ld      s0, 144(sp)
-      aa: 0d 61         addi    sp, sp, 160
-      ac: 82 80         ret
+      30: 35 71         addi    sp, sp, -160 ; |
+      32: 06 ed         sd      ra, 152(sp)  ; | prolog
+      34: 22 e9         sd      s0, 144(sp)  ; |
+      36: 00 11         addi    s0, sp, 160  ; |
+      38: c2 82         mv      t0, a6       ;
+      3a: 3e 88         mv      a6, a5       ;
+      3c: aa 87         mv      a5, a0       ;
+      3e: 08 60         ld      a0, 0(s0)    ;
+      40: 23 34 54 fe   sd      t0, -24(s0)  ;
+      44: 23 30 04 ff   sd      a6, -32(s0)  ;
+      48: 23 2e f4 fc   sw      a5, -36(s0)  ;
+      4c: 23 2c b4 fc   sw      a1, -40(s0)  ;
+      50: 23 2a c4 fc   sw      a2, -44(s0)  ;
+      54: 23 28 d4 fc   sw      a3, -48(s0)  ;
+      58: 23 26 e4 fc   sw      a4, -52(s0)  ;
+      5c: 23 24 14 fd   sw      a7, -56(s0)  ;
+      60: 23 22 a4 fc   sw      a0, -60(s0)  ;
+      64: 13 05 04 f6   addi    a0, s0, -160 ;
+      68: 81 45         li      a1, 0        ;
+      6a: 13 06 40 06   li      a2, 100      ;
+      6e: 97 00 00 00   auipc   ra, 0        ;
+      72: e7 80 00 00   jalr    ra           ;
+      76: 13 05 c0 04   li      a0, 76       ;
+      7a: 23 00 a4 f6   sb      a0, -160(s0) ;
+      7e: 03 25 84 fd   lw      a0, -40(s0)  ;
+      82: 83 25 44 fd   lw      a1, -44(s0)  ;
+      86: 03 26 04 fd   lw      a2, -48(s0)  ;
+      8a: 83 26 c4 fc   lw      a3, -52(s0)  ;
+      8e: 03 28 84 fc   lw      a6, -56(s0)  ;
+      92: 83 28 44 fc   lw      a7, -60(s0)  ;
+      96: 83 37 84 fe   ld      a5, -24(s0)  ;
+      9a: 03 37 04 fe   ld      a4, -32(s0)  ;
+      9e: 97 00 00 00   auipc   ra, 0        ;
+      a2: e7 80 00 00   jalr    ra           ;
+      a6: ea 60         ld      ra, 152(sp)  ; |
+      a8: 4a 64         ld      s0, 144(sp)  ; |
+      aa: 0d 61         addi    sp, sp, 160  ; | epilog
+      ac: 82 80         ret                  ; |
 
 00000000000000ae <main>:
-      ae: 39 71         addi    sp, sp, -64
-      b0: 06 fc         sd      ra, 56(sp)
-      b2: 22 f8         sd      s0, 48(sp)
-      b4: 80 00         addi    s0, sp, 64
-      b6: 01 45         li      a0, 0
-      b8: 23 38 a4 fc   sd      a0, -48(s0)
-      bc: 23 26 a4 fe   sw      a0, -20(s0)
-      c0: 95 45         li      a1, 5
-      c2: 23 2c b4 fc   sw      a1, -40(s0)
-      c6: 99 45         li      a1, 6
-      c8: 23 2e b4 fc   sw      a1, -36(s0)
-      cc: 9d 45         li      a1, 7
-      ce: 23 30 b4 fe   sd      a1, -32(s0)
-      d2: 03 38 04 fe   ld      a6, -32(s0)
-      d6: 83 37 84 fd   ld      a5, -40(s0)
-      da: 0a 86         mv      a2, sp
-      dc: a5 45         li      a1, 9
-      de: 0c e2         sd      a1, 0(a2)
-      e0: 85 45         li      a1, 1
-      e2: 09 46         li      a2, 2
-      e4: 8d 46         li      a3, 3
-      e6: 11 47         li      a4, 4
-      e8: a1 48         li      a7, 8
-      ea: 97 00 00 00   auipc   ra, 0
-      ee: e7 80 00 00   jalr    ra
-      f2: 03 35 04 fd   ld      a0, -48(s0)
-      f6: e2 70         ld      ra, 56(sp)
-      f8: 42 74         ld      s0, 48(sp)
-      fa: 21 61         addi    sp, sp, 64
-      fc: 82 80         ret
+      ae: 39 71         addi    sp, sp, -64  ; |
+      b0: 06 fc         sd      ra, 56(sp)   ; | prolog
+      b2: 22 f8         sd      s0, 48(sp)   ; |        s0 = fp (frame pointer)
+      b4: 80 00         addi    s0, sp, 64   ; |
+      b6: 01 45         li      a0, 0        ; arg 0
+      b8: 23 38 a4 fc   sd      a0, -48(s0)  ; write 0LL to local area on stack, is restored below into a0 on return as retval
+      bc: 23 26 a4 fe   sw      a0, -20(s0)  ; write 0 to fp-20 - unsure why
+      c0: 95 45         li      a1, 5        ; \
+      c2: 23 2c b4 fc   sw      a1, -40(s0)  ; | create struct to pass in local frame
+      c6: 99 45         li      a1, 6        ; |
+      c8: 23 2e b4 fc   sw      a1, -36(s0)  ; |
+      cc: 9d 45         li      a1, 7        ; |
+      ce: 23 30 b4 fe   sd      a1, -32(s0)  ; /
+      d2: 03 38 04 fe   ld      a6, -32(s0)  ; \
+      d6: 83 37 84 fd   ld      a5, -40(s0)  ; / arg 5 (struct A), passed in regs as 2 dword
+      da: 0a 86         mv      a2, sp       ; \
+      dc: a5 45         li      a1, 9        ; | "push" arg 7 onto stack
+      de: 0c e2         sd      a1, 0(a2)    ; /
+      e0: 85 45         li      a1, 1        ; arg 1
+      e2: 09 46         li      a2, 2        ; arg 2
+      e4: 8d 46         li      a3, 3        ; arg 3
+      e6: 11 47         li      a4, 4        ; arg 4
+      e8: a1 48         li      a7, 8        ; arg 6
+      ea: 97 00 00 00   auipc   ra, 0        ; |
+      ee: e7 80 00 00   jalr    ra           ; | build relative call addr and call (offset 0 b/c not relocated)
+      f2: 03 35 04 fd   ld      a0, -48(s0)  ; a0 = 0 (stored above), return value
+      f6: e2 70         ld      ra, 56(sp)   ; |
+      f8: 42 74         ld      s0, 48(sp)   ; |
+      fa: 21 61         addi    sp, sp, 64   ; | epilog
+      fc: 82 80         ret                  ; |
 
 
 
@@ -1754,72 +1754,72 @@
       42: 82 80         ret
 
 0000000000000044 <main>:
-      44: 75 71         addi    sp, sp, -144
-      46: 06 e5         sd      ra, 136(sp)
-      48: 22 e1         sd      s0, 128(sp)
-      4a: 00 09         addi    s0, sp, 144
-      4c: 01 45         li      a0, 0
-      4e: 23 38 a4 f6   sd      a0, -144(s0)
-      52: 23 26 a4 fe   sw      a0, -20(s0)
-      56: 37 05 80 3f   lui     a0, 260096
-      5a: 23 24 a4 fe   sw      a0, -24(s0)
-      5e: 37 05 00 40   lui     a0, 262144
-      62: 23 20 a4 fe   sw      a0, -32(s0)
-      66: 37 05 40 40   lui     a0, 263168
-      6a: 23 22 a4 fe   sw      a0, -28(s0)
-      6e: 37 05 80 40   lui     a0, 264192
-      72: 23 2a a4 fc   sw      a0, -44(s0)
-      76: 37 05 a0 40   lui     a0, 264704
-      7a: 23 2c a4 fc   sw      a0, -40(s0)
-      7e: 37 05 c0 40   lui     a0, 265216
-      82: 23 2e a4 fc   sw      a0, -36(s0)
-      86: 13 05 f0 3f   li      a0, 1023
-      8a: 52 15         slli    a0, a0, 52
-      8c: 23 34 a4 fc   sd      a0, -56(s0)
-      90: 05 45         li      a0, 1
-      92: 7a 15         slli    a0, a0, 62
-      94: 23 3c a4 fa   sd      a0, -72(s0)
-      98: 37 15 80 00   lui     a0, 2049
-      9c: 1e 15         slli    a0, a0, 39
-      9e: 23 30 a4 fc   sd      a0, -64(s0)
-      a2: 13 05 10 40   li      a0, 1025
-      a6: 52 15         slli    a0, a0, 52
-      a8: 23 30 a4 fa   sd      a0, -96(s0)
-      ac: 37 55 00 01   lui     a0, 4101
-      b0: 1a 15         slli    a0, a0, 38
-      b2: 23 34 a4 fa   sd      a0, -88(s0)
-      b6: 37 35 80 00   lui     a0, 2051
-      ba: 1e 15         slli    a0, a0, 39
-      bc: 23 38 a4 fa   sd      a0, -80(s0)
-      c0: 07 25 84 fe   flw     fa0, -24(s0)
-      c4: 87 25 04 fe   flw     fa1, -32(s0)
-      c8: 07 26 44 fe   flw     fa2, -28(s0)
-      cc: 03 25 c4 fd   lw      a0, -36(s0)
-      d0: 23 2c a4 f8   sw      a0, -104(s0)
-      d4: 03 65 84 fd   lwu     a0, -40(s0)
-      d8: 02 15         slli    a0, a0, 32
-      da: 83 65 44 fd   lwu     a1, -44(s0)
-      de: 4d 8d         or      a0, a0, a1
-      e0: 23 38 a4 f8   sd      a0, -112(s0)
-      e4: 83 35 84 f9   ld      a1, -104(s0)
-      e8: 03 35 04 f9   ld      a0, -112(s0)
-      ec: 87 36 84 fc   fld     fa3, -56(s0)
-      f0: 07 37 84 fb   fld     fa4, -72(s0)
-      f4: 87 37 04 fc   fld     fa5, -64(s0)
-      f8: 03 36 04 fb   ld      a2, -80(s0)
-      fc: 23 34 c4 f8   sd      a2, -120(s0)
-     100: 03 36 84 fa   ld      a2, -88(s0)
-     104: 23 30 c4 f8   sd      a2, -128(s0)
-     108: 03 36 04 fa   ld      a2, -96(s0)
-     10c: 23 3c c4 f6   sd      a2, -136(s0)
-     110: 13 06 84 f7   addi    a2, s0, -136
-     114: 97 00 00 00   auipc   ra, 0
-     118: e7 80 00 00   jalr    ra
-     11c: 03 35 04 f7   ld      a0, -144(s0)
-     120: aa 60         ld      ra, 136(sp)
-     122: 0a 64         ld      s0, 128(sp)
-     124: 49 61         addi    sp, sp, 144
-     126: 82 80         ret
+      44: 75 71         addi    sp, sp, -144 ; |
+      46: 06 e5         sd      ra, 136(sp)  ; | prolog
+      48: 22 e1         sd      s0, 128(sp)  ; |
+      4a: 00 09         addi    s0, sp, 144  ; /
+      4c: 01 45         li      a0, 0        ; \
+      4e: 23 38 a4 f6   sd      a0, -144(s0) ; | write 0LL to local area on stack, is restored below into a0 on return as retval
+      52: 23 26 a4 fe   sw      a0, -20(s0)  ; store in arg 0 = 0 to local stack area (pointless, as unused, but probably to (re)use a0, freely)
+      56: 37 05 80 3f   lui     a0, 260096   ; |
+      5a: 23 24 a4 fe   sw      a0, -24(s0)  ; / struct A on local stack area
+      5e: 37 05 00 40   lui     a0, 262144   ; \
+      62: 23 20 a4 fe   sw      a0, -32(s0)  ; |
+      66: 37 05 40 40   lui     a0, 263168   ; | struct B on local stack area
+      6a: 23 22 a4 fe   sw      a0, -28(s0)  ; /
+      6e: 37 05 80 40   lui     a0, 264192   ; \
+      72: 23 2a a4 fc   sw      a0, -44(s0)  ; |
+      76: 37 05 a0 40   lui     a0, 264704   ; |
+      7a: 23 2c a4 fc   sw      a0, -40(s0)  ; | struct C on local stack area
+      7e: 37 05 c0 40   lui     a0, 265216   ; |
+      82: 23 2e a4 fc   sw      a0, -36(s0)  ; /
+      86: 13 05 f0 3f   li      a0, 1023     ; \
+      8a: 52 15         slli    a0, a0, 52   ; | struct D on local stack area
+      8c: 23 34 a4 fc   sd      a0, -56(s0)  ; /
+      90: 05 45         li      a0, 1        ; \
+      92: 7a 15         slli    a0, a0, 62   ; |
+      94: 23 3c a4 fa   sd      a0, -72(s0)  ; |
+      98: 37 15 80 00   lui     a0, 2049     ; | struct E on local stack area
+      9c: 1e 15         slli    a0, a0, 39   ; |
+      9e: 23 30 a4 fc   sd      a0, -64(s0)  ; /
+      a2: 13 05 10 40   li      a0, 1025     ; \
+      a6: 52 15         slli    a0, a0, 52   ; |
+      a8: 23 30 a4 fa   sd      a0, -96(s0)  ; |
+      ac: 37 55 00 01   lui     a0, 4101     ; |
+      b0: 1a 15         slli    a0, a0, 38   ; | struct F on local stack area
+      b2: 23 34 a4 fa   sd      a0, -88(s0)  ; |
+      b6: 37 35 80 00   lui     a0, 2051     ; |
+      ba: 1e 15         slli    a0, a0, 39   ; |
+      bc: 23 38 a4 fa   sd      a0, -80(s0)  ; |
+      c0: 07 25 84 fe   flw     fa0, -24(s0) ; arg 0 (struct A)
+      c4: 87 25 04 fe   flw     fa1, -32(s0) ; |
+      c8: 07 26 44 fe   flw     fa2, -28(s0) ; / arg 1 (struct B)
+      cc: 03 25 c4 fd   lw      a0, -36(s0)  ; \
+      d0: 23 2c a4 f8   sw      a0, -104(s0) ; |
+      d4: 03 65 84 fd   lwu     a0, -40(s0)  ; |
+      d8: 02 15         slli    a0, a0, 32   ; |
+      da: 83 65 44 fd   lwu     a1, -44(s0)  ; | arg 2 (struct C, passed in 2 int regs, b/c more than 2 floats and less than 128b)
+      de: 4d 8d         or      a0, a0, a1   ; |
+      e0: 23 38 a4 f8   sd      a0, -112(s0) ; |
+      e4: 83 35 84 f9   ld      a1, -104(s0) ; |
+      e8: 03 35 04 f9   ld      a0, -112(s0) ; |
+      ec: 87 36 84 fc   fld     fa3, -56(s0) ; arg 3 (struct D)
+      f0: 07 37 84 fb   fld     fa4, -72(s0) ; |
+      f4: 87 37 04 fc   fld     fa5, -64(s0) ; / arg 4 (struct E)
+      f8: 03 36 04 fb   ld      a2, -80(s0)  ; \
+      fc: 23 34 c4 f8   sd      a2, -120(s0) ; |
+     100: 03 36 84 fa   ld      a2, -88(s0)  ; |
+     104: 23 30 c4 f8   sd      a2, -128(s0) ; | arg 5 (struct F, passed indirectly, b/c greater than 128b)
+     108: 03 36 04 fa   ld      a2, -96(s0)  ; |
+     10c: 23 3c c4 f6   sd      a2, -136(s0) ; |
+     110: 13 06 84 f7   addi    a2, s0, -136 ; /
+     114: 97 00 00 00   auipc   ra, 0        ; \
+     118: e7 80 00 00   jalr    ra           ; | build relative call addr and call (offset 0 b/c not relocated)
+     11c: 03 35 04 f7   ld      a0, -144(s0) ; a0 = 0 (stored above), return value
+     120: aa 60         ld      ra, 136(sp)  ; |
+     122: 0a 64         ld      s0, 128(sp)  ; |
+     124: 49 61         addi    sp, sp, 144  ; | epilog
+     126: 82 80         ret                  ; |
 
 
 
@@ -1959,59 +1959,59 @@
       1a: 82 80         ret
 
 000000000000001c <f1>:
-      1c: 01 11         addi    sp, sp, -32
-      1e: 06 ec         sd      ra, 24(sp)
-      20: 22 e8         sd      s0, 16(sp)
-      22: 00 10         addi    s0, sp, 32
-      24: aa 85         mv      a1, a0
-      26: 23 34 b4 fe   sd      a1, -24(s0)
-      2a: 01 45         li      a0, 0
-      2c: 88 f1         sd      a0, 32(a1)
-      2e: 88 ed         sd      a0, 24(a1)
-      30: 88 e9         sd      a0, 16(a1)
-      32: 88 e5         sd      a0, 8(a1)
-      34: 88 e1         sd      a0, 0(a1)
-      36: 09 65         lui     a0, 2
-      38: 1b 05 35 c0   addiw   a0, a0, -1021
-      3c: 88 e1         sd      a0, 0(a1)
-      3e: 13 05 30 06   li      a0, 99
-      42: 88 e5         sd      a0, 8(a1)
-      44: 13 05 d0 f9   li      a0, -99
-      48: 88 e9         sd      a0, 16(a1)
-      4a: 7d 75         lui     a0, 1048575
-      4c: 1b 05 25 3e   addiw   a0, a0, 994
-      50: 88 ed         sd      a0, 24(a1)
-      52: 13 05 00 02   li      a0, 32
-      56: 88 f1         sd      a0, 32(a1)
-      58: e2 60         ld      ra, 24(sp)
-      5a: 42 64         ld      s0, 16(sp)
-      5c: 05 61         addi    sp, sp, 32
-      5e: 82 80         ret
+      1c: 01 11         addi    sp, sp, -32   ; |
+      1e: 06 ec         sd      ra, 24(sp)    ; | prolog
+      20: 22 e8         sd      s0, 16(sp)    ; |
+      22: 00 10         addi    s0, sp, 32    ; |
+      24: aa 85         mv      a1, a0        ; in arg 0 (ptr to retval struct) -> a1
+      26: 23 34 b4 fe   sd      a1, -24(s0)   ;
+      2a: 01 45         li      a0, 0         ; |
+      2c: 88 f1         sd      a0, 32(a1)    ; |
+      2e: 88 ed         sd      a0, 24(a1)    ; |
+      30: 88 e9         sd      a0, 16(a1)    ; | clear struct Big b
+      32: 88 e5         sd      a0, 8(a1)     ; |
+      34: 88 e1         sd      a0, 0(a1)     ; /
+      36: 09 65         lui     a0, 2         ; \
+      38: 1b 05 35 c0   addiw   a0, a0, -1021 ; | write 7171LL to retval struct space
+      3c: 88 e1         sd      a0, 0(a1)     ; /
+      3e: 13 05 30 06   li      a0, 99        ; \
+      42: 88 e5         sd      a0, 8(a1)     ; / write 99LL to retval struct space
+      44: 13 05 d0 f9   li      a0, -99       ; \
+      48: 88 e9         sd      a0, 16(a1)    ; / write -99LL to retval struct space
+      4a: 7d 75         lui     a0, 1048575   ; \
+      4c: 1b 05 25 3e   addiw   a0, a0, 994   ; | write -3102LL to retval struct space
+      50: 88 ed         sd      a0, 24(a1)    ; /
+      52: 13 05 00 02   li      a0, 32        ; \
+      56: 88 f1         sd      a0, 32(a1)    ; / write 32L to retval struct space
+      58: e2 60         ld      ra, 24(sp)    ; |
+      5a: 42 64         ld      s0, 16(sp)    ; |
+      5c: 05 61         addi    sp, sp, 32    ; | epilog
+      5e: 82 80         ret                   ; |
 
 0000000000000060 <main>:
-      60: 39 71         addi    sp, sp, -64
-      62: 06 fc         sd      ra, 56(sp)
-      64: 22 f8         sd      s0, 48(sp)
-      66: 80 00         addi    s0, sp, 64
-      68: 01 45         li      a0, 0
-      6a: 23 26 a4 fe   sw      a0, -20(s0)
-      6e: 97 00 00 00   auipc   ra, 0
-      72: e7 80 00 00   jalr    ra
-      76: a3 05 a4 fe   sb      a0, -21(s0)
-      7a: 13 05 04 fc   addi    a0, s0, -64
-      7e: 97 00 00 00   auipc   ra, 0
-      82: e7 80 00 00   jalr    ra
-      86: 03 35 84 fc   ld      a0, -56(s0)
-      8a: 83 35 04 fd   ld      a1, -48(s0)
-      8e: 2d 9d         addw    a0, a0, a1
-      90: 83 35 04 fe   ld      a1, -32(s0)
-      94: 2d 9d         addw    a0, a0, a1
-      96: 83 45 b4 fe   lbu     a1, -21(s0)
-      9a: 2d 9d         addw    a0, a0, a1
-      9c: e2 70         ld      ra, 56(sp)
-      9e: 42 74         ld      s0, 48(sp)
-      a0: 21 61         addi    sp, sp, 64
-      a2: 82 80         ret
+      60: 39 71         addi    sp, sp, -64   ; |
+      62: 06 fc         sd      ra, 56(sp)    ; | prolog
+      64: 22 f8         sd      s0, 48(sp)    ; |
+      66: 80 00         addi    s0, sp, 64    ; |
+      68: 01 45         li      a0, 0         ;
+      6a: 23 26 a4 fe   sw      a0, -20(s0)   ;
+      6e: 97 00 00 00   auipc   ra, 0         ; |
+      72: e7 80 00 00   jalr    ra            ; | call f0 (offset 0 b/c not relocated)
+      76: a3 05 a4 fe   sb      a0, -21(s0)   ;
+      7a: 13 05 04 fc   addi    a0, s0, -64   ; ptr to space for big struct passed as implicit first param
+      7e: 97 00 00 00   auipc   ra, 0         ; |
+      82: e7 80 00 00   jalr    ra            ; | call f1 (offset 0 b/c not relocated)
+      86: 03 35 84 fc   ld      a0, -56(s0)   ;
+      8a: 83 35 04 fd   ld      a1, -48(s0)   ;
+      8e: 2d 9d         addw    a0, a0, a1    ;
+      90: 83 35 04 fe   ld      a1, -32(s0)   ;
+      94: 2d 9d         addw    a0, a0, a1    ;
+      96: 83 45 b4 fe   lbu     a1, -21(s0)   ;
+      9a: 2d 9d         addw    a0, a0, a1    ;
+      9c: e2 70         ld      ra, 56(sp)    ; |
+      9e: 42 74         ld      s0, 48(sp)    ; |
+      a0: 21 61         addi    sp, sp, 64    ; | epilog
+      a2: 82 80         ret                   ; |
 
 
 
@@ -2145,59 +2145,59 @@
       42: 82 80         ret
 
 0000000000000044 <main>:
-      44: 5d 71         addi    sp, sp, -80
-      46: 86 e4         sd      ra, 72(sp)
-      48: a2 e0         sd      s0, 64(sp)
-      4a: 80 08         addi    s0, sp, 80
-      4c: 01 45         li      a0, 0
-      4e: 23 38 a4 fa   sd      a0, -80(s0)
-      52: 23 26 a4 fe   sw      a0, -20(s0)
-      56: 23 05 a4 fe   sb      a0, -22(s0)
-      5a: 05 45         li      a0, 1
-      5c: a3 05 a4 fe   sb      a0, -21(s0)
-      60: 09 45         li      a0, 2
-      62: a3 04 a4 fe   sb      a0, -23(s0)
-      66: 0d 45         li      a0, 3
-      68: 23 13 a4 fe   sh      a0, -26(s0)
-      6c: 11 45         li      a0, 4
-      6e: 23 20 a4 fe   sw      a0, -32(s0)
-      72: 37 05 a0 40   lui     a0, 264704
-      76: 23 2e a4 fc   sw      a0, -36(s0)
-      7a: 37 35 80 00   lui     a0, 2051
-      7e: 1e 15         slli    a0, a0, 39
-      80: 23 38 a4 fc   sd      a0, -48(s0)
-      84: 1d 45         li      a0, 7
-      86: a3 06 a4 fc   sb      a0, -51(s0)
-      8a: 21 45         li      a0, 8
-      8c: 23 07 a4 fc   sb      a0, -50(s0)
-      90: 25 45         li      a0, 9
-      92: a3 07 a4 fc   sb      a0, -49(s0)
-      96: 03 45 b4 fe   lbu     a0, -21(s0)
-      9a: 1b 15 85 00   slliw   a0, a0, 8
-      9e: 83 45 a4 fe   lbu     a1, -22(s0)
-      a2: 4d 8d         or      a0, a0, a1
-      a4: 23 10 a4 fc   sh      a0, -64(s0)
-      a8: 03 35 04 fc   ld      a0, -64(s0)
-      ac: 83 45 94 fe   lbu     a1, -23(s0)
-      b0: 03 56 64 fe   lhu     a2, -26(s0)
-      b4: 83 66 04 fe   lwu     a3, -32(s0)
-      b8: 07 25 c4 fd   flw     fa0, -36(s0)
-      bc: 87 35 04 fd   fld     fa1, -48(s0)
-      c0: 03 47 f4 fc   lbu     a4, -49(s0)
-      c4: 23 0d e4 fa   sb      a4, -70(s0)
-      c8: 03 47 e4 fc   lbu     a4, -50(s0)
-      cc: 1b 17 87 00   slliw   a4, a4, 8
-      d0: 83 47 d4 fc   lbu     a5, -51(s0)
-      d4: 5d 8f         or      a4, a4, a5
-      d6: 23 1c e4 fa   sh      a4, -72(s0)
-      da: 03 37 84 fb   ld      a4, -72(s0)
-      de: 97 00 00 00   auipc   ra, 0
-      e2: e7 80 00 00   jalr    ra
-      e6: 03 35 04 fb   ld      a0, -80(s0)
-      ea: a6 60         ld      ra, 72(sp)
-      ec: 06 64         ld      s0, 64(sp)
-      ee: 61 61         addi    sp, sp, 80
-      f0: 82 80         ret
+      44: 5d 71         addi    sp, sp, -80  ; |
+      46: 86 e4         sd      ra, 72(sp)   ; | prolog
+      48: a2 e0         sd      s0, 64(sp)   ; |
+      4a: 80 08         addi    s0, sp, 80   ; |
+      4c: 01 45         li      a0, 0        ;
+      4e: 23 38 a4 fa   sd      a0, -80(s0)  ;
+      52: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      56: 23 05 a4 fe   sb      a0, -22(s0)  ;
+      5a: 05 45         li      a0, 1        ;
+      5c: a3 05 a4 fe   sb      a0, -21(s0)  ;
+      60: 09 45         li      a0, 2        ;
+      62: a3 04 a4 fe   sb      a0, -23(s0)  ;
+      66: 0d 45         li      a0, 3        ;
+      68: 23 13 a4 fe   sh      a0, -26(s0)  ;
+      6c: 11 45         li      a0, 4        ;
+      6e: 23 20 a4 fe   sw      a0, -32(s0)  ;
+      72: 37 05 a0 40   lui     a0, 264704   ;
+      76: 23 2e a4 fc   sw      a0, -36(s0)  ;
+      7a: 37 35 80 00   lui     a0, 2051     ;
+      7e: 1e 15         slli    a0, a0, 39   ;
+      80: 23 38 a4 fc   sd      a0, -48(s0)  ;
+      84: 1d 45         li      a0, 7        ;
+      86: a3 06 a4 fc   sb      a0, -51(s0)  ;
+      8a: 21 45         li      a0, 8        ;
+      8c: 23 07 a4 fc   sb      a0, -50(s0)  ;
+      90: 25 45         li      a0, 9        ;
+      92: a3 07 a4 fc   sb      a0, -49(s0)  ;
+      96: 03 45 b4 fe   lbu     a0, -21(s0)  ;
+      9a: 1b 15 85 00   slliw   a0, a0, 8    ;
+      9e: 83 45 a4 fe   lbu     a1, -22(s0)  ;
+      a2: 4d 8d         or      a0, a0, a1   ;
+      a4: 23 10 a4 fc   sh      a0, -64(s0)  ;
+      a8: 03 35 04 fc   ld      a0, -64(s0)  ;
+      ac: 83 45 94 fe   lbu     a1, -23(s0)  ;
+      b0: 03 56 64 fe   lhu     a2, -26(s0)  ;
+      b4: 83 66 04 fe   lwu     a3, -32(s0)  ;
+      b8: 07 25 c4 fd   flw     fa0, -36(s0) ;
+      bc: 87 35 04 fd   fld     fa1, -48(s0) ;
+      c0: 03 47 f4 fc   lbu     a4, -49(s0)  ;
+      c4: 23 0d e4 fa   sb      a4, -70(s0)  ;
+      c8: 03 47 e4 fc   lbu     a4, -50(s0)  ;
+      cc: 1b 17 87 00   slliw   a4, a4, 8    ;
+      d0: 83 47 d4 fc   lbu     a5, -51(s0)  ;
+      d4: 5d 8f         or      a4, a4, a5   ;
+      d6: 23 1c e4 fa   sh      a4, -72(s0)  ;
+      da: 03 37 84 fb   ld      a4, -72(s0)  ;
+      de: 97 00 00 00   auipc   ra, 0        ;
+      e2: e7 80 00 00   jalr    ra           ;
+      e6: 03 35 04 fb   ld      a0, -80(s0)  ;
+      ea: a6 60         ld      ra, 72(sp)   ; |
+      ec: 06 64         ld      s0, 64(sp)   ; |
+      ee: 61 61         addi    sp, sp, 80   ; | epilog
+      f0: 82 80         ret                  ; |
 
 
 
@@ -2295,53 +2295,53 @@
       12: 82 80         ret
 
 0000000000000014 <f2>:
-      14: 01 11         addi    sp, sp, -32
-      16: 06 ec         sd      ra, 24(sp)
-      18: 22 e8         sd      s0, 16(sp)
-      1a: 00 10         addi    s0, sp, 32
-      1c: 23 34 a4 fe   sd      a0, -24(s0)
-      20: e2 60         ld      ra, 24(sp)
-      22: 42 64         ld      s0, 16(sp)
-      24: 05 61         addi    sp, sp, 32
-      26: 82 80         ret
+      14: 01 11         addi    sp, sp, -32  ; |
+      16: 06 ec         sd      ra, 24(sp)   ; | epilog
+      18: 22 e8         sd      s0, 16(sp)   ; |
+      1a: 00 10         addi    s0, sp, 32   ; |
+      1c: 23 34 a4 fe   sd      a0, -24(s0)  ;
+      20: e2 60         ld      ra, 24(sp)   ; |
+      22: 42 64         ld      s0, 16(sp)   ; |
+      24: 05 61         addi    sp, sp, 32   ; | prolog
+      26: 82 80         ret                  ; |
 
 0000000000000028 <f>:
-      28: 39 71         addi    sp, sp, -64
-      2a: 06 fc         sd      ra, 56(sp)
-      2c: 22 f8         sd      s0, 48(sp)
-      2e: 80 00         addi    s0, sp, 64
-      30: 13 05 84 fe   addi    a0, s0, -24
-      34: 23 34 a4 fc   sd      a0, -56(s0)
-      38: 97 00 00 00   auipc   ra, 0
-      3c: e7 80 00 00   jalr    ra
-      40: 05 45         li      a0, 1
-      42: 23 22 a4 fe   sw      a0, -28(s0)
-      46: 03 25 44 fe   lw      a0, -28(s0)
-      4a: 1b 05 b5 07   addiw   a0, a0, 123
-      4e: 23 22 a4 fe   sw      a0, -28(s0)
-      52: 03 25 c4 fe   lw      a0, -20(s0)
-      56: 23 20 a4 fe   sw      a0, -32(s0)
-      5a: 03 65 04 fe   lwu     a0, -32(s0)
-      5e: 97 00 00 00   auipc   ra, 0
-      62: e7 80 00 00   jalr    ra
-      66: 83 35 84 fc   ld      a1, -56(s0)
-      6a: 03 25 44 fe   lw      a0, -28(s0)
-      6e: 1b 05 55 f8   addiw   a0, a0, -123
-      72: 23 22 a4 fe   sw      a0, -28(s0)
-      76: 13 05 c4 fd   addi    a0, s0, -36
-      7a: 23 38 a4 fc   sd      a0, -48(s0)
-      7e: 97 00 00 00   auipc   ra, 0
-      82: e7 80 00 00   jalr    ra
-      86: 03 35 04 fd   ld      a0, -48(s0)
-      8a: 97 00 00 00   auipc   ra, 0
-      8e: e7 80 00 00   jalr    ra
-      92: 03 25 44 fe   lw      a0, -28(s0)
-      96: 51 35         addiw   a0, a0, -12
-      98: 23 22 a4 fe   sw      a0, -28(s0)
-      9c: e2 70         ld      ra, 56(sp)
-      9e: 42 74         ld      s0, 48(sp)
-      a0: 21 61         addi    sp, sp, 64
-      a2: 82 80         ret
+      28: 39 71         addi    sp, sp, -64  ; |
+      2a: 06 fc         sd      ra, 56(sp)   ; | prolog
+      2c: 22 f8         sd      s0, 48(sp)   ; |
+      2e: 80 00         addi    s0, sp, 64   ; |
+      30: 13 05 84 fe   addi    a0, s0, -24  ; ptr to local data (for uninitialized 'n') -> a0
+      34: 23 34 a4 fc   sd      a0, -56(s0)  ; store ptr to local stack area
+      38: 97 00 00 00   auipc   ra, 0        ; |
+      3c: e7 80 00 00   jalr    ra           ; | call NonTrivial ctor (offset 0 b/c not relocated), arg 0 is ptr to data
+      40: 05 45         li      a0, 1        ; a = 1
+      42: 23 22 a4 fe   sw      a0, -28(s0)  ; |
+      46: 03 25 44 fe   lw      a0, -28(s0)  ; | pointless save and reload
+      4a: 1b 05 b5 07   addiw   a0, a0, 123  ; a += 123
+      4e: 23 22 a4 fe   sw      a0, -28(s0)  ;
+      52: 03 25 c4 fe   lw      a0, -20(s0)  ;
+      56: 23 20 a4 fe   sw      a0, -32(s0)  ;
+      5a: 03 65 04 fe   lwu     a0, -32(s0)  ;
+      5e: 97 00 00 00   auipc   ra, 0        ; |
+      62: e7 80 00 00   jalr    ra           ; | call f1 (offset 0 b/c not relocated)
+      66: 83 35 84 fc   ld      a1, -56(s0)  ; load ptr to local 't' -> a1
+      6a: 03 25 44 fe   lw      a0, -28(s0)  ;
+      6e: 1b 05 55 f8   addiw   a0, a0, -123 ;
+      72: 23 22 a4 fe   sw      a0, -28(s0)  ;
+      76: 13 05 c4 fd   addi    a0, s0, -36  ;
+      7a: 23 38 a4 fc   sd      a0, -48(s0)  ;
+      7e: 97 00 00 00   auipc   ra, 0        ; |
+      82: e7 80 00 00   jalr    ra           ; | call copy ctor (offset 0 b/c not relocated), arg 0 ist dst, arg 1 is src
+      86: 03 35 04 fd   ld      a0, -48(s0)  ; arg 0 (ptr to non triv struct)
+      8a: 97 00 00 00   auipc   ra, 0        ; |
+      8e: e7 80 00 00   jalr    ra           ; | call f2 (offset 0 b/c not relocated)
+      92: 03 25 44 fe   lw      a0, -28(s0)  ;
+      96: 51 35         addiw   a0, a0, -12  ;
+      98: 23 22 a4 fe   sw      a0, -28(s0)  ;
+      9c: e2 70         ld      ra, 56(sp)   ; |
+      9e: 42 74         ld      s0, 48(sp)   ; |
+      a0: 21 61         addi    sp, sp, 64   ; | epilog
+      a2: 82 80         ret                  ; |
 
   ; ... snip, removed code of ctor and copy ctor ...
 
@@ -2370,44 +2370,44 @@
   22:   8082                    ret
 
 0000000000000024 <f>:
-  24:   7179                    addi    sp,sp,-48
-  26:   f406                    sd      ra,40(sp)
-  28:   f022                    sd      s0,32(sp)
-  2a:   1800                    addi    s0,sp,48
-  2c:   fd840793                addi    a5,s0,-40
-  30:   853e                    mv      a0,a5
-  32:   00000097                auipc   ra,0x0
-  36:   000080e7                jalr    ra # 32 <f+0xe>
-  3a:   4785                    li      a5,1
-  3c:   fef42623                sw      a5,-20(s0)
-  40:   fec42783                lw      a5,-20(s0)
-  44:   07b7879b                addiw   a5,a5,123
-  48:   fef42623                sw      a5,-20(s0)
-  4c:   fe042783                lw      a5,-32(s0)
-  50:   853e                    mv      a0,a5
-  52:   00000097                auipc   ra,0x0
-  56:   000080e7                jalr    ra # 52 <f+0x2e>
-  5a:   fec42783                lw      a5,-20(s0)
-  5e:   f857879b                addiw   a5,a5,-123
-  62:   fef42623                sw      a5,-20(s0)
-  66:   fd840713                addi    a4,s0,-40
-  6a:   fe840793                addi    a5,s0,-24
-  6e:   85ba                    mv      a1,a4
-  70:   853e                    mv      a0,a5
-  72:   00000097                auipc   ra,0x0
-  76:   000080e7                jalr    ra # 72 <f+0x4e>
-  7a:   fe840793                addi    a5,s0,-24
-  7e:   853e                    mv      a0,a5
-  80:   00000097                auipc   ra,0x0
-  84:   000080e7                jalr    ra # 80 <f+0x5c>
-  88:   fec42783                lw      a5,-20(s0)
-  8c:   37d1                    addiw   a5,a5,-12
-  8e:   fef42623                sw      a5,-20(s0)
-  92:   0001                    nop
-  94:   70a2                    ld      ra,40(sp)
-  96:   7402                    ld      s0,32(sp)
-  98:   6145                    addi    sp,sp,48
-  9a:   8082                    ret
+  24:   7179                    addi    sp,sp,-48        ; |
+  26:   f406                    sd      ra,40(sp)        ; | prolog
+  28:   f022                    sd      s0,32(sp)        ; |
+  2a:   1800                    addi    s0,sp,48         ; |
+  2c:   fd840793                addi    a5,s0,-40        ;
+  30:   853e                    mv      a0,a5            ;
+  32:   00000097                auipc   ra,0x0           ; |
+  36:   000080e7                jalr    ra # 32 <f+0xe>  ; | call ctor (offset 0 b/c not relocated)
+  3a:   4785                    li      a5,1             ; a = 1
+  3c:   fef42623                sw      a5,-20(s0)       ; |
+  40:   fec42783                lw      a5,-20(s0)       ; | pointless save and reload
+  44:   07b7879b                addiw   a5,a5,123        ; a += 123
+  48:   fef42623                sw      a5,-20(s0)       ;
+  4c:   fe042783                lw      a5,-32(s0)       ;
+  50:   853e                    mv      a0,a5            ;
+  52:   00000097                auipc   ra,0x0           ;
+  56:   000080e7                jalr    ra # 52 <f+0x2e> ;
+  5a:   fec42783                lw      a5,-20(s0)       ;
+  5e:   f857879b                addiw   a5,a5,-123       ;
+  62:   fef42623                sw      a5,-20(s0)       ;
+  66:   fd840713                addi    a4,s0,-40        ;
+  6a:   fe840793                addi    a5,s0,-24        ;
+  6e:   85ba                    mv      a1,a4            ;
+  70:   853e                    mv      a0,a5            ;
+  72:   00000097                auipc   ra,0x0           ;
+  76:   000080e7                jalr    ra # 72 <f+0x4e> ;
+  7a:   fe840793                addi    a5,s0,-24        ;
+  7e:   853e                    mv      a0,a5            ;
+  80:   00000097                auipc   ra,0x0           ;
+  84:   000080e7                jalr    ra # 80 <f+0x5c> ;
+  88:   fec42783                lw      a5,-20(s0)       ;
+  8c:   37d1                    addiw   a5,a5,-12        ;
+  8e:   fef42623                sw      a5,-20(s0)       ;
+  92:   0001                    nop                      ;
+  94:   70a2                    ld      ra,40(sp)        ; |
+  96:   7402                    ld      s0,32(sp)        ; |
+  98:   6145                    addi    sp,sp,48         ; | epilog
+  9a:   8082                    ret                      ; |
 
   ; ... snip, removed code of ctor and copy ctor ...
 
@@ -2415,26 +2415,26 @@
 
 ; ---------- C++ trivial and non-trivial aggrs as return values ---------->
 ;
- struct Trivial { int a; };
- struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
- 
- extern "C" {
-     struct Trivial    f1() { return Trivial(); }
- }
- 
-     struct NonTrivial f2() { return NonTrivial(); }
- 
- extern "C" {
-     void f()
-     {
-         int a=1;
-         a += 123;
-         struct Trivial t = f1();
-         a -= 123;
-         struct NonTrivial n = f2();
-         a -= 12;
-     }
- }
+; struct Trivial { int a; };
+; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
+; 
+; extern "C" {
+;     struct Trivial    f1() { return Trivial(); }
+; }
+; 
+;     struct NonTrivial f2() { return NonTrivial(); }
+; 
+; extern "C" {
+;     void f()
+;     {
+;         int a=1;
+;         a += 123;
+;         struct Trivial t = f1();
+;         a -= 123;
+;         struct NonTrivial n = f2();
+;         a -= 12;
+;     }
+; }
 
 
 
@@ -2454,44 +2454,44 @@
       18: 82 80         ret
 
 000000000000001a <_Z2f2v>:
-      1a: 01 11         addi    sp, sp, -32
-      1c: 06 ec         sd      ra, 24(sp)
-      1e: 22 e8         sd      s0, 16(sp)
-      20: 00 10         addi    s0, sp, 32
-      22: 23 34 a4 fe   sd      a0, -24(s0)
-      26: 97 00 00 00   auipc   ra, 0
-      2a: e7 80 00 00   jalr    ra
-      2e: e2 60         ld      ra, 24(sp)
-      30: 42 64         ld      s0, 16(sp)
-      32: 05 61         addi    sp, sp, 32
-      34: 82 80         ret
+      1a: 01 11         addi    sp, sp, -32 ; |
+      1c: 06 ec         sd      ra, 24(sp)  ; | prolog
+      1e: 22 e8         sd      s0, 16(sp)  ; |
+      20: 00 10         addi    s0, sp, 32  ; |
+      22: 23 34 a4 fe   sd      a0, -24(s0) ;
+      26: 97 00 00 00   auipc   ra, 0       ; | call ctor
+      2a: e7 80 00 00   jalr    ra          ; /
+      2e: e2 60         ld      ra, 24(sp)  ; \
+      30: 42 64         ld      s0, 16(sp)  ; |
+      32: 05 61         addi    sp, sp, 32  ; | epilog
+      34: 82 80         ret                 ; |
 
 0000000000000036 <f>:
-      36: 01 11         addi    sp, sp, -32
-      38: 06 ec         sd      ra, 24(sp)
-      3a: 22 e8         sd      s0, 16(sp)
-      3c: 00 10         addi    s0, sp, 32
-      3e: 05 45         li      a0, 1
-      40: 23 26 a4 fe   sw      a0, -20(s0)
-      44: 03 25 c4 fe   lw      a0, -20(s0)
-      48: 1b 05 b5 07   addiw   a0, a0, 123
-      4c: 23 26 a4 fe   sw      a0, -20(s0)
-      50: 97 00 00 00   auipc   ra, 0
-      54: e7 80 00 00   jalr    ra
-      58: 23 24 a4 fe   sw      a0, -24(s0)
-      5c: 03 25 c4 fe   lw      a0, -20(s0)
-      60: 1b 05 55 f8   addiw   a0, a0, -123
-      64: 23 26 a4 fe   sw      a0, -20(s0)
-      68: 13 05 44 fe   addi    a0, s0, -28
-      6c: 97 00 00 00   auipc   ra, 0
-      70: e7 80 00 00   jalr    ra
-      74: 03 25 c4 fe   lw      a0, -20(s0)
-      78: 51 35         addiw   a0, a0, -12
-      7a: 23 26 a4 fe   sw      a0, -20(s0)
-      7e: e2 60         ld      ra, 24(sp)
-      80: 42 64         ld      s0, 16(sp)
-      82: 05 61         addi    sp, sp, 32
-      84: 82 80         ret
+      36: 01 11         addi    sp, sp, -32  ; |
+      38: 06 ec         sd      ra, 24(sp)   ; | prolog
+      3a: 22 e8         sd      s0, 16(sp)   ; |
+      3c: 00 10         addi    s0, sp, 32   ; |
+      3e: 05 45         li      a0, 1        ;
+      40: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      44: 03 25 c4 fe   lw      a0, -20(s0)  ;
+      48: 1b 05 b5 07   addiw   a0, a0, 123  ;
+      4c: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      50: 97 00 00 00   auipc   ra, 0        ; |
+      54: e7 80 00 00   jalr    ra           ; | call f1 (offset 0 b/c not relocated)
+      58: 23 24 a4 fe   sw      a0, -24(s0)  ;
+      5c: 03 25 c4 fe   lw      a0, -20(s0)  ;
+      60: 1b 05 55 f8   addiw   a0, a0, -123 ;
+      64: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      68: 13 05 44 fe   addi    a0, s0, -28  ; ptr to struct space as implicit first param
+      6c: 97 00 00 00   auipc   ra, 0        ; |
+      70: e7 80 00 00   jalr    ra           ; | call f2 (offset 0 b/c not relocated)
+      74: 03 25 c4 fe   lw      a0, -20(s0)  ;
+      78: 51 35         addiw   a0, a0, -12  ;
+      7a: 23 26 a4 fe   sw      a0, -20(s0)  ;
+      7e: e2 60         ld      ra, 24(sp)   ; |
+      80: 42 64         ld      s0, 16(sp)   ; |
+      82: 05 61         addi    sp, sp, 32   ; | epilog
+      84: 82 80         ret                  ; |
 
   ; ... snip, removed code of ctor ...