@@ -323,7 +323,7 @@ pub fn fields(
323323
324324 let bits = & f. bits ;
325325 let mask = & f. mask ;
326- let offset = & f. offset ;
326+ let offset: usize = f. offset . parse ( ) . unwrap ( ) ;
327327 let fty = & f. ty ;
328328
329329 let lookup_results = lookup (
@@ -341,8 +341,15 @@ pub fn fields(
341341 } else {
342342 quote ! { as #fty }
343343 } ;
344- let value = quote ! {
345- ( ( self . bits >> #offset) & #mask) #cast
344+ let value = if offset != 0 {
345+ let offset = & f. offset ;
346+ quote ! {
347+ ( ( self . bits >> #offset) & #mask) #cast
348+ }
349+ } else {
350+ quote ! {
351+ ( self . bits & #mask) #cast
352+ }
346353 } ;
347354
348355 if let Some ( ( evs, base) ) = lookup_filter ( & lookup_results, Usage :: Read ) {
@@ -720,13 +727,24 @@ pub fn fields(
720727 } ) ;
721728 }
722729
723- proxy_items. push ( quote ! {
724- ///Writes raw bits to the field
725- #[ inline( always) ]
726- pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
727- self . w. bits &= !( #mask << #offset) ;
728- self . w. bits |= ( ( value as #rty) & #mask) << #offset;
729- self . w
730+ proxy_items. push ( if offset != 0 {
731+ let offset = & f. offset ;
732+ quote ! {
733+ ///Writes raw bits to the field
734+ #[ inline( always) ]
735+ pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
736+ self . w. bits = ( self . w. bits & !( #mask << #offset) ) | ( ( ( value as #rty) & #mask) << #offset) ;
737+ self . w
738+ }
739+ }
740+ } else {
741+ quote ! {
742+ ///Writes raw bits to the field
743+ #[ inline( always) ]
744+ pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
745+ self . w. bits = ( self . w. bits & !#mask) | ( ( value as #rty) & #mask) ;
746+ self . w
747+ }
730748 }
731749 } ) ;
732750
0 commit comments