diff options
| author | 2026-04-08 10:26:18 +0200 | |
|---|---|---|
| committer | 2026-04-08 10:26:18 +0200 | |
| commit | 8b79b61ae78c91c069447331ed64d400187bdd77 (patch) | |
| tree | 57a5d9b04c1514ac59c18286cb08393ecd0b1e69 /src/t_x86-64_sysv.c | |
| parent | b8dea129488959adeadc2e444d769f2a2ac709d8 (diff) | |
Implement basic aarch64 struct arg passing ABI
- Missing: vaargs, >2 member HFAs
- Reworked the way stack allocation references are lowered. Now RSTACK
persists throughout all passes until emit. This allows deferring stack
frame layouting until the end in a less messy way than before, which
was emiting frame-pointer relative addresses @ isel time and patching them up
later in emit to account for actual stack frame layout.
Diffstat (limited to 'src/t_x86-64_sysv.c')
| -rw-r--r-- | src/t_x86-64_sysv.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/t_x86-64_sysv.c b/src/t_x86-64_sysv.c index 96f40d6..2404a86 100644 --- a/src/t_x86-64_sysv.c +++ b/src/t_x86-64_sysv.c @@ -200,7 +200,7 @@ vastart(Function *fn, Block *blk, int *curi) int i = *curi + 1; insertinstr(blk, i++, mkinstr2(Ostorei64, 0, dst, rsave)); /* set ap->overflow_arg_area */ - src = insertinstr(blk, i++, mkinstr2(Oadd, KPTR, mkref(RREG, RBP), mkref(RICON, 16+stk0))); + src = insertinstr(blk, i++, mkinstr1(Ocopy, KPTR, mkref(RSTACK, -stk0-8))); dst = insertinstr(blk, i++, mkinstr2(Oadd, KPTR, ap, mkref(RICON, 8))); insertinstr(blk, i++, mkinstr2(Ostorei64, 0, dst, src)); /* set ap->gp_offset */ |