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