@@ -1007,13 +1007,13 @@ macro_rules! test_csr_field {
1007
1007
// test a single bit field
1008
1008
( $reg: ident, $field: ident) => { {
1009
1009
$crate:: paste! {
1010
- assert! ( ! $reg. $field( ) ) ;
1010
+ let val = $reg. $field( ) ;
1011
1011
1012
- $reg. [ <set_ $field>] ( true ) ;
1013
- assert !( $reg. $field( ) ) ;
1012
+ $reg. [ <set_ $field>] ( !val ) ;
1013
+ assert_eq !( $reg. $field( ) , !val ) ;
1014
1014
1015
- $reg. [ <set_ $field>] ( false ) ;
1016
- assert! ( ! $reg. $field( ) ) ;
1015
+ $reg. [ <set_ $field>] ( val ) ;
1016
+ assert_eq! ( $reg. $field( ) , val ) ;
1017
1017
}
1018
1018
} } ;
1019
1019
@@ -1049,4 +1049,24 @@ macro_rules! test_csr_field {
1049
1049
assert_eq!( $reg. [ <try_ $field>] ( ) , Ok ( $var) ) ;
1050
1050
}
1051
1051
} } ;
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
+ } } ;
1052
1072
}
0 commit comments