mirror of
git://repo.or.cz/tinycc.git
synced 2026-06-19 19:34:19 +08:00
Use 2 level strategy to access packed bitfields cleanly:
1) Allow to override the original declaration type with
an auxilary "access type". This solves cases such as
struct {
...
unsigned f1:1;
};
by using VT_BYTE to access f1.
2) Allow byte-wise split accesses using two new functions
load/store_packed_bf. This solves any cases, also ones
such as
struct __attribute((packed)) _s {
unsigned x : 12;
unsigned char y : 7;
unsigned z : 28;
unsigned a: 3;
unsigned b: 3;
unsigned c: 3;
};
where for field 'z':
- VT_INT access from offset 2 would be unaligned
- VT_LLONG from offset 0 would go past the total
struct size (7)
and for field 'a' because it is in two bytes and
aligned access with VT_SHORT/INT is not possible.
Also, static bitfield initializers are stored byte-wise always.
Also, cleanup the struct_layout function a bit.
|
||
|---|---|---|
| .. | ||
| pp | ||
| tests2 | ||
| 42test.h | ||
| abitest.c | ||
| asmtest.S | ||
| boundtest.c | ||
| gcctestsuite.sh | ||
| libtcc_test.c | ||
| Makefile | ||
| tcctest.c | ||
| tcctest.h | ||
| testfp.c | ||
| vla_test.c | ||