Annotation of coherent/b/bin/c/n2/i386/optab.c, revision 1.1

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 */

unix.superglobalmegacorp.com

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