diff options
| author | 2023-06-13 12:02:28 +0200 | |
|---|---|---|
| committer | 2023-06-13 12:02:28 +0200 | |
| commit | de5aa052f234693698fa27564d12958df3fa433e (patch) | |
| tree | 837ed316bc13fe8063dde85e3b075c9357202297 /abi0.c | |
| parent | 3e5c11563f8cb7c843c71a0f761e5b644f39db46 (diff) | |
use a hashtable for addr refs
Diffstat (limited to 'abi0.c')
| -rw-r--r-- | abi0.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -58,6 +58,7 @@ abiarg(struct abiargsvec *abiargs, int *ni, int *nf, int *ns, union irtype ty) static struct instr copyparam(struct abiarg abi) { + struct addr addr = {.base = mkref(RREG, mctarg->bpr), .disp = -abi.stk}; if (abi.reg >= 0) { /* reg */ assert(!abi.ty.isagg); return mkinstr(Ocopy, abi.ty.cls, mkref(RREG, abi.reg)); @@ -71,11 +72,9 @@ copyparam(struct abiarg abi) case KF4: ld = Oloadf4; break; case KF8: ld = Oloadf8; break; } - vpush(&addrtab, ((struct addr) {.base = mkref(RREG, mctarg->bpr), .disp = -abi.stk})); - return mkinstr(ld, abi.ty.cls, mkref(RMORE, addrtab.n - 1)); + return mkinstr(ld, abi.ty.cls, mkaddr(addr)); } else { /* aggregate in stack */ - vpush(&addrtab, ((struct addr) {.base = mkref(RREG, mctarg->bpr), .disp = -abi.stk})); - return mkinstr(Ocopy, KPTR, mkref(RMORE, addrtab.n - 1)); + return mkinstr(Ocopy, KPTR, mkaddr(addr)); } } |