From de5aa052f234693698fa27564d12958df3fa433e Mon Sep 17 00:00:00 2001 From: lemon Date: Tue, 13 Jun 2023 12:02:28 +0200 Subject: use a hashtable for addr refs --- abi0.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'abi0.c') diff --git a/abi0.c b/abi0.c index 314017b..83e6a0e 100644 --- a/abi0.c +++ b/abi0.c @@ -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)); } } -- cgit v1.2.3