From 4b45b04c2967328080d6559ab6ef12bd4cc79042 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sat, 7 Mar 2020 20:17:36 -0800 Subject: [PATCH] SCP: Enable Runtime REGister entry validation and checking during build --- scp.c | 2 - sim_defs.h | 139 +++++++++++++++++++++++++++-------------------------- 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/scp.c b/scp.c index fae47b93..605d1f1d 100644 --- a/scp.c +++ b/scp.c @@ -15090,7 +15090,6 @@ free (f); static t_stat sim_sanity_check_register_declarations (void) { t_stat stat = SCPE_OK; -#if 0 /* Disabled for now */ int i; DEVICE *dptr; MFILE *f = MOpen (); @@ -15193,7 +15192,6 @@ for (i = 0; (dptr = sim_devices[i]) != NULL; i++) { } } MClose (f); -#endif return stat; } diff --git a/sim_defs.h b/sim_defs.h index e324dc9e..2290a199 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -687,6 +687,9 @@ struct REG { BITFIELD *fields; /* bit fields */ uint32 qptr; /* circ q ptr */ size_t str_size; /* structure size */ + size_t obj_size; /* sizeof(*loc) */ + size_t ele_size; /* sizeof(**loc) or sizeof(*loc) if depth == 1 */ + const char *macro; /* Initializer Macro Name */ /* NOTE: Flags MUST always be last since it is initialized outside of macro definitions */ uint32 flags; /* flags */ }; @@ -891,90 +894,90 @@ struct MEMFILE { #define UDATA(act,fl,cap) NULL,act,NULL,NULL,NULL,0,0,(fl),0,(cap),0,NULL,0,0 /* Internal use ONLY (see below) Generic Register declaration for all fields */ -#define _REGDATANF(nm,loc,rdx,wd,off,dep,desc,flds,qptr,siz) \ - nm, (loc), (rdx), (wd), (off), (dep), (desc), (flds), (qptr), (siz) +#define _REGDATANF(nm,loc,rdx,wd,off,dep,desc,flds,qptr,siz,elesiz,macro) \ + nm, (loc), (rdx), (wd), (off), (dep), (desc), (flds), (qptr), (siz), sizeof(*(loc)), (elesiz), #macro #if defined (__STDC__) || defined (_WIN32) /* Variants which depend on how macro arguments are convered to strings */ /* Generic Register declaration for all fields. If the register structure is extended, this macro will be retained and a new internal macro will be provided that populates the new register structure */ #define REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,qptr,siz),(fl) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,sizeof((loc)),REGDATA),(fl) #define REGDATAC(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,qptr,siz),(fl) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,sizeof((loc)),REGDATAC),(fl) /* Right Justified Octal Register Data */ #define ORDATA(nm,loc,wd) \ - _REGDATANF(#nm,&(loc),8,wd,0,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),8,wd,0,1,NULL,NULL,0,0,sizeof((loc)),ORDATA) #define ORDATAD(nm,loc,wd,desc) \ - _REGDATANF(#nm,&(loc),8,wd,0,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),8,wd,0,1,desc,NULL,0,0,sizeof((loc)),ORDATAD) #define ORDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF(#nm,&(loc),8,wd,0,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),8,wd,0,1,desc,flds,0,0,sizeof((loc)),ORDATADF) /* Right Justified Decimal Register Data */ #define DRDATA(nm,loc,wd) \ - _REGDATANF(#nm,&(loc),10,wd,0,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),10,wd,0,1,NULL,NULL,0,0,sizeof((loc)),DRDATA) #define DRDATAD(nm,loc,wd,desc) \ - _REGDATANF(#nm,&(loc),10,wd,0,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),10,wd,0,1,desc,NULL,0,0,sizeof((loc)),DRDATAD) #define DRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF(#nm,&(loc),10,wd,0,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),10,wd,0,1,desc,flds,0,0,sizeof((loc)),DRDATADF) /* Right Justified Hexadecimal Register Data */ #define HRDATA(nm,loc,wd) \ - _REGDATANF(#nm,&(loc),16,wd,0,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),16,wd,0,1,NULL,NULL,0,0,sizeof((loc)),HRDATA) #define HRDATAD(nm,loc,wd,desc) \ - _REGDATANF(#nm,&(loc),16,wd,0,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),16,wd,0,1,desc,NULL,0,0,sizeof((loc)),HRDATAD) #define HRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF(#nm,&(loc),16,wd,0,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),16,wd,0,1,desc,flds,0,0,sizeof((loc)),HRDATADF) /* Right Justified Binary Register Data */ #define BINRDATA(nm,loc,wd) \ - _REGDATANF(#nm,&(loc),2,wd,0,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),2,wd,0,1,NULL,NULL,0,0,sizeof((loc)),BINRDATA) #define BINRDATAD(nm,loc,wd,desc) \ - _REGDATANF(#nm,&(loc),2,wd,0,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),2,wd,0,1,desc,NULL,0,0,sizeof((loc)),BINRDATAD) #define BINRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF(#nm,&(loc),2,wd,0,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),2,wd,0,1,desc,flds,0,0,sizeof((loc)),BINRDATADF) /* One-bit binary flag at an arbitrary offset in a 32-bit word Register */ #define FLDATA(nm,loc,pos) \ - _REGDATANF(#nm,&(loc),2,1,pos,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),2,1,pos,1,NULL,NULL,0,0,sizeof((loc)),FLDATA) #define FLDATAD(nm,loc,pos,desc) \ - _REGDATANF(#nm,&(loc),2,1,pos,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),2,1,pos,1,desc,NULL,0,0,sizeof((loc)),FLDATAD) #define FLDATADF(nm,loc,pos,desc,flds) \ - _REGDATANF(#nm,&(loc),2,1,pos,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),2,1,pos,1,desc,flds,0,0,sizeof((loc)),FLDATADF) /* Arbitrary location and Radix Register */ #define GRDATA(nm,loc,rdx,wd,pos) \ - _REGDATANF(#nm,&(loc),rdx,wd,pos,1,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,pos,1,NULL,NULL,0,0,sizeof((loc)),GRDATA) #define GRDATAD(nm,loc,rdx,wd,pos,desc) \ - _REGDATANF(#nm,&(loc),rdx,wd,pos,1,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,pos,1,desc,NULL,0,0,sizeof((loc)),GRDATAD) #define GRDATADF(nm,loc,rdx,wd,pos,desc,flds) \ - _REGDATANF(#nm,&(loc),rdx,wd,pos,1,desc,flds,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,pos,1,desc,flds,0,0,sizeof((loc)),GRDATADF) /* Arrayed register whose data is kept in a standard C array Register */ #define BRDATA(nm,loc,rdx,wd,dep) \ - _REGDATANF(#nm,loc,rdx,wd,0,dep,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,NULL,NULL,0,0,sizeof(*(loc)),BRDATA) #define BRDATAD(nm,loc,rdx,wd,dep,desc) \ - _REGDATANF(#nm,loc,rdx,wd,0,dep,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,NULL,0,0,sizeof(*(loc)),BRDATAD) #define BRDATADF(nm,loc,rdx,wd,dep,desc,flds) \ - _REGDATANF(#nm,loc,rdx,wd,0,dep,desc,flds,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,flds,0,0,sizeof(*(loc)),BRDATADF) /* Range of memory whose data is successive scalar values accessed like an array Register */ #define VBRDATA(nm,loc,rdx,wd,dep) \ - _REGDATANF(#nm,&(loc),rdx,wd,0,dep,NULL,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,NULL,NULL,0,0,sizeof(loc),VBRDATA) #define VBRDATAD(nm,loc,rdx,wd,dep,desc) \ - _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,NULL,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,NULL,0,0,sizeof(loc),VBRDATAD) #define VBRDATADF(nm,loc,rdx,wd,dep,desc,flds) \ - _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,flds,0,0) + _REGDATANF(#nm,&(loc),rdx,wd,0,dep,desc,flds,0,0,sizeof(loc),VBRDATADF) /* Arrayed register whose data is part of the UNIT structure */ #define URDATA(nm,loc,rdx,wd,off,dep,fl) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,NULL,NULL,0,0),((fl) | REG_UNIT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,NULL,NULL,0,0,sizeof((loc)),URDATA),((fl) | REG_UNIT) #define URDATAD(nm,loc,rdx,wd,off,dep,fl,desc) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,NULL,0,0),((fl) | REG_UNIT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,NULL,0,0,sizeof((loc)),URDATAD),((fl) | REG_UNIT) #define URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,flds) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,0),((fl) | REG_UNIT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,0,sizeof((loc)),URDATADF),((fl) | REG_UNIT) /* Arrayed register whose data is part of an arbitrary structure */ #define STRDATA(nm,loc,rdx,wd,off,dep,siz,fl) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,NULL,NULL,0,siz),((fl) | REG_STRUCT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,NULL,NULL,0,siz,sizeof((loc)),STRDATA),((fl) | REG_STRUCT) #define STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,desc) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,NULL,0,siz),((fl) | REG_STRUCT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,NULL,0,siz,sizeof((loc)),STRDATAD),((fl) | REG_STRUCT) #define STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds) \ - _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,siz),((fl) | REG_STRUCT) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,siz,sizeof((loc)),STRDATADF),((fl) | REG_STRUCT) /* Hidden Blob of Data - Only used for SAVE/RESTORE */ #define SAVEDATA(nm,loc) \ - _REGDATANF(#nm,&(loc),0,8,0,sizeof(loc),NULL,NULL,0,sizeof(loc)),(REG_HRO) + _REGDATANF(#nm,&(loc),0,8,0,1,NULL,NULL,0,sizeof(loc),sizeof(loc),SAVEDATA),(REG_HRO) #define BIT(nm) {#nm, 0xffffffff, 1, NULL, NULL} /* Single Bit definition */ #define BITNC {"", 0xffffffff, 1, NULL, NULL} /* Don't care Bit definition */ #define BITF(nm,sz) {#nm, 0xffffffff, sz, NULL, NULL} /* Bit Field definition */ @@ -986,82 +989,82 @@ struct MEMFILE { If the register structure is extended, this macro will be retained and a new macro will be provided that populates the new register structure */ #define REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,qptr,siz),(fl) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,sizeof((loc)),REGDATA),(fl) #define REGDATAC(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,qptr,siz),(fl) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,sizeof((loc)),REGDATAC),(fl) /* Right Justified Octal Register Data */ #define ORDATA(nm,loc,wd) \ - _REGDATANF("nm",&(loc),8,wd,0,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),8,wd,0,1,NULL,NULL,0,0,sizeof((loc)),ORDATA) #define ORDATAD(nm,loc,wd,desc) \ - _REGDATANF("nm",&(loc),8,wd,0,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),8,wd,0,1,desc,NULL,0,0,sizeof((loc)),ORDATAD) #define ORDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF("nm",&(loc),8,wd,0,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),8,wd,0,1,desc,flds,0,0,sizeof((loc)),ORDATADF) /* Right Justified Decimal Register Data */ #define DRDATA(nm,loc,wd) \ - _REGDATANF("nm",&(loc),10,wd,0,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),10,wd,0,1,NULL,NULL,0,0,sizeof((loc)),DRDATA) #define DRDATAD(nm,loc,wd,desc) \ - _REGDATANF("nm",&(loc),10,wd,0,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),10,wd,0,1,desc,NULL,0,0,sizeof((loc)),DRDATAD) #define DRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF("nm",&(loc),10,wd,0,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),10,wd,0,1,desc,flds,0,0,sizeof((loc)),DRDATADF) /* Right Justified Hexadecimal Register Data */ #define HRDATA(nm,loc,wd) \ - _REGDATANF("nm",&(loc),16,wd,0,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),16,wd,0,1,NULL,NULL,0,0,sizeof((loc)),HRDATA) #define HRDATAD(nm,loc,wd,desc) \ - _REGDATANF("nm",&(loc),16,wd,0,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),16,wd,0,1,desc,NULL,0,0,sizeof((loc)),HRDATAD) #define HRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF("nm",&(loc),16,wd,0,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),16,wd,0,1,desc,flds,0,0,sizeof((loc)),HRDATADF) /* Right Justified Binary Register Data */ #define BINRDATA(nm,loc,wd) \ - _REGDATANF("nm",&(loc),2,wd,0,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),2,wd,0,1,NULL,NULL,0,0,sizeof((loc)),BINRDATA) #define BINRDATAD(nm,loc,wd,desc) \ - _REGDATANF("nm",&(loc),2,wd,0,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),2,wd,0,1,desc,NULL,0,0,sizeof((loc)),BINRDATAD) #define BINRDATADF(nm,loc,wd,desc,flds) \ - _REGDATANF("nm",&(loc),2,wd,0,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),2,wd,0,1,desc,flds,0,0,sizeof((loc)),BINRDATADF) /* One-bit binary flag at an arbitrary offset in a 32-bit word Register */ #define FLDATA(nm,loc,pos) \ - _REGDATANF("nm",&(loc),2,1,pos,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),2,1,pos,1,NULL,NULL,0,0,sizeof((loc)),FLDATA) #define FLDATAD(nm,loc,pos,desc) \ - _REGDATANF("nm",&(loc),2,1,pos,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),2,1,pos,1,desc,NULL,0,0,sizeof((loc)),FLDATAD) #define FLDATADF(nm,loc,pos,desc,flds) \ - _REGDATANF("nm",&(loc),2,1,pos,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),2,1,pos,1,desc,flds,0,0,sizeof((loc)),FLDATADF) /* Arbitrary location and Radix Register */ #define GRDATA(nm,loc,rdx,wd,pos) \ - _REGDATANF("nm",&(loc),rdx,wd,pos,1,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,pos,1,NULL,NULL,0,0,sizeof((loc)),GRDATA) #define GRDATAD(nm,loc,rdx,wd,pos,desc) \ - _REGDATANF("nm",&(loc),rdx,wd,pos,1,desc,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,pos,1,desc,NULL,0,0,sizeof((loc)),GRDATAD) #define GRDATADF(nm,loc,rdx,wd,pos,desc,flds) \ - _REGDATANF("nm",&(loc),rdx,wd,pos,1,desc,flds,0,0) + _REGDATANF("nm",&(loc),rdx,wd,pos,1,desc,flds,0,0,sizeof((loc)),GRDATADF) /* Arrayed register whose data is kept in a standard C array Register */ #define BRDATA(nm,loc,rdx,wd,dep) \ - _REGDATANF("nm",loc,rdx,wd,0,dep,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,NULL,NULL,0,0,sizeof(*(loc)),BRDATA) #define BRDATAD(nm,loc,rdx,wd,dep,desc) \ - _REGDATANF("nm",loc,rdx,wd,0,dep,desc,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,NULL,0,0,sizeof(*(loc)),BRDATAD) #define BRDATADF(nm,loc,rdx,wd,dep,desc,flds) \ - _REGDATANF("nm",loc,rdx,wd,0,dep,desc,flds,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,flds,0,0,sizeof(*(loc)),BRDATADF) /* Range of memory whose data is successive scalar values accessed like an array Register */ #define VBRDATA(nm,loc,rdx,wd,dep) \ - _REGDATANF("nm",&(loc),rdx,wd,0,dep,NULL,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,NULL,NULL,0,0,sizeof(loc),VBRDATA) #define VBRDATAD(nm,loc,rdx,wd,dep,desc) \ - _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,NULL,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,NULL,0,0,sizeof(loc),VBRDATAD) #define VBRDATADF(nm,loc,rdx,wd,dep,desc,flds) \ - _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,flds,0,0) + _REGDATANF("nm",&(loc),rdx,wd,0,dep,desc,flds,0,0,sizeof(loc),VBRDATADF) /* Arrayed register whose data is part of the UNIT structure */ #define URDATA(nm,loc,rdx,wd,off,dep,fl) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,NULL,NULL,0,0),((fl) | REG_UNIT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,NULL,NULL,0,0,sizeof((loc)),URDATA),((fl) | REG_UNIT) #define URDATAD(nm,loc,rdx,wd,off,dep,fl,desc) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,NULL,0,0),((fl) | REG_UNIT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,NULL,0,0,sizeof((loc)),URDATAD),((fl) | REG_UNIT) #define URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,flds) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,0),((fl) | REG_UNIT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,0,sizeof((loc)),URDATADF),((fl) | REG_UNIT) /* Arrayed register whose data is part of an arbitrary structure */ #define STRDATA(nm,loc,rdx,wd,off,dep,siz,fl) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,NULL,NULL,0,siz),((fl) | REG_STRUCT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,NULL,NULL,0,siz,sizeof((loc)),STRDATA),((fl) | REG_STRUCT) #define STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,desc) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,NULL,0,siz),((fl) | REG_STRUCT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,NULL,0,siz,sizeof((loc)),STRDATAD),((fl) | REG_STRUCT) #define STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds) \ - _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,siz),((fl) | REG_STRUCT) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,siz,sizeof((loc)),STRDATADF),((fl) | REG_STRUCT) /* Hidden Blob of Data - Only used for SAVE/RESTORE */ #define SAVEDATA(nm,loc) \ - _REGDATANF("nm",&(loc),0,8,0,sizeof(loc),NULL,NULL,0,sizeof(loc)),(REG_HRO) + _REGDATANF("nm",&(loc),0,8,0,1,NULL,NULL,0,sizeof(loc),sizeof(loc)),SAVEDATA),(REG_HRO) #define BIT(nm) {"nm", 0xffffffff, 1, NULL, NULL} /* Single Bit definition */ #define BITNC {"", 0xffffffff, 1, NULL, NULL} /* Don't care Bit definition */ #define BITF(nm,sz) {"nm", 0xffffffff, sz, NULL, NULL} /* Bit Field definition */