register CLRINT {
        address                 0x003
        access_mode     WO
+       count           19
        field   CLRHWERRINT     0x80 /* Rev B or greater */
        field   CLRBRKADRINT    0x40
        field   CLRSWTMINT      0x20
 register HCNTRL {
        address                 0x005
        access_mode     RW
+       count           12
        field   SEQ_RESET       0x80 /* Rev B or greater */
        field   POWRDN          0x40
        field   SWINT           0x10
        address                 0x006
        access_mode     RW
        size            2
+       count           2
 }
 
 /*
 register HESCB_QOFF {
        address                 0x008
        access_mode     RW
+       count           2
 }
 
 /*
  */
 register SEQINTSTAT {
        address                 0x00C
+       count           1
        access_mode     RO
        field   SEQ_SWTMRTO     0x10
        field   SEQ_SEQINT      0x08
  */
 register SESCB_QOFF {
        address                 0x012
+       count           2
        access_mode     RW
        modes           M_CCHAN
 }
        address                 0x019
        access_mode     RW
        modes           M_DFF0, M_DFF1
+       count           11
        field   PRELOADEN       0x80
        field   SCSIENWRDIS     0x40    /* Rev B only. */
        field   SCSIEN          0x20
  */
 register DSCOMMAND0 {
        address                 0x019
+       count           1
        access_mode     RW
        modes           M_CFG
        field   CACHETHEN       0x80    /* Cache Threshold enable */
        address                 0x088
        access_mode     RW
        modes           M_CFG
+       count           1
        field   WR_DFTHRSH      0x70 {
                WR_DFTHRSH_MIN,
                WR_DFTHRSH_25,
        address                 0x093
        access_mode     RW
        modes           M_CFG
+       count           1
        field   SERRPULSE       0x80
        field   UNEXPSCIEN      0x20
        field   SPLTSMADIS      0x10
        address                 0x096
        access_mode     RW
        modes           M_DFF0, M_DFF1
+       count           2
        field   STAETERM        0x80
        field   SCBCERR         0x40
        field   SCADERR         0x20
        address                 0x097
        access_mode     RW
        modes           M_DFF0, M_DFF1
+       count           2
        field   RXDATABUCKET    0x01
 }
 
        address                 0x09E
        access_mode     RW
        modes           M_DFF0, M_DFF1
+       count           2
        field   STAETERM        0x80
        field   SCBCERR         0x40
        field   SCADERR         0x20
        address                 0x09F
        access_mode     RW
        modes           M_DFF0, M_DFF1
+       count           2
        field   RXDATABUCKET    0x01
 }
 
        address                 0x0A0
        access_mode     RW
        modes           M_CFG
+       count           1
        field   DPE             0x80
        field   SSE             0x40
        field   RMA             0x20
        address                 0x0A7
        access_mode     RW
        modes           M_CFG
+       count           5
        field   DPE             0x80
        field   SSE             0x40
        field   STA             0x08
        address                 0x020
        access_mode     RW
        size            20
+       count           2
        modes           M_DFF0, M_DFF1, M_SCSI
 }
 
        address                 0x022
        access_mode     RW
        modes           M_CFG
+       count           2
 }
 
 /*
        address                 0x025
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x026
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x027
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x028
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x029
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x02B
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x02C
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x030
        access_mode     RW
        modes           M_CFG
+       count           2
        mask            ILUNLEN 0x0F
        mask            TLUNLEN 0xF0
 }
        address                 0x031
        access_mode     RW
        modes           M_CFG
+       count           1
 }
 
 /*
        address                 0x032
        access_mode     RW
        modes           M_CFG
+       count           9
 }
 
 /*
        address                 0x038
        access_mode     RW
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           2
        field   PCI2PCI         0x04
        field   SINGLECMD       0x02
        field   ABORTPENDING    0x01
        address                 0x039
        access_mode     RW
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           5
        field   LQIRETRY        0x80
        field   LQICONTINUE     0x40
        field   LQITOIDLE       0x20
        address                 0x03B
        access_mode     RW
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           8
        field   MANUALCTL       0x40
        field   ENSELI          0x20
        field   ENRSELI         0x10
        }
 }
 
+/*
+ * SCSI Control Signal In
+ */
 register SCSISIGI {
        address                 0x041
        access_mode     RO
        access_mode     RW
        modes           M_CFG
        size            2
+       count           2
 }
 
 /*
        address                 0x048
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           2
        field   CLKOUT          0x80
        field   TARGID          0x0F
 }
        address                 0x04A
        access_mode     RW
        modes           M_CFG
+       count           4
        field   BIOSCANCTL              0x80
        field   AUTOACKEN               0x40
        field   BIASCANCTL              0x20
        address                 0x04B
        access_mode     RW
        modes           M_CFG
+       count           8
        field   ENSELDO         0x40
        field   ENSELDI         0x20
        field   ENSELINGO       0x10
        address                 0x04E
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           3
        field   HIZERO          0x80
        field   HIPERR          0x40
        field   PREVPHASE       0x20
        address                 0x04E
        access_mode     RO
        modes           M_CFG
+       count           6
 }
 
 /*
        address                 0x04F
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           1
 }
 
 /*
        address                 0x04F
        access_mode     RO
        modes           M_CFG
+       count           2
 }
 
 /*
        address                 0x050
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           2
        field   LQIATNQAS       0x20
        field   LQICRCT1        0x10
        field   LQICRCT2        0x08
        address                 0x050
        access_mode     WO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           1
        field   CLRLQIATNQAS    0x20
        field   CLRLQICRCT1     0x10
        field   CLRLQICRCT2     0x08
        address                 0x050
        access_mode     RW
        modes           M_CFG
+       count           3
        field   ENLQIATNQASK    0x20
        field   ENLQICRCT1      0x10
        field   ENLQICRCT2      0x08
        address                 0x051
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           3
        field   LQIPHASE_LQ     0x80
        field   LQIPHASE_NLQ    0x40
        field   LQIABORT        0x20
        address                 0x051
        access_mode     WO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           4
        field   CLRLQIPHASE_LQ  0x80
        field   CLRLQIPHASE_NLQ 0x40
        field   CLRLIQABORT     0x20
        address                 0x051
        access_mode     RW
        modes           M_CFG
+       count           4
        field   ENLQIPHASE_LQ   0x80    /* LQIPHASE1 */
        field   ENLQIPHASE_NLQ  0x40    /* LQIPHASE2 */
        field   ENLIQABORT      0x20
        address                 0x053
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           3
        field   NTRAMPERR       0x02
        field   OSRAMPERR       0x01
 }
        address                 0x053
        access_mode     WO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           3
        field   CLRNTRAMPERR    0x02
        field   CLROSRAMPERR    0x01
 }
        address                 0x053
        access_mode     RW
        modes           M_CFG
+       count           4
        field   ENNTRAMPERR     0x02
        field   ENOSRAMPERR     0x01
 }
        address                 0x054
        access_mode     RO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           2
        field   LQOTARGSCBPERR  0x10
        field   LQOSTOPT2       0x08
        field   LQOATNLQ        0x04
        address                 0x054
        access_mode     WO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           3
        field   CLRLQOTARGSCBPERR       0x10
        field   CLRLQOSTOPT2            0x08
        field   CLRLQOATNLQ             0x04
        address                 0x054
        access_mode     RW
        modes           M_CFG
+       count           4
        field   ENLQOTARGSCBPERR        0x10
        field   ENLQOSTOPT2             0x08
        field   ENLQOATNLQ              0x04
        address                 0x055
        access_mode     WO
        modes           M_DFF0, M_DFF1, M_SCSI
+       count           7
        field   CLRLQOINITSCBPERR       0x10
        field   CLRLQOSTOPI2            0x08
        field   CLRLQOBADQAS            0x04
        address                 0x055
        access_mode     RW
        modes           M_CFG
+       count           4
        field   ENLQOINITSCBPERR        0x10
        field   ENLQOSTOPI2             0x08
        field   ENLQOBADQAS             0x04
        address                 0x056
        access_mode     RO
        modes           M_CFG
+       count           2
 }
 
 /*
        modes           M_SCSI
 }
 
-/* Rev B only. */
+/*
+ * LQO SCSI Control
+ * (Rev B only.)
+ */
 register LQOSCSCTL {
        address                 0x05A
        access_mode     RW
        size            1
        modes           M_CFG
+       count           1
        field           LQOH2A_VERSION  0x80
+       field           LQOBUSETDLY     0x40
+       field           LQONOHOLDLACK   0x02
        field           LQONOCHKOVER    0x01
 }
 
        address                 0x061
        access_mode     RW
        modes           M_SCSI
+       count           1
 }
 
 /*
        address                 0x062
        access_mode     RW
        modes           M_SCSI
+       count           1
 }
 
 /*
        address                 0x063
        access_mode     RW
        modes           M_SCSI
+       count           1
        field   PPROPT_PACE     0x08
        field   PPROPT_QAS      0x04
        field   PPROPT_DT       0x02
        address                 0x065
        access_mode     RW
        modes           M_SCSI
+       count           7
 }
 
+/*
+ * SCSI Check
+ * (Rev. B only)
+ */
 register SCSCHKN {
        address                 0x066
        access_mode     RW
        modes           M_CFG
+       count           1
+       field   BIDICHKDIS      0x80
        field   STSELSKIDDIS    0x40
        field   CURRFIFODEF     0x20
        field   WIDERESEN       0x10
        address                 0x066
        access_mode     RW
        modes           M_SCSI
+       count           3
 }
 
 /*
        address                 0x069
        access_mode     RW
        modes           M_SCSI
+       count           2
 }
 
 /*
        address                 0x0AB
        access_mode     RW
        modes           M_CFG
+       count           1
        field   AUSCBPTR_EN     0x80
        field   SCBPTR_ADDR     0x38
        field   SCBPTR_OFF      0x07
        address                 0x0B8
        access_mode     RW
        modes           M_SCSI
+       count           2
 }
 
 /*
        address                 0x0B9
        access_mode     RW
        modes           M_SCSI
+       count           7
        field   FLXARBACK       0x80
        field   FLXARBREQ       0x40
        field   BRDADDR         0x38
        address                 0x0BA
        access_mode     RW
        modes           M_SCSI
+       count           4
 }
 
 /*
        access_mode     RW
        size            2
        modes           M_SCSI
+       count           4
 }
 
 /*
        address                 0x0BE
        access_mode     RO
        modes           M_SCSI
+       count           1
        field   INIT_DONE       0x80
        field   SEEOPCODE       0x70
        field   LDALTID_L       0x08
        address                 0x0BE
        access_mode     RW
        modes           M_SCSI
+       count           4
        field   SEEOPCODE       0x70 {
                SEEOP_ERASE     0x70,
                SEEOP_READ      0x60,
        address                 0x0C1
        access_mode     RW
        modes           M_CFG
+       count           3
        field   BYPASSENAB      0x80
        field   DESQDIS         0x10
        field   RCVROFFSTDIS    0x04
        address                 0x0C4
        access_mode     RW
        modes           M_CFG
+       count           1
        field   AUTOINCEN       0x80
        field   DSPSEL          0x1F
 }
        address                 0x0C5
        access_mode     WO
        modes           M_CFG
+       count           3
        field   AUTOXBCDIS      0x80
        field   XMITMANVAL      0x3F
 }
  */
 register SEQCTL0 {
        address                 0x0D6
-       access_mode RW
+       access_mode     RW
+       count           11
        field   PERRORDIS       0x80
        field   PAUSEDIS        0x40
        field   FAILDIS         0x20
  */
 register FLAGS {
        address                 0x0D8
-       access_mode RO
+       access_mode     RO
+       count           23
        field   ZERO            0x02
        field   CARRY           0x01
 }
  */
 register SEQRAM {
        address                 0x0DA
-       access_mode RW
+       access_mode     RW
+       count           2
 }
 
 /*
        address                 0x0DE
        access_mode     RW
        size            2
+       count           5
 }
 
 /*
  */
 register ACCUM {
        address                 0x0E0
-       access_mode RW
+       access_mode     RW
        accumulator
 }
 
        access_mode     RW
        size            2
        modes           M_CFG
+       count           1
 }
 
 /*
        access_mode     RW
        size            2
        modes           M_SCSI
+       count           2
 }
 
 /*
        access_mode     RW
        size            2
        modes           M_CFG
+       count           1
 }
 
 /*
        /* Parameters for DMA Logic */
        DMAPARAMS {
                size            1
+               count           8
                field   PRELOADEN       0x80
                field   WIDEODD         0x40
                field   SCSIEN          0x20
         */
        KERNEL_TQINPOS {
                size            1
+               count           1
        }
        TQINPOS {
                size            1
+               count           8
        }
        /*
         * Base address of our shared data with the kernel driver in host
        }
        ARG_2 {
                size            1
+               count           1
                alias   RETURN_2
        }
 
         */
        SCSISEQ_TEMPLATE {
                size            1
+               count           7
                field   MANUALCTL       0x40
                field   ENSELI          0x20
                field   ENRSELI         0x10
         */
        INITIATOR_TAG {
                size            1
+               count           1
        }
 
        SEQ_FLAGS2 {
         */
        CMDSIZE_TABLE {
                size            8
+               count           8
        }
        /*
         * When an SCB with the MK_MESSAGE flag is
 /************************* Hardware SCB Definition ****************************/
 scb {
        address                 0x180
-       size    64
-       modes   0, 1, 2, 3
+       size            64
+       modes           0, 1, 2, 3
        SCB_RESIDUAL_DATACNT {
                size    4
                alias   SCB_CDB_STORE
 
 register OPTIONMODE {
        address                 0x008
        access_mode RW
+       count           2
        field   AUTORATEEN              0x80
        field   AUTOACKEN               0x40
        field   ATNMGMNTEN              0x20
        address                 0x00a
        size    2
        access_mode RW
+       count           2
 }
 
 /*
 register SSTAT3 {
        address                 0x00e
        access_mode RO
+       count           2
        mask    SCSICNT         0xf0
        mask    OFFCNT          0x0f
        mask    U2OFFCNT        0x7f
 register SIMODE0 {
        address                 0x010
        access_mode RW
+       count           2
        field   ENSELDO         0x40
        field   ENSELDI         0x20
        field   ENSELINGO       0x10
 register SELTIMER {
        address                 0x018
        access_mode RW
+       count           1
        field   STAGE6          0x20
        field   STAGE5          0x10
        field   STAGE4          0x08
        address                 0x01b
        size                    2
        access_mode RW
+       count           14
 }
 
 /*
 register SPIOCAP {
        address                 0x01b
        access_mode RW
+       count           10
        field   SOFT1           0x80
        field   SOFT0           0x40
        field   SOFTCMDEN       0x20    
 
 register BRDCTL        {
        address                 0x01d
+       count           11
        field   BRDDAT7         0x80
        field   BRDDAT6         0x40
        field   BRDDAT5         0x20
  */
 register SEECTL {
        address                 0x01e
+       count           11
        field   EXTARBACK       0x80
        field   EXTARBREQ       0x40
        field   SEEMS           0x20
 register SEQCTL {
        address                 0x060
        access_mode RW
+       count           15
        field   PERRORDIS       0x80
        field   PAUSEDIS        0x40
        field   FAILDIS         0x20
 register SEQRAM {
        address                 0x061
        access_mode RW
+       count           2
 }
 
 /*
 register SEQADDR1 {
        address                 0x063
        access_mode RW
+       count           8
        mask    SEQADDR1_MASK   0x01
 }
 
 register FLAGS {
        address                 0x06b
        access_mode RO
+       count           18
        field   ZERO            0x02
        field   CARRY           0x01
 }
 register STACK {
        address                 0x06f
        access_mode RO
+       count           5
 }
 
 const  STACK_SIZE      4
 register DSCOMMAND0 {
        address                 0x084
        access_mode RW
+       count           7
        field   CACHETHEN       0x80    /* Cache Threshold enable */
        field   DPARCKEN        0x40    /* Data Parity Check Enable */
        field   MPARCKEN        0x20    /* Memory Parity Check Enable */
 register BUSTIME {
        address                 0x085
        access_mode RW
+       count           2
        mask    BOFF            0xf0
        mask    BON             0x0f
 }
 register BUSSPD {
        address                 0x086
        access_mode RW
+       count           2
        mask    DFTHRSH         0xc0
        mask    STBOFF          0x38
        mask    STBON           0x07
 /* aic7850/55/60/70/80/95 only */
 register DSPCISTATUS {
        address                 0x086
+       count           4
        mask    DFTHRSH_100     0xc0
 }
 
 register HCNTRL {
        address                 0x087
        access_mode RW
+       count           14
        field   POWRDN          0x40
        field   SWINT           0x10
        field   IRQMS           0x08
 register ERROR {
        address                 0x092
        access_mode RO
+       count           26
        field   CIOPARERR       0x80    /* Ultra2 only */
        field   PCIERRSTAT      0x40    /* PCI only */
        field   MPARERR         0x20    /* PCI only */
 register CLRINT {
        address                 0x092
        access_mode WO
+       count           24
        field   CLRPARERR       0x10    /* PCI only */
        field   CLRBRKADRINT    0x08
        field   CLRSCSIINT      0x04
 register SCBCNT {
        address                 0x09a
        access_mode RW
+       count           1
        field   SCBAUTO         0x80
        mask    SCBCNT_MASK     0x1f
 }
 register QINFIFO {
        address                 0x09b
        access_mode RW
+       count           12
 }
 
 /*
 register QOUTFIFO {
        address                 0x09d
        access_mode WO
+       count           7
 }
 
 register CRCCONTROL1 {
        address                 0x09d
        access_mode RW
+       count           3
        field   CRCONSEEN               0x80
        field   CRCVALCHKEN             0x40
        field   CRCENDCHKEN             0x20
 register SFUNCT {
        address                 0x09f
        access_mode RW
+       count       4
        field   ALT_MODE        0x80
 }
 
        }
        SCB_SCSIOFFSET {
                size    1
+               count   1
        }
        SCB_NEXT {
                size    1
 register SEECTL_2840 {
        address                 0x0c0
        access_mode RW
+       count           2
        field   CS_2840         0x04
        field   CK_2840         0x02
        field   DO_2840         0x01
 register STATUS_2840 {
        address                 0x0c1
        access_mode RW
+       count           4
        field   EEPROM_TF       0x80
        mask    BIOS_SEL        0x60
        mask    ADSEL           0x1e
 
 register CCSCBCNT {
        address                 0xEF
+       count           1
 }
 
 register CCSCBCTL {
 register SCBBADDR {
        address                 0x0F0
        access_mode RW
+       count           3
 }
 
 register CCSCBPTR {
 
 register HNSCB_QOFF {
        address                 0x0F4
+       count           4
 }
 
 register SNSCB_QOFF {
        mask    WR_DFTHRSH_85   0x50
        mask    WR_DFTHRSH_90   0x60
        mask    WR_DFTHRSH_MAX  0x70
+       count   4
 }
 
 register SG_CACHE_PRE {
        ULTRA_ENB {
                alias           CMDSIZE_TABLE
                size            2
+               count           2
        }
        /*
         * Bit vector of targets that have disconnection disabled as set by
         */
        DISC_DSB {
                size            2
+               count           6
        }
        CMDSIZE_TABLE_TAIL {
                size            4
        /* Parameters for DMA Logic */
        DMAPARAMS {
                size            1
+               count           12
                field   PRELOADEN       0x80
                field   WIDEODD         0x40
                field   SCSIEN          0x20
        }
        ARG_1 {
                size            1
+               count           1
                mask    SEND_MSG                0x80
                mask    SEND_SENSE              0x40
                mask    SEND_REJ                0x20
                size    1
                field   HA_274_EXTENDED_TRANS   0x01
                alias   INITIATOR_TAG
+               count           1
        }
 
        SEQ_FLAGS2 {
         */
        SCSICONF {
                size            1
+               count           12
                field   TERM_ENB        0x80
                field   RESET_SCSI      0x40
                field   ENSPCHK         0x20
        INTDEF {
                address         0x05c
                size            1
+               count           1
                field   EDGE_TRIG       0x80
                mask    VECTOR          0x0f
        }
        HOSTCONF {
                address         0x05d
                size            1
+               count           1
        }
        HA_274_BIOSCTRL {
                address         0x05f
                size            1
+               count           1
                mask    BIOSMODE                0x30
                mask    BIOSDISABLED            0x30    
                field   CHANNEL_B_PRIMARY       0x08
         */
        TARG_OFFSET {
                size            16
+               count           1
        }
 }
 
 
 " *\n"
 "%s */\n", versions);
 
-       fprintf(ofile, "static uint8_t seqprog[] = {\n");
+       fprintf(ofile, "static const uint8_t seqprog[] = {\n");
        for (cur_instr = STAILQ_FIRST(&seq_program);
             cur_instr != NULL;
             cur_instr = STAILQ_NEXT(cur_instr, links)) {
        }
 
        fprintf(ofile,
-"static struct patch {\n"
+"static const struct patch {\n"
 "      %spatch_func_t          *patch_func;\n"
 "      uint32_t                 begin          :10,\n"
 "                               skip_instr     :10,\n"
        fprintf(ofile, "\n};\n\n");
 
        fprintf(ofile,
-"static struct cs {\n"
+"static const struct cs {\n"
 "      uint16_t        begin;\n"
 "      uint16_t        end;\n"
 "} critical_sections[] = {\n");
 
 
 %token <value> T_ADDRESS
 
+%token T_COUNT
+
 %token T_ACCESS_MODE
 
 %token T_MODES
 reg_attribute:
        reg_address
 |      size
+|      count
 |      access_mode
 |      modes
 |      field_defn
        }
 ;
 
+count:
+       T_COUNT T_NUMBER
+       {
+               cur_symbol->count += $2;
+       }
+;
+
 access_mode:
        T_ACCESS_MODE T_MODE
        {
                        cur_symtype = SRAMLOC;
                        cur_symbol->type = SRAMLOC;
                        initialize_symbol(cur_symbol);
+                       cur_symbol->count += 1;
                }
                reg_address
                {
                        initialize_symbol(cur_symbol);
                        /* 64 bytes of SCB space */
                        cur_symbol->info.rinfo->size = 64;
+                       cur_symbol->count += 1;
                }
                reg_address
                {
 
 const                  { yylval.value = FALSE; return T_CONST; }
 download               { return T_DOWNLOAD; }
 address                        { return T_ADDRESS; }
+count                  { return T_COUNT; }
 access_mode            { return T_ACCESS_MODE; }
 modes                  { return T_MODES; }
 RW|RO|WO               {
 
        if (new_symbol->name == NULL)
                 stop("Unable to strdup symbol name", EX_SOFTWARE);
        new_symbol->type = UNINITIALIZED;
+       new_symbol->count = 1;
        return (new_symbol);
 }
 
                }
        }
        memcpy(&stored_ptr, data.data, sizeof(stored_ptr));
+       stored_ptr->count++;
+       data.data = &stored_ptr;
+       if (symtable->put(symtable, &key, &data, /*flags*/0) !=0) {
+               perror("Symtable put failed");
+               exit(EX_SOFTWARE);
+       }
        return (stored_ptr);
 }
 
                    && (curnode->symbol->info.finfo->value >
                        newnode->symbol->info.finfo->value))))
                 || (!field && (curnode->symbol->info.rinfo->address >
-                              newnode->symbol->info.rinfo->address))) {
+                               newnode->symbol->info.rinfo->address))) {
                        SLIST_INSERT_HEAD(symlist, newnode, links);
                        return;
                }
 
                                cursymbol = SLIST_NEXT(curnode, links)->symbol;
                                if ((field
-                                 && (cursymbol->type > symbol->type
+                                 && (cursymbol->type > symbol->type
                                   || (cursymbol->type == symbol->type
                                    && (cursymbol->info.finfo->value >
                                        symbol->info.finfo->value))))
 {
        if (ofile == NULL)
                return;
-               
+
        fprintf(ofile,
 "typedef int (%sreg_print_t)(u_int, u_int *, u_int);\n"
 "typedef struct %sreg_parse_entry {\n"
                return;
 
        fprintf(dfile,
-"static %sreg_parse_entry_t %s_parse_table[] = {\n",
+"static const %sreg_parse_entry_t %s_parse_table[] = {\n",
                prefix,
                regnode->symbol->name);
 }
        lower_name = strdup(regnode->symbol->name);
        if (lower_name == NULL)
                 stop("Unable to strdup symbol name", EX_SOFTWARE);
-       
+
        for (letter = lower_name; *letter != '\0'; letter++)
                *letter = tolower(*letter);
 
        DBT              key;
        DBT              data;
        int              flag;
+       int              reg_count = 0, reg_used = 0;
        u_int            i;
 
        if (symtable == NULL)
                        int              num_entries;
 
                        num_entries = 0;
+                       reg_count++;
+                       if (curnode->symbol->count == 1)
+                               break;
                        fields = &curnode->symbol->info.rinfo->fields;
                        SLIST_FOREACH(fieldnode, fields, links) {
                                if (num_entries == 0)
                        }
                        aic_print_reg_dump_end(ofile, dfile,
                                               curnode, num_entries);
+                       reg_used++;
                }
                default:
                        break;
                }
        }
+       fprintf(stderr, "%s: %d of %d register definitions used\n", appname,
+               reg_used, reg_count);
 
        /* Fold in the masks and bits */
        while (SLIST_FIRST(&masks) != NULL) {
                free(curnode);
        }
 
-       
        fprintf(ofile, "\n\n/* Downloaded Constant Definitions */\n");
 
        for (i = 0; SLIST_FIRST(&download_constants) != NULL; i++) {
 
 typedef struct symbol {
        char    *name;
        symtype type;
+       int     count;
        union   {
                struct reg_info   *rinfo;
                struct field_info *finfo;