#include #include #include #include BITFIELD_START(MOOSE, std::uint32_t) FIELD(IO, 4, 7) FIELD(EL, 16, 31) BITFIELD_END() int main() { MOOSE mo(0xab); auto io = mo.IO(); auto el = mo.EL(); assert(mo.val() == 0xab); assert(io.val() == 0xa); assert(el.val() == 0); io = 0x0; std::printf("reg %08x f %08x\n", mo.val(), io.val()); assert(mo.val() == 0x0b); assert(io.val() == 0x0); assert(el.val() == 0); el = 0xfeef; std::printf("reg %08x f %08x\n", mo.val(), el.val()); assert(mo.val() == 0xfeef000b); assert(io.val() == 0x0); assert(el.val() == 0xfeef); mo = 0xcafeu; assert(mo.val() == 0xcafe); assert(io.val() == 0xf); assert(el.val() == 0x0); assert(mo.val() == 0xcafe); mo |= 0xa00b0000; assert(mo.val() == 0xa00bcafe); assert(io.val() == 0xf); assert(el.val() == 0xa00b); assert(mo.val() == 0xa00bcafe); mo &= 0xffff0000; assert(mo.val() == 0xa00b0000); assert(io.val() == 0x0); assert(el.val() == 0xa00b); el |= 0xc0; assert(mo.val() == 0xa0cb0000); assert(io.val() == 0x0); assert(el.val() == 0xa0cb); el &= 0xf000; assert(mo.val() == 0xa0000000); assert(io.val() == 0x0); assert(el.val() == 0xa000); }