aboutsummaryrefslogtreecommitdiffhomepage
path: root/c.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-09-14 23:48:23 +0200
committerlemon <lsof@mailbox.org>2025-09-14 23:48:23 +0200
commit8f81060859c6719281499d1f5717fc576256ab9a (patch)
treee50ff549d1cc1070132539541b940eda588a4a13 /c.c
parent3386b092d8e8b00191ef511ea585fe875578efe7 (diff)
fix signed bitfield errata
Diffstat (limited to 'c.c')
-rw-r--r--c.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/c.c b/c.c
index aa9c024..ef4a7a1 100644
--- a/c.c
+++ b/c.c
@@ -2710,10 +2710,10 @@ getbits(struct function *fn, const union type ty, union ref addr, uint off, int
}
} else {
/* shift left and shift right arithmetic to propagate sign bit */
- int sh = 8*typesize(ty) - bitsiz - bitoff;
+ int sh = 8*cls2siz[k] - bitsiz - bitoff;
if (sh)
tmp = addinstr(fn, mkinstr(Oshl, k, .l = tmp, .r = mkintcon(KI4, sh)));
- sh = 8*typesize(ty) - sh + bitoff;
+ sh = 8*cls2siz[k] - sh + bitoff;
if (sh)
tmp = addinstr(fn, mkinstr(Osar, k, .l = tmp, .r = mkintcon(KI4, sh)));
}