@@ -1375,8 +1375,8 @@ fn collect_in_cluster(
1375
1375
let ( rspec, ignore) = rspec. spec ( ) ;
1376
1376
while i < regs. len ( ) {
1377
1377
match & regs[ i] {
1378
- RegisterCluster :: Register ( Register :: Single ( r ) ) if matchname ( & r. name , rspec) => {
1379
- if let RegisterCluster :: Register ( Register :: Single ( r ) ) = regs. remove ( i) {
1378
+ RegisterCluster :: Register ( r ) if matchname ( & r. name , rspec) => {
1379
+ if let RegisterCluster :: Register ( r ) = regs. remove ( i) {
1380
1380
registers. push ( r) ;
1381
1381
place = place. min ( i) ;
1382
1382
}
@@ -1399,15 +1399,29 @@ fn collect_in_cluster(
1399
1399
) ) ;
1400
1400
}
1401
1401
rspecs. push ( rspec. to_string ( ) ) ;
1402
+
1402
1403
if single {
1403
1404
if registers. len ( ) > 1 {
1404
1405
return Err ( anyhow ! ( "{path}: more than one registers {rspec} found" ) ) ;
1405
1406
}
1406
1407
} else {
1407
1408
registers. sort_by_key ( |r| r. address_offset ) ;
1409
+ if let Register :: Array ( _, rdim) = & registers[ 0 ] {
1410
+ if !registers
1411
+ . iter ( )
1412
+ . skip ( 1 )
1413
+ . all ( |r| matches ! ( r, Register :: Array ( _, d) if d == rdim) )
1414
+ {
1415
+ return Err ( anyhow ! ( "`{rspec}` have different dim blocks" ) ) ;
1416
+ }
1417
+ } else if !registers. iter ( ) . skip ( 1 ) . all ( |r| r. is_single ( ) ) {
1418
+ return Err ( anyhow ! (
1419
+ "Some of `{rspec}` registers are arrays and some are not"
1420
+ ) ) ;
1421
+ }
1408
1422
let bitmasks = registers
1409
1423
. iter ( )
1410
- . map ( RegisterInfo :: get_bitmask)
1424
+ . map ( |r| RegisterInfo :: get_bitmask ( r ) )
1411
1425
. collect :: < Vec < _ > > ( ) ;
1412
1426
let new_dim_index = registers
1413
1427
. iter ( )
@@ -1483,7 +1497,7 @@ fn collect_in_cluster(
1483
1497
config. update_fields = true ;
1484
1498
let cluster = if single {
1485
1499
for ( _, ( rmod, mut registers) ) in rdict. into_iter ( ) {
1486
- let mut reg = registers. swap_remove ( 0 ) . single ( ) ;
1500
+ let mut reg = registers. swap_remove ( 0 ) ;
1487
1501
let rmod = rmod. hash ( ) ?;
1488
1502
reg. process ( rmod, path, & config)
1489
1503
. with_context ( || format ! ( "Processing register `{}`" , reg. name) ) ?;
@@ -1497,7 +1511,7 @@ fn collect_in_cluster(
1497
1511
cinfo. children ( children) . build ( VAL_LVL ) ?. single ( )
1498
1512
} else {
1499
1513
for ( rspec, ( rmod, mut registers) ) in rdict. into_iter ( ) {
1500
- let mut reg = registers. swap_remove ( 0 ) . single ( ) ;
1514
+ let mut reg = registers. swap_remove ( 0 ) ;
1501
1515
let rmod = rmod. hash ( ) ?;
1502
1516
reg. process ( rmod, path, & config)
1503
1517
. with_context ( || format ! ( "Processing register `{}`" , reg. name) ) ?;
0 commit comments