diff --git a/all.h b/all.h index 97cc41c..fc98c52 100644 --- a/all.h +++ b/all.h @@ -478,7 +478,7 @@ int isreg(Ref); int iscmp(int, int *, int *); void emit(int, int, Ref, Ref, Ref); void emiti(Ins); -void idup(Ins **, Ins *, ulong); +void idup(Blk *, Ins *, ulong); Ins *icpy(Ins *, Ins *, ulong); int cmpop(int); int cmpneg(int); diff --git a/amd64/isel.c b/amd64/isel.c index bd645ce..4b831f8 100644 --- a/amd64/isel.c +++ b/amd64/isel.c @@ -828,8 +828,7 @@ amd64_isel(Fn *fn) seljmp(b, fn); for (i=&b->ins[b->nins]; i!=b->ins;) sel(*--i, num, fn); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } free(num); diff --git a/amd64/sysv.c b/amd64/sysv.c index ba4dc8e..8a1fd2a 100644 --- a/amd64/sysv.c +++ b/amd64/sysv.c @@ -508,8 +508,7 @@ split(Fn *fn, Blk *b) ++fn->nblk; bn = newblk(); - bn->nins = &insb[NIns] - curi; - idup(&bn->ins, curi, bn->nins); + idup(bn, curi, &insb[NIns]-curi); curi = &insb[NIns]; bn->visit = ++b->visit; strf(bn->name, "%s.%d", b->name, b->visit); @@ -711,8 +710,7 @@ amd64_sysv_abi(Fn *fn) if (b == fn->start) for (; ral; ral=ral->link) emiti(ral->i); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } while (b != fn->start); if (debug['A']) { diff --git a/arm64/abi.c b/arm64/abi.c index fc23637..42af2be 100644 --- a/arm64/abi.c +++ b/arm64/abi.c @@ -545,8 +545,7 @@ split(Fn *fn, Blk *b) ++fn->nblk; bn = newblk(); - bn->nins = &insb[NIns] - curi; - idup(&bn->ins, curi, bn->nins); + idup(bn, curi, &insb[NIns]-curi); curi = &insb[NIns]; bn->visit = ++b->visit; strf(bn->name, "%s.%d", b->name, b->visit); @@ -791,8 +790,7 @@ arm64_abi(Fn *fn) if (b == fn->start) for (; il; il=il->link) emiti(il->i); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } while (b != fn->start); if (debug['A']) { @@ -843,8 +841,7 @@ apple_extsb(Fn *fn) emit(op, Kw, i->to, i->arg[0], R); } } - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } if (debug['A']) { diff --git a/arm64/isel.c b/arm64/isel.c index 9ce6adc..7d85b92 100644 --- a/arm64/isel.c +++ b/arm64/isel.c @@ -306,8 +306,7 @@ arm64_isel(Fn *fn) seljmp(b, fn); for (i=&b->ins[b->nins]; i!=b->ins;) sel(*--i, fn); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } if (debug['I']) { diff --git a/load.c b/load.c index 6f40cc7..bc808c1 100644 --- a/load.c +++ b/load.c @@ -481,8 +481,7 @@ loadopt(Fn *fn) vgrow(&ib, ++nt); ib[nt-1] = *i; } - b->nins = nt; - idup(&b->ins, ib, nt); + idup(b, ib, nt); } vfree(ib); vfree(ilog); diff --git a/parse.c b/parse.c index e896679..ebfc39f 100644 --- a/parse.c +++ b/parse.c @@ -582,8 +582,7 @@ findblk(char *name) static void closeblk() { - curb->nins = curi - insb; - idup(&curb->ins, insb, curb->nins); + idup(curb, insb, curi-insb); blink = &curb->link; curi = insb; } diff --git a/rega.c b/rega.c index 8e601c9..ab98cd6 100644 --- a/rega.c +++ b/rega.c @@ -439,8 +439,7 @@ doblk(Blk *b, RMap *cur) * the above loop must be changed */ } } - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } /* qsort() comparison function to peel @@ -671,10 +670,9 @@ rega(Fn *fn) blist = b1; fn->nblk++; strf(b1->name, "%s_%s", b->name, s->name); - b1->nins = &insb[NIns] - curi; - stmov += b1->nins; + stmov += &insb[NIns]-curi; stblk += 1; - idup(&b1->ins, curi, b1->nins); + idup(b1, curi, &insb[NIns]-curi); b1->jmp.type = Jjmp; b1->s1 = s; **ps = b1; diff --git a/rv64/abi.c b/rv64/abi.c index 20dc42c..e7f2340 100644 --- a/rv64/abi.c +++ b/rv64/abi.c @@ -642,8 +642,7 @@ rv64_abi(Fn *fn) if (b == fn->start) for (; il; il=il->link) emiti(il->i); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } while (b != fn->start); if (debug['A']) { diff --git a/rv64/isel.c b/rv64/isel.c index 8921a07..55fb645 100644 --- a/rv64/isel.c +++ b/rv64/isel.c @@ -244,8 +244,7 @@ rv64_isel(Fn *fn) seljmp(b, fn); for (i=&b->ins[b->nins]; i!=b->ins;) sel(*--i, fn); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } if (debug['I']) { diff --git a/simpl.c b/simpl.c index 5b16f54..3774f29 100644 --- a/simpl.c +++ b/simpl.c @@ -118,9 +118,7 @@ simpl(Fn *fn) --i; ins(&i, &new, b, fn); } - if (new) { - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); - } + if (new) + idup(b, curi, &insb[NIns]-curi); } } diff --git a/spill.c b/spill.c index 2ce1d4f..67c6540 100644 --- a/spill.c +++ b/spill.c @@ -517,8 +517,7 @@ spill(Fn *fn) p->to = slot(p->to.val); } bscopy(b->in, v); - b->nins = &insb[NIns] - curi; - idup(&b->ins, curi, b->nins); + idup(b, curi, &insb[NIns]-curi); } /* align the locals to a 16 byte boundary */ diff --git a/util.c b/util.c index a2dfffa..babaa58 100644 --- a/util.c +++ b/util.c @@ -253,14 +253,15 @@ emiti(Ins i) } void -idup(Ins **pd, Ins *s, ulong n) +idup(Blk *b, Ins *s, ulong n) { - if (*pd) - vgrow(pd, n); + if (b->ins) + vgrow(&b->ins, n); else - *pd = vnew(n, sizeof(Ins), PFn); + b->ins = vnew(n, sizeof(Ins), PFn); if (n) - memcpy(*pd, s, n * sizeof(Ins)); + memcpy(b->ins, s, n * sizeof(Ins)); + b->nins = n; } Ins *