@@ -1375,8 +1375,8 @@ fn collect_in_cluster(
13751375 let ( rspec, ignore) = rspec. spec ( ) ;
13761376 while i < regs. len ( ) {
13771377 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) {
13801380 registers. push ( r) ;
13811381 place = place. min ( i) ;
13821382 }
@@ -1399,15 +1399,29 @@ fn collect_in_cluster(
13991399 ) ) ;
14001400 }
14011401 rspecs. push ( rspec. to_string ( ) ) ;
1402+
14021403 if single {
14031404 if registers. len ( ) > 1 {
14041405 return Err ( anyhow ! ( "{path}: more than one registers {rspec} found" ) ) ;
14051406 }
14061407 } else {
14071408 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+ }
14081422 let bitmasks = registers
14091423 . iter ( )
1410- . map ( RegisterInfo :: get_bitmask)
1424+ . map ( |r| RegisterInfo :: get_bitmask ( r ) )
14111425 . collect :: < Vec < _ > > ( ) ;
14121426 let new_dim_index = registers
14131427 . iter ( )
@@ -1483,7 +1497,7 @@ fn collect_in_cluster(
14831497 config. update_fields = true ;
14841498 let cluster = if single {
14851499 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 ) ;
14871501 let rmod = rmod. hash ( ) ?;
14881502 reg. process ( rmod, path, & config)
14891503 . with_context ( || format ! ( "Processing register `{}`" , reg. name) ) ?;
@@ -1497,7 +1511,7 @@ fn collect_in_cluster(
14971511 cinfo. children ( children) . build ( VAL_LVL ) ?. single ( )
14981512 } else {
14991513 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 ) ;
15011515 let rmod = rmod. hash ( ) ?;
15021516 reg. process ( rmod, path, & config)
15031517 . with_context ( || format ! ( "Processing register `{}`" , reg. name) ) ?;
0 commit comments