Skip to content

Commit f15a8d3

Browse files
committed
Fix calculating mwv bitmasks with field arrays
1 parent 89af369 commit f15a8d3

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/generate/register.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,15 +1343,23 @@ pub fn fields(
13431343
}
13441344

13451345
// Update register modify bit masks
1346-
let bitmask = (u64::MAX >> (64 - width)) << offset;
1347-
use ModifiedWriteValues::*;
1348-
match mwv {
1349-
Modify | Set | Clear => {}
1350-
OneToSet | OneToClear | OneToToggle => {
1351-
one_to_modify_fields_bitmap |= bitmask;
1352-
}
1353-
ZeroToClear | ZeroToSet | ZeroToToggle => {
1354-
zero_to_modify_fields_bitmap |= bitmask;
1346+
let offsets = match f {
1347+
MaybeArray::Array(info, dim) => (0..dim.dim)
1348+
.map(|i| i * dim.dim_increment + info.bit_offset())
1349+
.collect(),
1350+
MaybeArray::Single(info) => vec![info.bit_offset()],
1351+
};
1352+
for o in offsets {
1353+
let bitmask = (u64::MAX >> (64 - width)) << o;
1354+
use ModifiedWriteValues::*;
1355+
match mwv {
1356+
Modify | Set | Clear => {}
1357+
OneToSet | OneToClear | OneToToggle => {
1358+
one_to_modify_fields_bitmap |= bitmask;
1359+
}
1360+
ZeroToClear | ZeroToSet | ZeroToToggle => {
1361+
zero_to_modify_fields_bitmap |= bitmask;
1362+
}
13551363
}
13561364
}
13571365
}

0 commit comments

Comments
 (0)