aboutsummaryrefslogtreecommitdiff
path: root/amd64
diff options
context:
space:
mode:
authorRoland Paterson-Jones <[email protected]>2024-10-23 09:15:30 +0200
committerQuentin Carbonneaux <[email protected]>2025-03-14 09:47:05 +0100
commit0ce9966c235d92553842c33587bb3ded1d3dbaba (patch)
tree0a1b2152c3e7bbc1937d7d2f419d0cbf39acbbd9 /amd64
parent434cf5fdc4ba027f0ac04cd198658860b6fc034a (diff)
Re-use (vgrow) b->ins vector in backend xxx_abi() fn's.
Removes last re-allocation of b->ins.
Diffstat (limited to 'amd64')
-rw-r--r--amd64/sysv.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/amd64/sysv.c b/amd64/sysv.c
index 8a1fd2a..fd10bfd 100644
--- a/amd64/sysv.c
+++ b/amd64/sysv.c
@@ -656,9 +656,9 @@ void
amd64_sysv_abi(Fn *fn)
{
Blk *b;
- Ins *i, *i0, *ip;
+ Ins *i, *i0;
RAlloc *ral;
- int n, fa;
+ int n0, n1, ioff, fa;
for (b=fn->start; b; b=b->link)
b->visit = 0;
@@ -668,12 +668,13 @@ amd64_sysv_abi(Fn *fn)
if (!ispar(i->op))
break;
fa = selpar(fn, b->ins, i);
- n = b->nins - (i - b->ins) + (&insb[NIns] - curi);
- i0 = vnew(n, sizeof(Ins), PFn);
- ip = icpy(ip = i0, curi, &insb[NIns] - curi);
- ip = icpy(ip, i, &b->ins[b->nins] - i);
- b->nins = n;
- b->ins = i0;
+ n0 = &insb[NIns] - curi;
+ ioff = i - b->ins;
+ n1 = b->nins - ioff;
+ vgrow(&b->ins, n0+n1);
+ icpy(b->ins+n0, b->ins+ioff, n1);
+ icpy(b->ins, curi, n0);
+ b->nins = n0+n1;
/* lower calls, returns, and vararg instructions */
ral = 0;