File tree Expand file tree Collapse file tree 2 files changed +18
-9
lines changed Expand file tree Collapse file tree 2 files changed +18
-9
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
8
8
## [ Unreleased]
9
9
10
+ - Fix calculating ` modifiedWriteValues ` bitmasks with field arrays
10
11
- Fix building without ` yaml ` feature
11
12
- Compatibility with ` riscv ` 0.12 and ` riscv-rt ` 0.13
12
13
- Add ` riscv_config ` section in ` settings.yaml `
Original file line number Diff line number Diff line change @@ -1343,15 +1343,23 @@ pub fn fields(
1343
1343
}
1344
1344
1345
1345
// 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
+ }
1355
1363
}
1356
1364
}
1357
1365
}
You can’t perform that action at this time.
0 commit comments