@@ -747,8 +747,6 @@ macro_rules! read_write_csr_field {
747747 ( $ty: ident,
748748 $( #[ $field_doc: meta] ) +
749749 $field: ident,
750- $( #[ $try_field_doc: meta] ) +
751- $try_field: ident,
752750 $( #[ $set_field_doc: meta] ) +
753751 $set_field: ident,
754752 $( #[ $try_set_field_doc: meta] ) +
@@ -758,10 +756,7 @@ macro_rules! read_write_csr_field {
758756 $crate:: read_only_csr_field!(
759757 $ty,
760758 $( #[ $field_doc] ) +
761- $field,
762- $( #[ $try_field_doc] ) +
763- $try_field,
764- bit: $bit,
759+ $field: $bit,
765760 ) ;
766761
767762 $crate:: write_only_csr_field!(
@@ -807,8 +802,6 @@ macro_rules! read_write_csr_field {
807802 ( $ty: ident,
808803 $( #[ $field_doc: meta] ) +
809804 $field: ident,
810- $( #[ $try_field_doc: meta] ) +
811- $try_field: ident,
812805 $( #[ $set_field_doc: meta] ) +
813806 $set_field: ident,
814807 $( #[ $try_set_field_doc: meta] ) +
@@ -818,10 +811,7 @@ macro_rules! read_write_csr_field {
818811 $crate:: read_only_csr_field!(
819812 $ty,
820813 $( #[ $field_doc] ) +
821- $field,
822- $( #[ $try_field_doc] ) +
823- $try_field,
824- range: [ $bit_start : $bit_end] ,
814+ $field: [ $bit_start : $bit_end] ,
825815 ) ;
826816
827817 $crate:: write_only_csr_field!(
@@ -886,31 +876,14 @@ macro_rules! read_write_csr_field {
886876macro_rules! read_only_csr_field {
887877 ( $ty: ident,
888878 $( #[ $field_doc: meta] ) +
889- $field: ident,
890- $( #[ $try_field_doc: meta] ) +
891- $try_field: ident,
892- bit: $bit: literal$( , ) ?) => {
879+ $field: ident: $bit: literal$( , ) ?) => {
880+ const _: ( ) = assert!( $bit < usize :: BITS ) ;
881+
893882 impl $ty {
894883 $( #[ $field_doc] ) +
895884 #[ inline]
896885 pub fn $field( & self ) -> bool {
897- self . $try_field( ) . unwrap( )
898- }
899-
900- $( #[ $try_field_doc] ) +
901- #[ inline]
902- pub fn $try_field( & self ) -> $crate:: result:: Result <bool > {
903- let max_width = core:: mem:: size_of_val( & self . bits) * 8 ;
904-
905- if $bit < max_width {
906- Ok ( $crate:: bits:: bf_extract( self . bits, $bit, 1 ) != 0 )
907- } else {
908- Err ( $crate:: result:: Error :: IndexOutOfBounds {
909- index: $bit,
910- min: 0 ,
911- max: max_width,
912- } )
913- }
886+ $crate:: bits:: bf_extract( self . bits, $bit, 1 ) != 0
914887 }
915888 }
916889 } ;
@@ -921,6 +894,9 @@ macro_rules! read_only_csr_field {
921894 $( #[ $try_field_doc: meta] ) +
922895 $try_field: ident,
923896 range: $bit_start: literal..=$bit_end: literal$( , ) ?) => {
897+ const _: ( ) = assert!( $bit_end < usize :: BITS ) ;
898+ const _: ( ) = assert!( $bit_start <= $bit_end) ;
899+
924900 impl $ty {
925901 $( #[ $field_doc] ) +
926902 #[ inline]
@@ -931,9 +907,7 @@ macro_rules! read_only_csr_field {
931907 $( #[ $try_field_doc] ) +
932908 #[ inline]
933909 pub fn $try_field( & self , index: usize ) -> $crate:: result:: Result <bool > {
934- let max_width = core:: mem:: size_of_val( & self . bits) * 8 ;
935-
936- if $bit_end < max_width && ( $bit_start..=$bit_end) . contains( & index) {
910+ if ( $bit_start..=$bit_end) . contains( & index) {
937911 Ok ( $crate:: bits:: bf_extract( self . bits, index, 1 ) != 0 )
938912 } else {
939913 Err ( $crate:: result:: Error :: IndexOutOfBounds {
@@ -948,32 +922,16 @@ macro_rules! read_only_csr_field {
948922
949923 ( $ty: ident,
950924 $( #[ $field_doc: meta] ) +
951- $field: ident,
952- $ ( # [ $try_field_doc : meta ] ) +
953- $try_field : ident ,
954- range : [ $bit_start : literal : $bit_end : literal ] $ ( , ) ? ) => {
925+ $field: ident: [ $bit_start : literal : $bit_end : literal ] $ ( , ) ? ) => {
926+ const _ : ( ) = assert! ( $bit_end < usize :: BITS ) ;
927+ const _ : ( ) = assert! ( $bit_start <= $bit_end ) ;
928+
955929 impl $ty {
956930 $( #[ $field_doc] ) +
957931 #[ inline]
958932 pub fn $field( & self ) -> usize {
959933 $crate:: bits:: bf_extract( self . bits, $bit_start, $bit_end - $bit_start + 1 )
960934 }
961-
962- $( #[ $try_field_doc] ) +
963- #[ inline]
964- pub fn $try_field( & self ) -> $crate:: result:: Result <usize > {
965- let max_width = core:: mem:: size_of_val( & self . bits) * 8 ;
966-
967- if $bit_end < max_width && $bit_start <= $bit_end {
968- Ok ( $crate:: bits:: bf_extract( self . bits, $bit_start, $bit_end - $bit_start + 1 ) )
969- } else {
970- Err ( $crate:: result:: Error :: IndexOutOfBounds {
971- index: $bit_start,
972- min: $bit_start,
973- max: $bit_end,
974- } )
975- }
976- }
977935 }
978936 } ;
979937
@@ -1017,35 +975,28 @@ macro_rules! read_only_csr_field {
1017975 $field_ty: ident,
1018976 range: [ $field_start: literal : $field_end: literal] $( , ) ?
1019977 ) => {
1020- impl $ty {
1021- $( #[ $field_doc] ) +
1022- #[ inline]
1023- pub fn $field( & self ) -> $field_ty {
1024- self . $try_field( ) . unwrap( )
1025- }
978+ const _: ( ) = assert!( $field_end < usize :: BITS ) ;
979+ const _: ( ) = assert!( $field_start <= $field_end) ;
1026980
1027- $( #[ $try_field_doc] ) +
1028- #[ inline]
1029- pub fn $try_field( & self ) -> $crate:: result:: Result <$field_ty> {
1030- let max_width = core:: mem:: size_of_val( & self . bits) * 8 ;
1031-
1032- if $field_end < max_width && $field_start < $field_end {
1033- let value = $crate:: bits:: bf_extract(
1034- self . bits,
1035- $field_start,
1036- $field_end - $field_start + 1 ,
1037- ) ;
981+ impl $ty {
982+ $( #[ $field_doc] ) +
983+ #[ inline]
984+ pub fn $field( & self ) -> $field_ty {
985+ self . $try_field( ) . unwrap( )
986+ }
1038987
1039- $field_ty:: from_usize( value)
1040- } else {
1041- Err ( $crate:: result:: Error :: IndexOutOfBounds {
1042- index: $field_start,
1043- min: $field_start,
1044- max: $field_end,
1045- } )
1046- }
1047- }
1048- }
988+ $( #[ $try_field_doc] ) +
989+ #[ inline]
990+ pub fn $try_field( & self ) -> $crate:: result:: Result <$field_ty> {
991+ let value = $crate:: bits:: bf_extract(
992+ self . bits,
993+ $field_start,
994+ $field_end - $field_start + 1 ,
995+ ) ;
996+
997+ $field_ty:: from_usize( value)
998+ }
999+ }
10491000 } ;
10501001}
10511002
0 commit comments