diff options
| author | 2025-09-14 23:48:23 +0200 | |
|---|---|---|
| committer | 2025-09-14 23:48:23 +0200 | |
| commit | 8f81060859c6719281499d1f5717fc576256ab9a (patch) | |
| tree | e50ff549d1cc1070132539541b940eda588a4a13 /c.c | |
| parent | 3386b092d8e8b00191ef511ea585fe875578efe7 (diff) | |
fix signed bitfield errata
Diffstat (limited to 'c.c')
| -rw-r--r-- | c.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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))); } |