Annotation of researchv9/cmd/sun/c2/inst.h, revision 1.1

1.1     ! root        1: /*     @(#)inst.h 1.1 86/02/03 SMI     */
        !             2: 
        !             3: /*
        !             4:  * Copyright (c) 1985 by Sun Microsystems, Inc.
        !             5:  */
        !             6: 
        !             7: 
        !             8: /* 
        !             9:  * When this table is changed, we must also change:
        !            10:  *     the table in pseudoop.c that is indexed by it.
        !            11:  */
        !            12: typedef enum{
        !            13:        OP_FIRST = 0, OP_COMMENT, OP_LABEL,
        !            14:        OP_LONG, OP_WORD, OP_BYTE, OP_TEXT, 
        !            15:        OP_DATA, OP_DATA1, OP_DATA2, OP_BSS, 
        !            16:        OP_GLOBL, OP_COMM, OP_EVEN, OP_ALIGN,
        !            17:        OP_ASCIZ, OP_ASCII, OP_FLOAT, OP_DOUBLE,
        !            18:        OP_STABS, OP_STABD, OP_STABN, OP_SKIP, OP_LCOMM, OP_CPID,
        !            19:        OP_CSWITCH, OP_FSWITCH, OP_BRANCH, OP_MOVE, OP_MOVEM, 
        !            20:        OP_EXIT, OP_DBRA, OP_CALL, OP_JUMP, OP_DJMP, 
        !            21:        OP_LINK, OP_CMP, OP_PEA, OP_ADD, OP_AND, 
        !            22:        OP_EXT, OP_OR, OP_TST, OP_ASL, OP_ASR, 
        !            23:        OP_SUB, OP_UNLK, OP_LEA, OP_CLR , OP_BOP,
        !            24:        OP_EOR, 
        !            25:        OP_FTST, 
        !            26:        OP_OTHER
        !            27: } opcode_t;
        !            28: 
        !            29: typedef enum{
        !            30:     SUBOP_B = 0, SUBOP_W = 1, SUBOP_L = 2,
        !            31:     SUBOP_S = 3, SUBOP_D = 4, SUBOP_X = 5,
        !            32:     SUBOP_P = 6, SUBOP_C = 7,
        !            33:     JEQ = 8, JNE, JLE, JGE, JLT, JGT, JLS, JHI, JMI, JPL,
        !            34:     JALL, JCS, JCC, JVS, JVC, JNONE,
        !            35:     JFEQ, JFNEQ, JFLT, JFNLT, JFLE, JFNLE, JFGT, JFNGT,
        !            36:     JFGE, JFNGE, 
        !            37:     FJEQ, FJNEQ, FJGT, FJNGT, FJGE, FJNGE, FJLT, FJNLT, FJLE, FJNLE, 
        !            38:     FJGL, FJNGL, FJGLE, FJNGLE, FJOGT, FJULE, FJOGE, FJULT, FJOLT, FJUGE,
        !            39:     FJOLE, FJUGT, FJOGL, FJUEQ, FJOR, FJUN, FJSF, FJST, FJSEQ, FJSNEQ,
        !            40:     JIND,
        !            41:     SUBOP_Z    /* Last type for typeless instructions. */
        !            42: } subop_t;
        !            43: 
        !            44: /* Instruction Hash Table entry */
        !            45: 
        !            46: # define N_OPTYPES 8   /* Maximum number of operand type descriptors. */
        !            47: 
        !            48: struct ins_bkt {
        !            49:        char           *text_i;
        !            50:        opcode_t        op_i:8;
        !            51:        subop_t         subop_i:8;
        !            52:        unsigned short  touchop_i;
        !            53:        short           noper_i:8;              
        !            54:        short           cc_i:8;
        !            55:        short           nassoc_i:8;
        !            56: #if AS
        !            57:        short           align_i:8;
        !            58:        int           (*routine_i)();
        !            59:        unsigned short  opval_i[5]; /* info, usually opcodes */
        !            60:        short           xflags_i;
        !            61: #endif
        !            62:        unsigned 
        !            63:                 optype_i[N_OPTYPES]; /* up to 4 pairs of 2 operands */
        !            64: };
        !            65: 
        !            66: /* instructuion flag values */
        !            67: # define I20   1       /* instruction only on 68020 */
        !            68: # define I81   2       /* instruction only on 68881 */
        !            69: 
        !            70: struct ins_ptr {       /* arranged so op-code table can be read-only */
        !            71:        char           *name_p;
        !            72:        struct ins_ptr *next_p;
        !            73:        struct ins_bkt *this_p;
        !            74: };
        !            75: extern struct ins_ptr *inst;
        !            76: extern char   opcodetypes[];
        !            77: #define INSTRTYPE      1
        !            78: #define PSEUDONOCODE   2
        !            79: #define PSEUDOCODE     4
        !            80: #define BRANCHTYPE     8
        !            81: #define JUMPTYPE       020
        !            82: #define ISINSTRUC( op ) (opcodetypes[(int)(op)]&INSTRTYPE)
        !            83: #define ISPSEUDO( op ) (opcodetypes[(int)(op)]&(PSEUDOCODE|PSEUDONOCODE))
        !            84: #define ISDIRECTIVE( op ) (opcodetypes[(int)(op)]&PSEUDONOCODE)
        !            85: #define ISBRANCH( op ) (opcodetypes[(int)(op)]&BRANCHTYPE)
        !            86: #define ISJUMP( op ) (opcodetypes[(int)(op)]&JUMPTYPE)
        !            87: 
        !            88: /* operand access bits */
        !            89: # define RMASK 3
        !            90: # define WMASK 014
        !            91: # define RWWIDTH 2
        !            92: # define BR  1
        !            93: # define WR  2
        !            94: # define LR  3
        !            95: # define BW  4
        !            96: # define WW  8
        !            97: # define LW  12
        !            98: # define TOUCHWIDTH 5
        !            99: # define TOUCHMASK  037
        !           100: # define SPEC(n) (16+n)
        !           101: # define TOUCH1(x) (x&TOUCHMASK)
        !           102: # define TOUCH2(x) ((x&TOUCHMASK)<<TOUCHWIDTH)
        !           103: # define TOUCH3(x) (((x&TOUCHMASK)<<TOUCHWIDTH)<<TOUCHWIDTH)
        !           104: /* operand access bits for floating point */
        !           105: # define SR    LR
        !           106: # define XR    LR
        !           107: # define PR    LR
        !           108: # define DR    LR
        !           109: # define CR    LR
        !           110: # define FR    LR
        !           111: # define SW    LW
        !           112: # define XW    LW
        !           113: # define PW    LW
        !           114: # define DW    LW
        !           115: # define CW    LW
        !           116: # define FW    LW
        !           117: 
        !           118: #if AS
        !           119: /* size code fields for floating point */
        !           120: 
        !           121: # define L_SIZE        0*02000
        !           122: # define S_SIZE        1*02000
        !           123: # define X_SIZE        2*02000
        !           124: # define P_SIZE        3*02000
        !           125: # define W_SIZE        4*02000
        !           126: # define D_SIZE        5*02000
        !           127: # define B_SIZE        6*02000
        !           128: # define C_SIZE        7*02000
        !           129: 
        !           130: /* floating point condition code fields */
        !           131: 
        !           132: # define FCC_F         00
        !           133: # define FCC_EQ                01
        !           134: # define FCC_OGT       02
        !           135: # define FCC_OGE       03
        !           136: # define FCC_OLT       04
        !           137: # define FCC_OLE       05
        !           138: # define FCC_OGL       06
        !           139: # define FCC_OR                07
        !           140: # define FCC_UN                010
        !           141: # define FCC_UEQ       011
        !           142: # define FCC_UGT       012
        !           143: # define FCC_UGE       013
        !           144: # define FCC_ULT       014
        !           145: # define FCC_ULE       015
        !           146: # define FCC_NEQ       016
        !           147: # define FCC_T         017
        !           148: # define FCC_SF                020
        !           149: # define FCC_SEQ       021
        !           150: # define FCC_GT                022
        !           151: # define FCC_GE                023
        !           152: # define FCC_LT                024
        !           153: # define FCC_LE                025
        !           154: # define FCC_GL                026
        !           155: # define FCC_GLE       027
        !           156: # define FCC_NGLE      030
        !           157: # define FCC_NGL       031
        !           158: # define FCC_NLE       032
        !           159: # define FCC_NLT       033
        !           160: # define FCC_NGE       034
        !           161: # define FCC_NGT       035
        !           162: # define FCC_SNEQ      036
        !           163: # define FCC_ST                037
        !           164: #endif AS
        !           165: 
        !           166: /* operand addressing mode bits */
        !           167: # define AM_DREG       01
        !           168: # define AM_AREG       02
        !           169: # define AM_DEFER      04
        !           170: # define AM_POSTINC    010
        !           171: # define AM_PREDEC     020
        !           172: # define AM_DISPL      040
        !           173: # define AM_INDEX      0100
        !           174: # define AM_ABSS       0200
        !           175: # define AM_ABSL       0400
        !           176: # define AM_IMMED      01000
        !           177: # define AM_PCDISPL    02000
        !           178: # define AM_PCINDEX    04000
        !           179: # define AM_NORMAL     010000
        !           180: # define AM_REG                (AM_DREG|AM_AREG)
        !           181: # define AM_ALL                017777
        !           182: # define AM_FREG        020000
        !           183: # define AM_CCREG       040000
        !           184: # define AM_CTRLREG     0100000
        !           185: # define AM_USPREG      0200000
        !           186: # define AM_PCREG       0400000
        !           187: # define AM_REGPAIR     01000000
        !           188: # define AM_FCTRLREG   02000000
        !           189: # define AM_REGLIST    04000000
        !           190: # define AM_FREGLIST   010000000
        !           191: # define AM_FCREGLIST  020000000
        !           192: 
        !           193: # define AM_AMEM       (AM_DEFER|AM_POSTINC|AM_PREDEC|AM_DISPL|AM_INDEX|AM_ABSS|AM_ABSL|AM_NORMAL)
        !           194: # define AM_ADAT       (AM_AMEM|AM_DREG)
        !           195: # define AM_CTRL       (AM_DEFER|AM_DISPL|AM_INDEX|AM_ABSS|AM_ABSL|AM_NORMAL|AM_PCDISPL|AM_PCINDEX)
        !           196: # define AM_ACTRL      (AM_DEFER|AM_DISPL|AM_INDEX|AM_ABSS|AM_ABSL|AM_NORMAL)
        !           197: # define AM_MEM                (AM_ALL&~AM_REG)
        !           198: # define AM_ADDR       (AM_ALL&~AM_REG&~AM_IMMED)
        !           199: # define AM_DATA       (AM_ALL&~AM_AREG)
        !           200: # define AM_AA         (AM_ALL&~(AM_PCDISPL|AM_PCINDEX|AM_IMMED))
        !           201: 
        !           202: #if C2
        !           203: /* cc set */
        !           204: # define CC0           0
        !           205: # define CC1           1
        !           206: # define CC2           2
        !           207: # define CCX           3
        !           208: # define FCC0          0
        !           209: # define FCC           010
        !           210: # define CCR           0100
        !           211: # define FCCR          0200
        !           212: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.