From 7a318363ec4fdcd80d9d0154cef393c9bf205d5e Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 14 Sep 2025 17:59:39 +0200 Subject: preliminary pie and pic --- c.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'c.c') diff --git a/c.c b/c.c index 6833722..2d484c4 100644 --- a/c.c +++ b/c.c @@ -2447,10 +2447,11 @@ genptroff(struct function *fn, enum op op, uint siz, union ref ptr, assert(siz); idx = cvt(fn, targ_sizetype, tt, idx); - if (siz == 1) off = idx; - else if (idx.t == RICON) - off = mkintcon(cls, idx.i * siz); - else if (ispo2(siz)) + if (siz == 1) off = idx; + else if (idx.t == RICON) { + if (op == Osub) op = Oadd, idx.i = -idx.i; + off = mkintcon(cls, idx.i * (int)siz); + } else if (ispo2(siz)) off = addinstr(fn, mkinstr(Oshl, cls, .l = idx, .r = mkintcon(cls, ilog2(siz)))); else -- cgit v1.2.3