@@ -860,6 +860,7 @@ pub fn gen_register(r: &Register,
860860
861861 let mut proxy_items = vec ! [ ] ;
862862
863+ let mut bits_is_safe = false ;
863864 if let Some ( ( evs, base) ) =
864865 lookup ( & field. enumerated_values ,
865866 fields,
@@ -916,36 +917,7 @@ pub fn gen_register(r: &Register,
916917 // `bits` can be safe when enumeratedValues covers all the
917918 // possible values of the bitfield or, IOW, when there are
918919 // 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;
949921
950922 if base. is_none ( ) {
951923 let variants_pc = variants. iter ( ) . map ( |v| & v. pc ) ;
@@ -1007,6 +979,36 @@ pub fn gen_register(r: &Register,
1007979 }
1008980 }
1009981
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+
10101012 mod_items. push ( quote ! {
10111013 impl <' a> #proxy<' a> {
10121014 #( #proxy_items) *
0 commit comments