[BACK]Return to db_disasm.h CVS log [TXT][DIR] Up to [local] / sys / arch / m68k / m68k

Annotation of sys/arch/m68k/m68k/db_disasm.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: db_disasm.h,v 1.4 2002/03/14 01:26:34 millert Exp $   */
                      2: /*     $NetBSD: db_disasm.h,v 1.4 1996/04/01 01:38:12 briggs Exp $     */
                      3:
                      4: /*
                      5:  * Copyright (c) 1994 Christian E. Hopps
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *      This product includes software developed by Christian E. Hopps.
                     19:  * 4. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software without specific prior written permission
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     23:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     24:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     25:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     26:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     27:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     31:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     32:  */
                     33:
                     34: #define ENCB(b7,b6,b5,b4,b3,b2,b1,b0) \
                     35:        ((b7 << 7) | (b6 << 6) | (b5 << 5) | (b4 << 4) | \
                     36:        (b3 << 3) | (b2 << 2) | (b1 << 1) | (b0))
                     37:
                     38:
                     39: #define ENCW(b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1,b0) \
                     40:        ((ENCB(b15,b14,b13,b12,b11,b10,b9,b8) << 8) |\
                     41:        ENCB(b7,b6,b5,b4,b3,b2,b1,b0))
                     42:
                     43: /*
                     44:  * Group Bit-manip (0000)
                     45:  */
                     46: #define ANDITOCCR_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     47: #define ANDIROSR_MASK  ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     48: #define EORITOCCR_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     49: #define EORITOSR_MASK  ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     50: #define ORITOCCR_MASK  ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     51: #define ORITOSR_MASK   ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1)
                     52: #define ANDITOCCR_INST ENCW(0,0,0,0, 0,0,1,0, 0,0,1,1, 1,1,0,0)
                     53: #define ANDIROSR_INST  ENCW(0,0,0,0, 0,0,1,0, 0,1,1,1, 1,1,0,0)
                     54: #define EORITOCCR_INST ENCW(0,0,0,0, 1,0,1,0, 0,0,1,1, 1,1,0,0)
                     55: #define EORITOSR_INST  ENCW(0,0,0,0, 1,0,1,0, 0,1,1,1, 1,1,0,0)
                     56: #define ORITOCCR_INST  ENCW(0,0,0,0, 0,0,0,0, 0,0,1,1, 1,1,0,0)
                     57: #define ORITOSR_INST   ENCW(0,0,0,0, 0,0,0,0, 0,1,1,1, 1,1,0,0)
                     58:
                     59: /*
                     60:  * RTM: this is what gas *and* my amiga assembler spit out, however
                     61:  * my moto manual disagrees, another 030 manual I have also has
                     62:  * something different from all of the above!
                     63:  *
                     64:  * BTW there may be a consipircy, as many may recognize
                     65:  * from the acronym associated with this opcode's name. *grin*
                     66:  */
                     67: #define RTM_MASK       ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 0,0,0,0)
                     68: #define RTM_INST       ENCW(0,0,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0)
                     69:
                     70: /* Note: bit eight being 1 here allows these to be check before all else */
                     71:
                     72: /* Note: for movp bits 5-3, specify a mode An, which all the other
                     73:  * bit 8 set commands do not, so have check first. */
                     74: #define MOVEP_MASK     ENCW(1,1,1,1, 0,0,0,1, 0,0,1,1, 1,0,0,0)
                     75: #define MOVEP_INST     ENCW(0,0,0,0, 0,0,0,1, 0,0,0,0, 1,0,0,0)
                     76:
                     77: #define BCHGD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                     78: #define BCLRD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                     79: #define BSETD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                     80: #define BTSTD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                     81: #define BCHGD_INST     ENCW(0,0,0,0, 0,0,0,1, 0,1,0,0, 0,0,0,0)
                     82: #define BCLRD_INST     ENCW(0,0,0,0, 0,0,0,1, 1,0,0,0, 0,0,0,0)
                     83: #define BSETD_INST     ENCW(0,0,0,0, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                     84: #define BTSTD_INST     ENCW(0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                     85:
                     86: #define BCHGS_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                     87: #define BCLRS_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                     88: #define BSETS_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                     89: #define BTSTS_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                     90: #define BCHGS_INST     ENCW(0,0,0,0, 1,0,0,0, 0,1,0,0, 0,0,0,0)
                     91: #define BCLRS_INST     ENCW(0,0,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0)
                     92: #define BSETS_INST     ENCW(0,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0)
                     93: #define BTSTS_INST     ENCW(0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0)
                     94:
                     95: #define CAS2_MASK      ENCW(1,1,1,1, 1,1,0,1, 1,1,1,1, 1,1,1,1)
                     96: #define CAS2_INST      ENCW(0,0,0,0, 1,1,0,0, 1,1,1,1, 1,1,0,0)
                     97:
                     98: #define CAS_MASK       ENCW(1,1,1,1, 1,0,0,1, 1,1,0,0, 0,0,0,0)
                     99: #define CHK2_MASK      ENCW(1,1,1,1, 1,0,0,1, 1,1,0,0, 0,0,0,0)
                    100: #define CMP2_MASK      ENCW(1,1,1,1, 1,0,0,1, 1,1,0,0, 0,0,0,0)
                    101: #define CAS_INST       ENCW(0,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0)
                    102: #define CHK2_INST      ENCW(0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    103: #define CMP2_INST      ENCW(0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    104:
                    105: /* close ties with Bxxx but bit eight here is 0 and there 1 */
                    106: /* also above (cas,chk2,cmp2) bits 7-6 here are size and never 11 */
                    107: #define ADDI_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    108: #define ANDI_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    109: #define CMPI_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    110: #define EORI_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    111: #define MOVES_MASK     ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    112: #define ORI_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    113: #define SUBI_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    114: #define ADDI_INST      ENCW(0,0,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0)
                    115: #define ANDI_INST      ENCW(0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0)
                    116: #define CMPI_INST      ENCW(0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0)
                    117: #define EORI_INST      ENCW(0,0,0,0, 1,0,1,0, 0,0,0,0, 0,0,0,0)
                    118: #define MOVES_INST     ENCW(0,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0)
                    119: #define ORI_INST       ENCW(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    120: #define SUBI_INST      ENCW(0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0)
                    121:
                    122: /*
                    123:  * Group misc. (0100)
                    124:  */
                    125: #define BGND_MASK      0xffff
                    126: #define ILLEGAL_MASK   0xffff
                    127: #define MOVEFRC_MASK   0xffff
                    128: #define MOVETOC_MASK   0xffff
                    129: #define NOP_MASK       0xffff
                    130: #define RESET_MASK     0xffff
                    131: #define RTD_MASk       0xffff
                    132: #define RTE_MASK       0xffff
                    133: #define RTR_MASK       0xffff
                    134: #define RTS_MASK       0xffff
                    135: #define STOP_MASK      0xffff
                    136: #define TRAPV_MASK     0xffff
                    137: #define BGND_INST      ENCW(0,1,0,0, 1,0,1,0, 1,1,1,1, 1,0,1,0)
                    138: #define ILLEGAL_INST   ENCW(0,1,0,0, 1,0,1,0, 1,1,1,1, 1,1,0,0)
                    139: #define MOVEFRC_INST   ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 1,0,1,0)
                    140: #define MOVETOC_INST   ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 1,0,1,1)
                    141: #define NOP_INST       ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,0,0,1)
                    142: #define RESET_INST     ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,0,0,0)
                    143: #define RTD_INST       ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,1,0,0)
                    144: #define RTE_INST       ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,0,1,1)
                    145: #define RTR_INST       ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,1,1,1)
                    146: #define RTS_INST       ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,1,0,1)
                    147: #define STOP_INST      ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,0,1,0)
                    148: #define TRAPV_INST     ENCW(0,1,0,0, 1,1,1,0, 0,1,1,1, 0,1,1,0)
                    149: #define SWAP_MASK      ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    150: #define SWAP_INST      ENCW(0,1,0,0, 1,0,0,0, 0,1,0,0, 0,0,0,0)
                    151:
                    152: #define BKPT_MASK      ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    153: #define EXTBW_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    154: #define EXTWL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    155: #define EXTBL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    156: #define LINKW_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    157: #define LINKL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    158: #define MOVEFRUSP_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    159: #define MOVETOUSP_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    160: #define UNLK_MASK      ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,0)
                    161: #undef BKPT_INST
                    162: #define BKPT_INST      ENCW(0,1,0,0, 1,0,0,0, 0,1,0,0, 1,0,0,0)
                    163: #define EXTBW_INST     ENCW(0,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0)
                    164: #define EXTWL_INST     ENCW(0,1,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0)
                    165: #define EXTBL_INST     ENCW(0,1,0,0, 1,0,0,1, 1,1,0,0, 0,0,0,0)
                    166: #define LINKW_INST     ENCW(0,1,0,0, 1,1,1,0, 0,1,0,1, 0,0,0,0)
                    167: #define LINKL_INST     ENCW(0,1,0,0, 1,0,0,0, 0,0,0,0, 1,0,0,0)
                    168: #define MOVETOUSP_INST ENCW(0,1,0,0, 1,1,1,0, 0,1,1,0, 0,0,0,0)
                    169: #define MOVEFRUSP_INST ENCW(0,1,0,0, 1,1,1,0, 0,1,1,0, 1,0,0,0)
                    170: #define UNLK_INST      ENCW(0,1,0,0, 1,1,1,0, 0,1,0,1, 1,0,0,0)
                    171:
                    172: #define TRAP_MASK      ENCW(1,1,1,1, 1,1,1,1, 1,1,1,1, 0,0,0,0)
                    173: #define TRAP_INST      ENCW(0,1,0,0, 1,1,1,0, 0,1,0,0, 0,0,0,0)
                    174:
                    175: #define DIVSL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    176: #define DIVUL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    177: #define JMP_MASK       ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    178: #define JSR_MASK       ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    179: #define MOVEFRCCR_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    180: #define MOVETOCCR_MASK ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    181: #define MOVEFRSR_MASK  ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    182: #define MOVETOSR_MASK  ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    183: #define MULSL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    184: #define MULUL_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    185: #define NBCD_MASK      ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    186: #define PEA_MASK       ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    187: #define TAS_MASK       ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    188: #define DIVSL_INST     ENCW(0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0)
                    189: #define DIVUL_INST     DIVSL_INST
                    190: #define JMP_INST       ENCW(0,1,0,0, 1,1,1,0, 1,1,0,0, 0,0,0,0)
                    191: #define JSR_INST       ENCW(0,1,0,0, 1,1,1,0, 1,0,0,0, 0,0,0,0)
                    192: #define MOVEFRCCR_INST ENCW(0,1,0,0, 0,0,1,0, 1,1,0,0, 0,0,0,0)
                    193: #define MOVETOCCR_INST ENCW(0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0)
                    194: #define MOVEFRSR_INST  ENCW(0,1,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    195: #define MOVETOSR_INST  ENCW(0,1,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0)
                    196: #define MULSL_INST     ENCW(0,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0)
                    197: #define MULUL_INST     MULSL_INST
                    198: #define NBCD_INST      ENCW(0,1,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0)
                    199: #define PEA_INST       ENCW(0,1,0,0, 1,0,0,0, 0,1,0,0, 0,0,0,0)
                    200: #define TAS_INST       ENCW(0,1,0,0, 1,0,1,0, 1,1,0,0, 0,0,0,0)
                    201:
                    202: #define MOVEM_MASK     ENCW(1,1,1,1, 1,0,1,1, 1,0,0,0, 0,0,0,0)
                    203: #define MOVEM_INST     ENCW(0,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0)
                    204:
                    205: #define CLR_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    206: #define NEG_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    207: #define NEGX_MASK      ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    208: #define NOT_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    209: #define TST_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    210: #define CLR_INST       ENCW(0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0)
                    211: #define NEG_INST       ENCW(0,1,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0)
                    212: #define NEGX_INST      ENCW(0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    213: #define NOT_INST       ENCW(0,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0)
                    214:        /* Note: very similatr to MOVEM but bit 9 differentiates. */
                    215: #define TST_INST       ENCW(0,1,0,0, 1,0,1,0, 0,0,0,0, 0,0,0,0)
                    216:
                    217: #define LEA_MASK       ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    218: #define LEA_INST       ENCW(0,1,0,0, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    219:
                    220: #define CHK_MASK       ENCW(1,1,1,1, 0,0,0,1, 0,1,0,0, 0,0,0,0)
                    221: #define CHK_INST       ENCW(0,1,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    222:
                    223: /*
                    224:  * Group bitfield/Shift/Rotate. (1110)
                    225:  */
                    226: #define BFCHG_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    227: #define BFCLR_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    228: #define BFEXTS_MASK    ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    229: #define BFEXTU_MASK    ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    230: #define BFFFO_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    231: #define BFINS_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    232: #define BFSET_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    233: #define BFTST_MASK     ENCW(1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    234:
                    235: #define BFCHG_INST     ENCW(1,1,1,0, 1,0,1,0, 1,1,0,0, 0,0,0,0)
                    236: #define BFCLR_INST     ENCW(1,1,1,0, 1,1,0,0, 1,1,0,0, 0,0,0,0)
                    237: #define BFEXTS_INST    ENCW(1,1,1,0, 1,0,1,1, 1,1,0,0, 0,0,0,0)
                    238: #define BFEXTU_INST    ENCW(1,1,1,0, 1,0,0,1, 1,1,0,0, 0,0,0,0)
                    239: #define BFFFO_INST     ENCW(1,1,1,0, 1,1,0,1, 1,1,0,0, 0,0,0,0)
                    240: #define BFINS_INST     ENCW(1,1,1,0, 1,1,1,1, 1,1,0,0, 0,0,0,0)
                    241: #define BFSET_INST     ENCW(1,1,1,0, 1,1,1,0, 1,1,0,0, 0,0,0,0)
                    242: #define BFTST_INST     ENCW(1,1,1,0, 1,0,0,0, 1,1,0,0, 0,0,0,0)
                    243:
                    244: #define AS_TYPE                0x0
                    245: #define LS_TYPE                0x1
                    246: #define RO_TYPE                0x3
                    247: #define ROX_TYPE       0x2
                    248:
                    249: /*
                    250:  * Group DBcc/TRAPcc/ADDQ/SUBQ (0101)
                    251:  */
                    252: #define DBcc_MASK      ENCW(1,1,1,1, 0,0,0,0, 1,1,1,1, 1,0,0,0)
                    253: #define TRAPcc_MASK    ENCW(1,1,1,1, 0,0,0,0, 1,1,1,1, 1,0,0,0)
                    254: #define Scc_MASK       ENCW(1,1,1,1, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    255: #define ADDQ_MASK      ENCW(1,1,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    256: #define SUBQ_MASK      ENCW(1,1,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    257: #define DBcc_INST      ENCW(0,1,0,1, 0,0,0,0, 1,1,0,0, 1,0,0,0)
                    258: #define TRAPcc_INST    ENCW(0,1,0,1, 0,0,0,0, 1,1,1,1, 1,0,0,0)
                    259: #define Scc_INST       ENCW(0,1,0,1, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    260: #define ADDQ_INST      ENCW(0,1,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    261: #define SUBQ_INST      ENCW(0,1,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    262:
                    263: /*
                    264:  * Group ADD/ADDX (1101)
                    265:  */
                    266: #define ADDX_MASK      ENCW(1,1,1,1, 0,0,0,1, 0,0,1,1, 0,0,0,0)
                    267: #define ADDX_INST      ENCW(1,1,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    268: #define ADD_MASK       ENCW(1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    269: #define ADD_INST       ENCW(1,1,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    270:
                    271: /*
                    272:  * Group SUB/SUBX (1001)
                    273:  */
                    274: #define SUBX_MASK      ENCW(1,1,1,1, 0,0,0,1, 0,0,1,1, 0,0,0,0)
                    275: #define SUBX_INST      ENCW(1,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    276: #define SUB_MASK       ENCW(1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    277: #define SUB_INST       ENCW(1,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    278:
                    279: /*
                    280:  * Group CMP/CMPA/EOR (1011)
                    281:  */
                    282: #define CMPA_MASK      ENCW(1,1,1,1, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    283: #define CMPA_INST      ENCW(1,0,1,1, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    284:
                    285: #define CMP_MASK       ENCW(1,1,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    286: #define CMP_INST       ENCW(1,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    287:
                    288: #define EOR_MASK       ENCW(1,1,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    289: #define EOR_INST       ENCW(1,0,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    290:
                    291: /*
                    292:  * Group branch. (0110)
                    293:  */
                    294: #define BRA_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    295: #define BSR_MASK       ENCW(1,1,1,1, 1,1,1,1, 0,0,0,0, 0,0,0,0)
                    296: #define Bcc_MASK       ENCW(1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    297: #define BRA_INST       ENCW(0,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    298: #define BSR_INST       ENCW(0,1,1,0, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    299: #define Bcc_INST       ENCW(0,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    300:
                    301:
                    302: /*
                    303:  * Group SBCD/DIVx/OR (1000)
                    304:  */
                    305:
                    306: #define UNPKA_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    307: #define UNPKD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    308: #define UNPKA_INST     ENCW(1,0,0,0, 0,0,0,1, 1,0,0,0, 1,0,0,0)
                    309: #define UNPKD_INST     ENCW(1,0,0,0, 0,0,0,1, 1,0,0,0, 0,0,0,0)
                    310: #define SBCDA_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    311: #define SBCDD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    312: #define SBCDA_INST     ENCW(1,0,0,0, 0,0,0,1, 0,0,0,0, 1,1,1,1)
                    313: #define SBCDD_INST     ENCW(1,0,0,0, 0,0,0,1, 0,0,0,0, 0,1,1,1)
                    314:
                    315: #define DIVSW_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    316: #define DIVUW_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    317: #define DIVSW_INST     ENCW(1,0,0,0, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    318: #define DIVUW_INST     ENCW(1,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    319:
                    320: #define OR_MASK                ENCW(1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    321: #define OR_INST                ENCW(1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    322:
                    323: /*
                    324:  * Group AND/MUL/ABCD/EXG (1100)
                    325:  */
                    326: #define ABCDA_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    327: #define ABCDD_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,1,1, 1,0,0,0)
                    328: #define ABCDA_INST     ENCW(1,1,0,0, 0,0,0,1, 0,0,0,0, 1,0,0,0)
                    329: #define ABCDD_INST     ENCW(1,1,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    330:
                    331: #define MULSW_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    332: #define MULUW_MASK     ENCW(1,1,1,1, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    333: #define MULSW_INST     ENCW(1,1,0,0, 0,0,0,1, 1,1,0,0, 0,0,0,0)
                    334: #define MULUW_INST     ENCW(1,1,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0)
                    335:
                    336: #define EXG_MASK       ENCW(1,1,1,1, 0,0,0,1, 0,0,1,1, 0,0,0,0)
                    337: #define EXG_INST       ENCW(1,1,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0)
                    338:
                    339: #define AND_MASK       ENCW(1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    340: #define AND_INST       ENCW(1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
                    341:
                    342: #define ENCFT(b5,b4,b3,b2,b1,b0) ENCB(0,0,b5,b4,b3,b2,b1,b0)
                    343:
                    344: #define FABS   ENCFT(0,1,1,0,0,0)
                    345: #define FACOS  ENCFT(0,1,1,1,0,0)
                    346: #define FADD   ENCFT(1,0,0,0,1,0)
                    347: #define FASIN  ENCFT(0,0,1,1,0,0)
                    348: #define FATAN  ENCFT(0,0,1,0,1,0)
                    349: #define FATANH ENCFT(0,0,1,1,0,1)
                    350: #define FCMP   ENCFT(1,1,1,0,0,0)
                    351: #define FCOS   ENCFT(0,1,1,1,0,1)
                    352: #define FCOSH  ENCFT(0,1,1,0,0,1)
                    353: #define FDIV   ENCFT(1,0,0,0,0,0)
                    354: #define FETOX  ENCFT(0,1,0,0,0,0)
                    355: #define FGETEXP        ENCFT(0,1,1,1,1,0)
                    356: #define FGETMAN        ENCFT(0,1,1,1,1,1)
                    357: #define FINT   ENCFT(0,0,0,0,0,1)
                    358: #define FINTRZ ENCFT(0,0,0,0,1,1)
                    359: #define FLOG10 ENCFT(0,1,0,1,0,1)
                    360: #define FLOG2  ENCFT(0,1,0,1,1,0)
                    361: #define FLOGN  ENCFT(0,1,0,1,0,0)
                    362: #define FLOGNP1        ENCFT(0,0,0,1,1,0)
                    363: #define FMOD   ENCFT(1,0,0,0,0,1)
                    364: #define FMOVE  ENCFT(0,0,0,0,0,0)
                    365: #define FMUL   ENCFT(1,0,0,0,1,1)
                    366: #define FNEG   ENCFT(0,1,1,0,1,0)
                    367: #define FREM   ENCFT(1,0,0,1,0,1)
                    368: #undef FSCALE
                    369: #define FSCALE ENCFT(1,0,0,1,1,0)
                    370: #define FSGLDIV        ENCFT(1,0,0,1,0,0)
                    371: #define FSGLMUL        ENCFT(1,0,0,1,1,1)
                    372: #define FSIN   ENCFT(0,0,1,1,1,0)
                    373: #define FSINH  ENCFT(0,0,0,0,1,0)
                    374: #define FSQRT  ENCFT(0,0,0,1,0,0)
                    375: #define FSUB   ENCFT(1,0,1,0,0,0)
                    376: #define FTAN   ENCFT(0,0,1,1,1,1)
                    377: #define FTANH  ENCFT(0,0,1,0,0,1)
                    378: #define FTENTOX        ENCFT(0,1,0,0,1,0)
                    379: #define FTST   ENCFT(1,1,1,0,1,0)
                    380: #define FTWOTOX        ENCFT(0,1,0,0,0,1)
                    381:
                    382: enum getmod_flag { GETMOD_BEFORE = -1, GETMOD_AFTER = -2 };
                    383:
                    384: enum opcode_flags {
                    385:        CPU_000 = 0x1, CPU_010 = 0x2, CPU_020 = 0x4, CPU_030 = 0x8,
                    386:        CPU_040 = 0x10, FPU_881 = 0x40, FPU_882 = 0x80, FPU_040 = 0x100,
                    387:        MMU_851 = 0x400, MMU_030 = 0x800, MMU_040 = 0x1000,
                    388:
                    389:        CPU_ANY = CPU_000 | CPU_010 | CPU_020 | CPU_030 | CPU_040,
                    390:        FPU_ANY = FPU_881 | FPU_882 | FPU_040,
                    391:        MMU_ANY = MMU_851 | MMU_030 | MMU_040,
                    392:        CPU_020UP = CPU_020 | CPU_030 | CPU_040,
                    393: };
                    394:
                    395: enum mod_types {
                    396:        DR_DIR = 0,
                    397:        AR_DIR, AR_IND, AR_INC, AR_DEC,
                    398:        AR_DIS, AR_IDX, MOD_SPECIAL
                    399: };
                    400:
                    401: enum sizes { SIZE_BYTE = sizeof(char), SIZE_WORD = sizeof(short),
                    402:     SIZE_LONG = sizeof(long), SIZE_SINGLE = 5, SIZE_QUAD = 6,
                    403:     SIZE_DOUBLE = SIZE_QUAD, SIZE_EXTENDED = 7, SIZE_PACKED = 8 };
                    404:
                    405: struct dis_buffer {
                    406:        short *val;             /* pointer to memory. */
                    407:        char *dasm;             /* actual dasm. */
                    408:        char *casm;             /* current position in dasm. */
                    409:        char *info;             /* extra info. */
                    410:        char *cinfo;            /* current position in info. */
                    411:        int   used;             /* length used. */
                    412:        int   mit;              /* use mit sytanx. */
                    413: };
                    414: typedef struct dis_buffer dis_buffer_t;
                    415:
                    416: #define ISBITSET(val,b)        ((val) & (1 << (b)))
                    417: #define BITFIELD_MASK(sb,eb)   (((1 << ((sb) + 1))-1) & (~((1 << (eb))-1)))
                    418: #define BITFIELD(val,sb,eb)    ((BITFIELD_MASK(sb,eb) & (val)) >> (eb))
                    419: #define OPCODE_MAP(x) (BITFIELD(x,15,12))
                    420: #ifdef __STDC__
                    421: #define IS_INST(inst,val) ((inst ## _MASK & (val)) == inst ## _INST)
                    422: #else
                    423: #define IS_INST(inst,val) ((inst/**/_MASK & (val)) == inst/**/_INST)
                    424: #endif
                    425: #define PRINT_FPREG(dbuf, reg) addstr(dbuf, fpregs[reg])
                    426: #define PRINT_DREG(dbuf, reg) addstr(dbuf, dregs[reg])
                    427: #define PRINT_AREG(dbuf, reg) addstr(dbuf, aregs[reg])
                    428:
                    429: db_addr_t      db_disasm(db_addr_t loc, boolean_t moto_syntax);
                    430: void   get_modregstr_moto(dis_buffer_t *dbuf, int bit, int mod, int sz, int dd);
                    431: void   get_modregstr_mit(dis_buffer_t *dbuf, int bit, int mod, int sz, int dd);
                    432: u_long get_areg_val(int reg);

CVSweb