diff --git a/base/src/test/util_mmio/main.cc b/base/src/test/util_mmio/main.cc index 5b0f64c327..a369ebd774 100644 --- a/base/src/test/util_mmio/main.cc +++ b/base/src/test/util_mmio/main.cc @@ -63,11 +63,15 @@ struct Test_mmio : public Mmio struct Reg_64 : Register<0x00, 64> { - struct Bits_0 : Bitfield<48,12> { }; + struct Bits_0 : Bitfield<48,12> { }; struct Bits_1 : Bitfield<24,20> { }; - struct Bits_2 : Bitfield<44,4> { }; + struct Bits_2 : Bitfield<44,4> { }; struct Bits_3 : Bitfield<0,24> { }; + struct Bits_4 : Bitfield<60,4> { }; }; + struct Bitset_64_0 : Bitset_2<Reg_64::Bits_0, Reg_64::Bits_1> { }; + struct Bitset_64_1 : Bitset_3<Reg_64::Bits_4, Reg_64::Bits_3, Reg_64::Bits_2> { }; + struct Bitset_64 : Bitset_2<Bitset_64_0, Bitset_64_1> { }; struct Reg : Register<0x04, 8> { @@ -469,6 +473,14 @@ int main() if (mmio.read<Reg::Bits_2>() != BITS_2) { error(__LINE__); } if (mmio.read<Reg::Bits_3>() != BITS_3) { error(__LINE__); } if (compare_mem(mmio_mem, cmp_mem, MMIO_SIZE)) { error(__LINE__); } + + /* bitsets */ + typedef Test_mmio::Bitset_64 Bitset; + enum { BITSET = 0x4abcdef056789123 }; + zero_mem(mmio_mem, MMIO_SIZE); + mmio.write<Bitset>(BITSET); + if (mmio.read<Bitset>() != BITSET) { error(__LINE__); } + if (compare_mem(mmio_mem, cmp_mem, MMIO_SIZE)) { error(__LINE__); } } printf("Test done\n");