|
|
1.1 ! root 1: /* ! 2: * n2/i386/optab.c ! 3: * Opcode table. ! 4: * i386. ! 5: */ ! 6: ! 7: #ifdef vax ! 8: #include "INC$LIB:cc2.h" ! 9: #else ! 10: #include "cc2.h" ! 11: #endif ! 12: ! 13: /* ! 14: * Opcode table. ! 15: * Indexed by opcode number, as defined in header file h/i8086/opcode.h. ! 16: * Contains the number of address expressions, ! 17: * the opcode and the basic format (style) of each instruction. ! 18: * This table is parallel to the table in cc3/i8086/icode.c ! 19: * and to the definitions of machine ops in h/i8086/opcode.h; ! 20: * modifications must be made in parallel. ! 21: */ ! 22: OPINFO opinfo[] = { ! 23: /* mnemonic op_naddr op_flag op_opcode op_style */ ! 24: /* adc */ 2, 0, 0x11, OF_DOPS, ! 25: /* add */ 2, 0, 0x01, OF_DOPS, ! 26: /* addb */ 2, OP_BYTE, 0x00, OF_DOP, ! 27: /* addw */ 2, OP_WORD, 0x01, OF_DOPS, ! 28: /* and */ 2, 0, 0x21, OF_DOPS, ! 29: /* andb */ 2, OP_BYTE, 0x20, OF_DOP, ! 30: /* andw */ 2, OP_WORD, 0x21, OF_DOPS, ! 31: /* call */ 1, OP_NPTR, 0xE8, OF_CALL, ! 32: /* cbw */ 0, OP_WORD, 0x98, OF_INH, ! 33: /* cdq */ 0, 0, 0x99, OF_INH, ! 34: /* clc */ 0, 0, 0xF8, OF_INH, ! 35: /* cld */ 0, 0, 0xFC, OF_INH, ! 36: /* cli */ 0, 0, 0xFA, OF_INH, ! 37: /* cmc */ 0, 0, 0xF5, OF_INH, ! 38: /* cmp */ 2, 0, 0x39, OF_DOPS, ! 39: /* cmpb */ 2, OP_BYTE, 0x38, OF_DOP, ! 40: /* cmpw */ 2, OP_WORD, 0x39, OF_DOPS, ! 41: /* cmpsw */ 0, 0, 0xA7, OF_INH, ! 42: /* cmpsb */ 0, 0, 0xA6, OF_INH, ! 43: /* cmpsw */ 0, OP_WORD, 0xA7, OF_INH, ! 44: /* cwd */ 0, OP_WORD, 0x99, OF_INH, ! 45: /* cwde */ 0, 0, 0x98, OF_INH, ! 46: /* dec */ 1, 0, 0x09, OF_SOP, ! 47: /* decb */ 1, OP_BYTE, 0x08, OF_SOP, ! 48: /* decw */ 1, OP_WORD, 0x09, OF_SOP, ! 49: /* div */ 1, 0, 0x31, OF_MUL, ! 50: /* divb */ 1, OP_BYTE, 0x30, OF_MUL, ! 51: /* divw */ 1, OP_WORD, 0x31, OF_MUL, ! 52: /* enter */ 2, 0, 0xC8, OF_INH, ! 53: /* hlt */ 0, 0, 0xF4, OF_INH, ! 54: /* icall */ 1, 0, 0x10, OF_ICALL, ! 55: /* idiv */ 1, 0, 0x39, OF_MUL, ! 56: /* idivb */ 1, OP_BYTE, 0x38, OF_MUL, ! 57: /* idivw */ 1, OP_WORD, 0x39, OF_MUL, ! 58: /* ijmp */ 1, 0, 0x20, OF_ICALL, ! 59: /* imul */ 1, 0, 0x29, OF_MUL, ! 60: /* imulb */ 1, OP_BYTE, 0x28, OF_MUL, ! 61: /* imulw */ 1, OP_WORD, 0x29, OF_MUL, ! 62: /* imul immediate */ 3, 0, 0x69, OF_MUL3, ! 63: /* inc */ 1, 0, 0x01, OF_SOP, ! 64: /* incb */ 1, OP_BYTE, 0x00, OF_SOP, ! 65: /* incw */ 1, OP_WORD, 0x01, OF_SOP, ! 66: /* iret */ 0, 0, 0xCF, OF_INH, ! 67: /* xicall */ 1, OP_DWORD, 0x18, OF_ICALL, ! 68: /* xijmp */ 1, OP_NPTR, 0x28, OF_ICALL, ! 69: /* ja */ 1, OP_JUMP, 0x77, OF_JMP, ! 70: /* jae */ 1, OP_JUMP, 0x73, OF_JMP, ! 71: /* jb */ 1, OP_JUMP, 0x72, OF_JMP, ! 72: /* jbe */ 1, OP_JUMP, 0x76, OF_JMP, ! 73: /* jcxz */ 1, OP_JUMP, 0xE3, OF_REL, ! 74: /* je */ 1, OP_JUMP, 0x74, OF_JMP, ! 75: /* jg */ 1, OP_JUMP, 0x7F, OF_JMP, ! 76: /* jge */ 1, OP_JUMP, 0x7D, OF_JMP, ! 77: /* jl */ 1, OP_JUMP, 0x7C, OF_JMP, ! 78: /* jle */ 1, OP_JUMP, 0x7E, OF_JMP, ! 79: /* jmp */ 1, OP_JUMP, 0xEB, OF_JMP, ! 80: /* jne */ 1, OP_JUMP, 0x75, OF_JMP, ! 81: /* jno */ 1, OP_JUMP, 0x71, OF_JMP, ! 82: /* jns */ 1, OP_JUMP, 0x79, OF_JMP, ! 83: /* jo */ 1, OP_JUMP, 0x70, OF_JMP, ! 84: /* jpe */ 1, OP_JUMP, 0x7A, OF_JMP, ! 85: /* jpo */ 1, OP_JUMP, 0x7B, OF_JMP, ! 86: /* js */ 1, OP_JUMP, 0x78, OF_JMP, ! 87: /* lea */ 2, 0, 0x8D, OF_LEA, ! 88: /* leave */ 0, 0, 0xC9, OF_INH, ! 89: /* lock */ 0, 0, 0xF0, OF_INH, ! 90: /* lodsw */ 0, 0, 0xAD, OF_INH, ! 91: /* lodsb */ 0, 0, 0xAC, OF_INH, ! 92: /* loop */ 1, OP_JUMP, 0xE2, OF_REL, ! 93: /* loope */ 1, OP_JUMP, 0xE1, OF_REL, ! 94: /* loopne */ 1, OP_JUMP, 0xE0, OF_REL, ! 95: /* mov */ 2, 0, 0x89, OF_MOV, ! 96: /* movb */ 2, OP_BYTE, 0x88, OF_MOV, ! 97: /* movw */ 2, OP_WORD, 0x89, OF_MOV, ! 98: /* movsw */ 0, 0, 0xA5, OF_INH, ! 99: /* movsb */ 0, 0, 0xA4, OF_INH, ! 100: /* movsx */ 2, 0, 0xBF, OF_2B, ! 101: /* movsxb */ 2, OP_BYTE, 0xBE, OF_2B, ! 102: /* movzx */ 2, 0, 0xB7, OF_2B, ! 103: /* movzxb */ 2, OP_BYTE, 0xB6, OF_2B, ! 104: /* mul */ 1, 0, 0x21, OF_MUL, ! 105: /* mulb */ 1, OP_BYTE, 0x20, OF_MUL, ! 106: /* mulw */ 1, OP_WORD, 0x21, OF_MUL, ! 107: /* neg */ 1, 0, 0x19, OF_SOP, ! 108: /* negb */ 1, OP_BYTE, 0x18, OF_SOP, ! 109: /* negw */ 1, OP_WORD, 0x19, OF_SOP, ! 110: /* not */ 1, 0, 0x11, OF_SOP, ! 111: /* notb */ 1, OP_BYTE, 0x10, OF_SOP, ! 112: /* notw */ 1, OP_WORD, 0x11, OF_SOP, ! 113: /* ret */ 1, OP_NPTR, 0xC2, OF_NRET, ! 114: /* ret */ 1, OP_NPTR, 0xCB, OF_NRET, ! 115: /* or */ 2, 0, 0x09, OF_DOPS, ! 116: /* orb */ 2, OP_BYTE, 0x08, OF_DOP, ! 117: /* orw */ 2, OP_WORD, 0x09, OF_DOPS, ! 118: /* pop */ 1, 0, 0x8F, OF_POP, ! 119: /* popf */ 0, 0, 0x9D, OF_INH, ! 120: /* push */ 1, 0, 0xFF, OF_PUSH, ! 121: /* pushf */ 0, 0, 0x9C, OF_INH, ! 122: /* rcl */ 2, 0, 0x11, OF_SHR, ! 123: /* rclb */ 2, OP_BYTE, 0x10, OF_SHR, ! 124: /* rcr */ 2, 0, 0x19, OF_SHR, ! 125: /* rcrb */ 2, OP_BYTE, 0x18, OF_SHR, ! 126: /* repe */ 0, 0, 0xF3, OF_INH, ! 127: /* repne */ 0, 0, 0xF2, OF_INH, ! 128: /* ret */ 0, 0, 0xC3, OF_INH, ! 129: /* rol */ 2, 0, 0x01, OF_SHR, ! 130: /* rolb */ 2, OP_BYTE, 0x00, OF_SHR, ! 131: /* ror */ 2, 0, 0x09, OF_SHR, ! 132: /* rorb */ 2, OP_BYTE, 0x08, OF_SHR, ! 133: /* sal */ 2, 0, 0x21, OF_SHR, ! 134: /* salb */ 2, OP_BYTE, 0x20, OF_SHR, ! 135: /* salw */ 2, OP_WORD, 0x21, OF_SHR, ! 136: /* sar */ 2, 0, 0x39, OF_SHR, ! 137: /* sarb */ 2, OP_BYTE, 0x38, OF_SHR, ! 138: /* sarw */ 2, OP_WORD, 0x39, OF_SHR, ! 139: /* sbb */ 2, 0, 0x19, OF_DOPS, ! 140: /* scasw */ 0, 0, 0xAF, OF_INH, ! 141: /* scasb */ 0, 0, 0xAE, OF_INH, ! 142: /* shl */ 2, 0, 0x21, OF_SHR, ! 143: /* shlb */ 2, OP_BYTE, 0x20, OF_SHR, ! 144: /* shlw */ 2, OP_WORD, 0x21, OF_SHR, ! 145: /* shr */ 2, 0, 0x29, OF_SHR, ! 146: /* shrb */ 2, OP_BYTE, 0x28, OF_SHR, ! 147: /* shrw */ 2, OP_WORD, 0x29, OF_SHR, ! 148: /* stc */ 0, 0, 0xF9, OF_INH, ! 149: /* std */ 0, 0, 0xFD, OF_INH, ! 150: /* sti */ 0, 0, 0xFB, OF_INH, ! 151: /* stosw */ 0, 0, 0xAB, OF_INH, ! 152: /* stosb */ 0, 0, 0xAA, OF_INH, ! 153: /* sub */ 2, 0, 0x29, OF_DOPS, ! 154: /* subb */ 2, OP_BYTE, 0x28, OF_DOP, ! 155: /* subw */ 2, OP_WORD, 0x29, OF_DOPS, ! 156: /* test */ 2, 0, 0x85, OF_DOP, ! 157: /* testb */ 2, OP_BYTE, 0x84, OF_DOP, ! 158: /* testw */ 2, OP_WORD, 0x85, OF_DOP, ! 159: /* wait */ 0, 0, 0x9B, OF_INH, ! 160: /* xcall */ 1, OP_NPTR, 0x9A, OF_XCALL, ! 161: /* xchg */ 2, 0, 0x87, OF_DOP, ! 162: /* xchgb */ 2, OP_BYTE, 0x86, OF_DOP, ! 163: /* xjmp */ 1, OP_NPTR, 0xEA, OF_XCALL, ! 164: /* xor */ 2, 0, 0x31, OF_DOPS, ! 165: /* xorb */ 2, OP_BYTE, 0x30, OF_DOP, ! 166: /* xorw */ 2, OP_WORD, 0x31, OF_DOPS, ! 167: /* xret */ 0, 0, 0xCB, OF_INH, ! 168: ! 169: /* Specials. */ ! 170: /* .byte */ 1, OP_DD|OP_NPTR, 0x00, OF_BYTE, ! 171: /* .word */ 1, OP_DD|OP_NPTR, 0x00, OF_WORD, ! 172: /* .long */ 1, OP_DD|OP_NPTR, 0x00, OF_LONG, ! 173: /* .long */ 1, OP_DD|OP_NPTR, 0x00, OF_LPTR, ! 174: /* .long */ 1, OP_DD|OP_NPTR, 0x00, OF_GPTR, ! 175: ! 176: /* Old, now unused, retained for no good reason. */ ! 177: #if 0 ! 178: /* aaa */ 0, 0, 0x37, OF_INH, ! 179: /* aad */ 0, 0, 0xD5, OF_INH2, ! 180: /* aam */ 0, 0, 0xD4, OF_INH2, ! 181: /* aas */ 0, 0, 0x3F, OF_INH, ! 182: /* adcb */ 2, OP_BYTE, 0x10, OF_DOP, ! 183: /* daa */ 0, 0, 0x27, OF_INH, ! 184: /* das */ 0, 0, 0x2F, OF_INH, ! 185: /* in */ 1, 0, 0xE5, OF_IN, ! 186: /* inb */ 1, OP_BYTE, 0xE4, OF_IN, ! 187: /* int */ 1, OP_NPTR, 0xCD, OF_INT, ! 188: /* into */ 0, 0, 0xCE, OF_INH, ! 189: /* lahf */ 0, 0, 0x9F, OF_INH, ! 190: /* lds */ 2, OP_DWORD, 0xC5, OF_LEA, ! 191: /* les */ 2, OP_DWORD, 0xC4, OF_LEA, ! 192: /* out */ 1, 0, 0xE7, OF_OUT, ! 193: /* outb */ 1, OP_BYTE, 0xE6, OF_OUT, ! 194: /* sahf */ 0, 0, 0x9E, OF_INH, ! 195: /* sbbb */ 2, OP_BYTE, 0x18, OF_DOP, ! 196: /* xlat */ 0, 0, 0xD7, OF_INH, ! 197: #endif ! 198: ! 199: #if 1 ! 200: /* faddd */ 1, 0, 0x04, OF_FRM, ! 201: /* faddf */ 1, 0, 0x00, OF_FRM, ! 202: /* faddl */ 1, 0, 0x02, OF_FRM, ! 203: /* faddi */ 1, 0, 0x06, OF_FRM, ! 204: /* fsubd */ 1, 0, 0x24, OF_FRM, ! 205: /* fsubf */ 1, 0, 0x20, OF_FRM, ! 206: /* fsubl */ 1, 0, 0x22, OF_FRM, ! 207: /* fsubi */ 1, 0, 0x26, OF_FRM, ! 208: /* frsubd */ 1, 0, 0x2C, OF_FRM, ! 209: /* frsubf */ 1, 0, 0x28, OF_FRM, ! 210: /* frsubl */ 1, 0, 0x2A, OF_FRM, ! 211: /* frsubi */ 1, 0, 0x2E, OF_FRM, ! 212: /* fcompp */ 0, 0, 0xD9, OF_FDE, ! 213: /* fcompd */ 1, 0, 0x1C, OF_FRM, ! 214: /* fcompf */ 1, 0, 0x18, OF_FRM, ! 215: /* fcompl */ 1, 0, 0x1A, OF_FRM, ! 216: /* fcompi */ 1, 0, 0x1E, OF_FRM, ! 217: /* fmuld */ 1, 0, 0x0C, OF_FRM, ! 218: /* fmulf */ 1, 0, 0x08, OF_FRM, ! 219: /* fmull */ 1, 0, 0x0A, OF_FRM, ! 220: /* fmuli */ 1, 0, 0x0E, OF_FRM, ! 221: /* fdivd */ 1, 0, 0x34, OF_FRM, ! 222: /* fdivf */ 1, 0, 0x30, OF_FRM, ! 223: /* fdivl */ 1, 0, 0x32, OF_FRM, ! 224: /* fdivi */ 1, 0, 0x36, OF_FRM, ! 225: /* frdivd */ 1, 0, 0x3C, OF_FRM, ! 226: /* frdivf */ 1, 0, 0x38, OF_FRM, ! 227: /* frdivl */ 1, 0, 0x3A, OF_FRM, ! 228: /* frdivi */ 1, 0, 0x3E, OF_FRM, ! 229: /* fchs */ 0, 0, 0xE0, OF_FD9, ! 230: /* ftst */ 0, 0, 0xE4, OF_FD9, ! 231: /* fldz */ 0, 0, 0xEE, OF_FD9, ! 232: /* fld1 */ 0, 0, 0xE8, OF_FD9, ! 233: /* fstsw */ 1, 0, 0x3D, OF_FRM, ! 234: /* fldd */ 1, 0, 0x05, OF_FRM, ! 235: /* fldf */ 1, 0, 0x01, OF_FRM, ! 236: /* fldl */ 1, 0, 0x03, OF_FRM, ! 237: /* fldi */ 1, 0, 0x07, OF_FRM, ! 238: /* fldt */ 1, 0, 0x2B, OF_FRM, ! 239: /* fstd */ 1, 0, 0x15, OF_FRM, ! 240: /* fstf */ 1, 0, 0x11, OF_FRM, ! 241: /* fstl */ 1, 0, 0x13, OF_FRM, ! 242: /* fsti */ 1, 0, 0x17, OF_FRM, ! 243: /* fstpd */ 1, 0, 0x1D, OF_FRM, ! 244: /* fstpf */ 1, 0, 0x19, OF_FRM, ! 245: /* fstpl */ 1, 0, 0x1B, OF_FRM, ! 246: /* fstpi */ 1, 0, 0x1F, OF_FRM, ! 247: /* fstpt */ 1, 0, 0x3B, OF_FRM, ! 248: /* fwait */ 0, 0, 0x9B, OF_FWAIT, ! 249: /* fdrop */ 0, 0, 0xD8, OF_FDD, ! 250: ! 251: /* Unused, retained for no good reason. */ ! 252: #if 0 ! 253: /* fadd */ 0, 0, 0xC1, OF_FDE, ! 254: /* fsub */ 0, 0, 0xE1, OF_FDE, ! 255: /* frsub */ 0, 0, 0xE9, OF_FDE, ! 256: /* fmul */ 0, 0, 0xC9, OF_FDE, ! 257: /* fdiv */ 0, 0, 0xF1, OF_FDE, ! 258: /* frdiv */ 0, 0, 0xF9, OF_FDE, ! 259: #endif ! 260: #endif ! 261: }; ! 262: ! 263: /* end of n2/i386/optab.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.