@@ -860,6 +860,7 @@ pub fn gen_register(r: &Register,
860
860
861
861
let mut proxy_items = vec ! [ ] ;
862
862
863
+ let mut bits_is_safe = false ;
863
864
if let Some ( ( evs, base) ) =
864
865
lookup ( & field. enumerated_values ,
865
866
fields,
@@ -916,36 +917,7 @@ pub fn gen_register(r: &Register,
916
917
// `bits` can be safe when enumeratedValues covers all the
917
918
// possible values of the bitfield or, IOW, when there are
918
919
// no reserved bit patterns.
919
- let bits_is_safe = variants. len ( ) == 1 << width;
920
-
921
- if bits_is_safe {
922
- proxy_items. push ( quote ! {
923
- pub fn bits( self , bits: #field_ty) -> & ' a mut W {
924
- const MASK : #field_ty = #mask;
925
- const OFFSET : u8 = #offset;
926
-
927
- self . register. bits &=
928
- !( ( MASK as #reg_ty) << OFFSET ) ;
929
- self . register. bits |=
930
- ( ( bits & MASK ) as #reg_ty) << OFFSET ;
931
- self . register
932
- }
933
- } ) ;
934
- } else {
935
- proxy_items. push ( quote ! {
936
- pub unsafe fn bits( self ,
937
- bits: #field_ty) -> & ' a mut W {
938
- const MASK : #field_ty = #mask;
939
- const OFFSET : u8 = #offset;
940
-
941
- self . register. bits &=
942
- !( ( MASK as #reg_ty) << OFFSET ) ;
943
- self . register. bits |=
944
- ( ( bits & MASK ) as #reg_ty) << OFFSET ;
945
- self . register
946
- }
947
- } ) ;
948
- }
920
+ bits_is_safe = variants. len ( ) == 1 << width;
949
921
950
922
if base. is_none ( ) {
951
923
let variants_pc = variants. iter ( ) . map ( |v| & v. pc ) ;
@@ -1007,6 +979,36 @@ pub fn gen_register(r: &Register,
1007
979
}
1008
980
}
1009
981
982
+ if bits_is_safe {
983
+ proxy_items. push ( quote ! {
984
+ pub fn bits( self , bits: #field_ty) -> & ' a mut W {
985
+ const MASK : #field_ty = #mask;
986
+ const OFFSET : u8 = #offset;
987
+
988
+ self . register. bits &=
989
+ !( ( MASK as #reg_ty) << OFFSET ) ;
990
+ self . register. bits |=
991
+ ( ( bits & MASK ) as #reg_ty) << OFFSET ;
992
+ self . register
993
+ }
994
+ } ) ;
995
+ } else {
996
+ proxy_items. push ( quote ! {
997
+ pub unsafe fn bits( self ,
998
+ bits: #field_ty) -> & ' a mut W {
999
+ const MASK : #field_ty = #mask;
1000
+ const OFFSET : u8 = #offset;
1001
+
1002
+ self . register. bits &=
1003
+ !( ( MASK as #reg_ty) << OFFSET ) ;
1004
+ self . register. bits |=
1005
+ ( ( bits & MASK ) as #reg_ty) << OFFSET ;
1006
+ self . register
1007
+ }
1008
+ } ) ;
1009
+ }
1010
+
1011
+
1010
1012
mod_items. push ( quote ! {
1011
1013
impl <' a> #proxy<' a> {
1012
1014
#( #proxy_items) *
0 commit comments