@@ -888,13 +888,17 @@ impl RegisterExt for Register {
888
888
set_enum ( ftag, evs. clone ( ) , orig_usage, true , access) ?;
889
889
}
890
890
} else {
891
- let ( fspec, ignore) = fspec. spec ( ) ;
891
+ let ( fspec, mut ignore) = fspec. spec ( ) ;
892
892
let mut offsets: Vec < _ > = Vec :: new ( ) ;
893
893
let mut width_vals = HashSet :: new ( ) ;
894
894
for ( i, f) in self . fields ( ) . enumerate ( ) {
895
895
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
+ }
898
902
}
899
903
}
900
904
if offsets. is_empty ( ) {
@@ -964,10 +968,12 @@ impl RegisterExt for Register {
964
968
let mut set_any = false ;
965
969
let ( fspec, ignore) = fspec. spec ( ) ;
966
970
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
+ }
971
977
set_any = true ;
972
978
}
973
979
if !ignore && !set_any {
0 commit comments