@@ -888,13 +888,17 @@ impl RegisterExt for Register {
888888 set_enum ( ftag, evs. clone ( ) , orig_usage, true , access) ?;
889889 }
890890 } else {
891- let ( fspec, ignore) = fspec. spec ( ) ;
891+ let ( fspec, mut ignore) = fspec. spec ( ) ;
892892 let mut offsets: Vec < _ > = Vec :: new ( ) ;
893893 let mut width_vals = HashSet :: new ( ) ;
894894 for ( i, f) in self . fields ( ) . enumerate ( ) {
895895 if matchname ( & f. name , fspec) {
896- offsets. push ( ( f. bit_offset ( ) , f. name . to_string ( ) , i) ) ;
897- width_vals. insert ( f. bit_width ( ) ) ;
896+ if f. derived_from . is_none ( ) {
897+ offsets. push ( ( f. bit_offset ( ) , f. name . to_string ( ) , i) ) ;
898+ width_vals. insert ( f. bit_width ( ) ) ;
899+ } else {
900+ ignore = true ;
901+ }
898902 }
899903 }
900904 if offsets. is_empty ( ) {
@@ -964,10 +968,12 @@ impl RegisterExt for Register {
964968 let mut set_any = false ;
965969 let ( fspec, ignore) = fspec. spec ( ) ;
966970 for ftag in self . iter_fields ( fspec) {
967- ftag. write_constraint = Some ( WriteConstraint :: Range ( WriteConstraintRange {
968- min : fmod[ 0 ] . i64 ( ) ? as u64 ,
969- max : fmod[ 1 ] . i64 ( ) ? as u64 ,
970- } ) ) ;
971+ if ftag. derived_from . is_none ( ) {
972+ ftag. write_constraint = Some ( WriteConstraint :: Range ( WriteConstraintRange {
973+ min : fmod[ 0 ] . i64 ( ) ? as u64 ,
974+ max : fmod[ 1 ] . i64 ( ) ? as u64 ,
975+ } ) ) ;
976+ }
971977 set_any = true ;
972978 }
973979 if !ignore && !set_any {
0 commit comments