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