@@ -323,7 +323,7 @@ pub fn fields(
323
323
324
324
let bits = & f. bits ;
325
325
let mask = & f. mask ;
326
- let offset = & f. offset ;
326
+ let offset: usize = f. offset . parse ( ) . unwrap ( ) ;
327
327
let fty = & f. ty ;
328
328
329
329
let lookup_results = lookup (
@@ -341,8 +341,15 @@ pub fn fields(
341
341
} else {
342
342
quote ! { as #fty }
343
343
} ;
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
+ }
346
353
} ;
347
354
348
355
if let Some ( ( evs, base) ) = lookup_filter ( & lookup_results, Usage :: Read ) {
@@ -720,13 +727,24 @@ pub fn fields(
720
727
} ) ;
721
728
}
722
729
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
+ }
730
748
}
731
749
} ) ;
732
750
0 commit comments