aboutsummaryrefslogtreecommitdiff
path: root/arm64/abi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arm64/abi.c')
-rw-r--r--arm64/abi.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/arm64/abi.c b/arm64/abi.c
index 42af2be..7a2b6f9 100644
--- a/arm64/abi.c
+++ b/arm64/abi.c
@@ -729,9 +729,9 @@ void
arm64_abi(Fn *fn)
{
Blk *b;
- Ins *i, *i0, *ip;
+ Ins *i, *i0;
Insl *il;
- int n;
+ int n0, n1, ioff;
Params p;
for (b=fn->start; b; b=b->link)
@@ -742,12 +742,13 @@ arm64_abi(Fn *fn)
if (!ispar(i->op))
break;
p = 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 */
il = 0;