Skip to content

Commit 0d87639

Browse files
committed
register: add multi-bit register field test macro
Adds a test macro branch for multi-bit register fields. Minor correction to the single-bit test macro for not assuming the field's initial value.
1 parent 7422231 commit 0d87639

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

riscv/src/register/macros.rs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,13 +1007,13 @@ macro_rules! test_csr_field {
10071007
// test a single bit field
10081008
($reg:ident, $field:ident) => {{
10091009
$crate::paste! {
1010-
assert!(!$reg.$field());
1010+
let val = $reg.$field();
10111011

1012-
$reg.[<set_ $field>](true);
1013-
assert!($reg.$field());
1012+
$reg.[<set_ $field>](!val);
1013+
assert_eq!($reg.$field(), !val);
10141014

1015-
$reg.[<set_ $field>](false);
1016-
assert!(!$reg.$field());
1015+
$reg.[<set_ $field>](val);
1016+
assert_eq!($reg.$field(), val);
10171017
}
10181018
}};
10191019

@@ -1049,4 +1049,24 @@ macro_rules! test_csr_field {
10491049
assert_eq!($reg.[<try_ $field>](), Ok($var));
10501050
}
10511051
}};
1052+
1053+
// test a multi-bit bitfield
1054+
($reg:ident, $field:ident: [$start:expr, $end:expr], $reset:expr) => {{
1055+
let bits = $reg.bits();
1056+
1057+
let shift = $end - $start + 1;
1058+
let mask = (1usize << shift) - 1;
1059+
1060+
let exp_val = (bits >> $start) & mask;
1061+
1062+
$crate::paste! {
1063+
assert_eq!($reg.$field(), exp_val);
1064+
1065+
$reg.[<set_ $field>]($reset);
1066+
assert_eq!($reg.$field(), $reset);
1067+
1068+
$reg.[<set_ $field>](exp_val);
1069+
assert_eq!($reg.$field(), exp_val);
1070+
}
1071+
}};
10521072
}

0 commit comments

Comments
 (0)