Skip to content

Commit e8b5035

Browse files
committed
Fixed bug where offset was calculated incorrectly with register arrays
1 parent 6110797 commit e8b5035

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

src/generate.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -542,18 +542,29 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
542542
}
543543

544544
fields.push( util::register_to_rust(&register) );
545-
546-
offset =
547-
register.address_offset
548-
+
549-
register
550-
.size
551-
.or(defs.size)
552-
.ok_or_else(
553-
|| {
554-
format!("Register {} has no `size` field", register.name)
555-
},
556-
)? / 8;
545+
546+
offset = match register {
547+
Register::Single(ref _into) => register.address_offset
548+
+
549+
register
550+
.size
551+
.or(defs.size)
552+
.ok_or_else(
553+
|| {
554+
format!("Register {} has no `size` field", register.name)
555+
},
556+
)? / 8,
557+
Register::Array(ref _into, ref array_info) => register.address_offset
558+
+
559+
register
560+
.size
561+
.or(defs.size)
562+
.ok_or_else(
563+
|| {
564+
format!("Register {} has no `size` field", register.name)
565+
},
566+
)? * array_info.dim / 8,
567+
};
557568
}
558569

559570
Ok(quote! {

0 commit comments

Comments
 (0)