diff options
| author | 2025-09-08 22:05:33 +0200 | |
|---|---|---|
| committer | 2025-09-08 22:05:33 +0200 | |
| commit | e043811980db560fc2507bb53b644e54c80527dc (patch) | |
| tree | 6ea563d81c9d3767f439e361fc2c884cf4f9b64d /mem.c | |
| parent | 36b5b19bf183cb01525201ccbddd6afa692f21bb (diff) | |
regalloc: start implementing linear scan
Diffstat (limited to 'mem.c')
| -rw-r--r-- | mem.c | 13 |
1 files changed, 3 insertions, 10 deletions
@@ -74,16 +74,9 @@ vpushn_(void **p, int *pcap, uint *pn, uint siz, const void *dat, uint ndat) void vresize_(void **p, int *pcap, uint *pn, uint siz, uint N) { - if (N <= *pn) { - } else if (*pcap > 0 && *pcap < N) { - void *old = *p; - *p = xrealloc(NULL, -(*pcap = -(N * siz))); - if (old) memcpy(*p, old, *pcap * siz); - } else if (*pcap <= 0 && -*pcap < N) { - *pcap = *pcap ? *pcap : -1; - do *pcap *= 2; while (-*pcap < N); - *p = xrealloc(*p, -*pcap * siz); - memset((char *)*p + *pn*siz, 0, (N - *pn) * siz); + while ((*pcap < 0 ? -*pcap : *pcap) < N) { + vpush_(p, pcap, pn, siz); + *pn = *pcap < 0 ? -*pcap : *pcap; } *pn = N; } |