File:  [MW Coherent from dump] / coherent / b / bin / c / n2 / i386 / optab.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed May 29 04:56:37 2019 UTC (7 years, 2 months ago) by root
Branches: MarkWilliams, MAIN
CVS tags: relic, HEAD
coherent

/*
 * n2/i386/optab.c
 * Opcode table.
 * i386.
 */

#ifdef   vax
#include	"INC$LIB:cc2.h"
#else
#include	"cc2.h"
#endif

/*
 * Opcode table.
 * Indexed by opcode number, as defined in header file h/i8086/opcode.h.
 * Contains the number of address expressions,
 * the opcode and the basic format (style) of each instruction.
 * This table is parallel to the table in cc3/i8086/icode.c
 * and to the definitions of machine ops in h/i8086/opcode.h;
 * modifications must be made in parallel.
 */
OPINFO	opinfo[]		= {
	/* mnemonic	     op_naddr	op_flag      op_opcode	op_style */
	/* adc	  */		2,	0,		0x11,	OF_DOPS,
	/* add	  */		2,	0,		0x01,	OF_DOPS,
	/* addb	  */		2,	OP_BYTE,	0x00,	OF_DOP,
	/* addw	  */		2,	OP_WORD,	0x01,	OF_DOPS,
	/* and	  */		2,	0,		0x21,	OF_DOPS,
	/* andb	  */		2,	OP_BYTE,	0x20,	OF_DOP,
	/* andw	  */		2,	OP_WORD,	0x21,	OF_DOPS,
	/* call	  */		1,	OP_NPTR,	0xE8,	OF_CALL,
	/* cbw	  */		0,	OP_WORD,	0x98,	OF_INH,
	/* cdq	  */		0,	0,		0x99,	OF_INH,
	/* clc	  */		0,	0,		0xF8,	OF_INH,
	/* cld	  */		0,	0,		0xFC,	OF_INH,
	/* cli	  */		0,	0,		0xFA,	OF_INH,
	/* cmc	  */		0,	0,		0xF5,	OF_INH,
	/* cmp	  */		2,	0,		0x39,	OF_DOPS,
	/* cmpb	  */		2,	OP_BYTE,	0x38,	OF_DOP,
	/* cmpw	  */		2,	OP_WORD,	0x39,	OF_DOPS,
	/* cmpsw  */		0,	0,		0xA7,	OF_INH,
	/* cmpsb  */		0,	0,		0xA6,	OF_INH,
	/* cmpsw  */		0,	OP_WORD,	0xA7,	OF_INH,
	/* cwd	  */		0,	OP_WORD,	0x99,	OF_INH,
	/* cwde	  */		0,	0,		0x98,	OF_INH,
	/* dec	  */		1,	0,		0x09,	OF_SOP,
	/* decb	  */		1,	OP_BYTE,	0x08,	OF_SOP,
	/* decw	  */		1,	OP_WORD,	0x09,	OF_SOP,
	/* div	  */		1,	0,		0x31,	OF_MUL,
	/* divb	  */		1,	OP_BYTE,	0x30,	OF_MUL,
	/* divw	  */		1,	OP_WORD,	0x31,	OF_MUL,
 	/* enter  */		2,	0,		0xC8,	OF_INH,
	/* hlt	  */		0,	0,		0xF4,	OF_INH,
	/* icall  */		1,	0,		0x10,	OF_ICALL,
	/* idiv	  */		1,	0,		0x39,	OF_MUL,
	/* idivb  */		1,	OP_BYTE,	0x38,	OF_MUL,
	/* idivw  */		1,	OP_WORD,	0x39,	OF_MUL,
	/* ijmp	  */		1,	0,		0x20,	OF_ICALL,
	/* imul	  */		1,	0,		0x29,	OF_MUL,
	/* imulb  */		1,	OP_BYTE,	0x28,	OF_MUL,
	/* imulw  */		1,	OP_WORD,	0x29,	OF_MUL,
 	/* imul immediate */	3,	0,		0x69,	OF_MUL3,
	/* inc	  */		1,	0,		0x01,	OF_SOP,
	/* incb	  */		1,	OP_BYTE,	0x00,	OF_SOP,
	/* incw	  */		1,	OP_WORD,	0x01,	OF_SOP,
	/* iret	  */		0,	0,		0xCF,	OF_INH,
	/* xicall */		1,	OP_DWORD,	0x18,	OF_ICALL,
	/* xijmp  */		1,	OP_NPTR,	0x28,	OF_ICALL,
	/* ja	  */		1,	OP_JUMP,	0x77,	OF_JMP,
	/* jae	  */		1,	OP_JUMP,	0x73,	OF_JMP,
	/* jb	  */		1,	OP_JUMP,	0x72,	OF_JMP,
	/* jbe	  */		1,	OP_JUMP,	0x76,	OF_JMP,
	/* jcxz	  */		1,	OP_JUMP,	0xE3,	OF_REL,
	/* je	  */		1,	OP_JUMP,	0x74,	OF_JMP,
	/* jg	  */		1,	OP_JUMP,	0x7F,	OF_JMP,
	/* jge	  */		1,	OP_JUMP,	0x7D,	OF_JMP,
	/* jl	  */		1,	OP_JUMP,	0x7C,	OF_JMP,
	/* jle	  */		1,	OP_JUMP,	0x7E,	OF_JMP,
	/* jmp	  */		1,	OP_JUMP,	0xEB,	OF_JMP,
	/* jne	  */		1,	OP_JUMP,	0x75,	OF_JMP,
	/* jno	  */		1,	OP_JUMP,	0x71,	OF_JMP,
	/* jns	  */		1,	OP_JUMP,	0x79,	OF_JMP,
	/* jo	  */		1,	OP_JUMP,	0x70,	OF_JMP,
	/* jpe	  */		1,	OP_JUMP,	0x7A,	OF_JMP,
	/* jpo	  */		1,	OP_JUMP,	0x7B,	OF_JMP,
	/* js	  */		1,	OP_JUMP,	0x78,	OF_JMP,
	/* lea	  */		2,	0,		0x8D,	OF_LEA,
 	/* leave  */		0,	0,		0xC9,	OF_INH,
	/* lock	  */		0,	0,		0xF0,	OF_INH,
	/* lodsw  */		0,	0,		0xAD,	OF_INH,
	/* lodsb  */		0,	0,		0xAC,	OF_INH,
	/* loop	  */		1,	OP_JUMP,	0xE2,	OF_REL,
	/* loope  */		1,	OP_JUMP,	0xE1,	OF_REL,
	/* loopne */		1,	OP_JUMP,	0xE0,	OF_REL,
	/* mov	  */		2,	0,		0x89,	OF_MOV,
	/* movb	  */		2,	OP_BYTE,	0x88,	OF_MOV,
	/* movw	  */		2,	OP_WORD,	0x89,	OF_MOV,
	/* movsw  */		0,	0,		0xA5,	OF_INH,
	/* movsb  */		0,	0,		0xA4,	OF_INH,
	/* movsx  */		2,	0,		0xBF,	OF_2B,
	/* movsxb */		2,	OP_BYTE,	0xBE,	OF_2B,
	/* movzx  */		2,	0,		0xB7,	OF_2B,
	/* movzxb */		2,	OP_BYTE,	0xB6,	OF_2B,
	/* mul	  */		1,	0,		0x21,	OF_MUL,
	/* mulb	  */		1,	OP_BYTE,	0x20,	OF_MUL,
	/* mulw	  */		1,	OP_WORD,	0x21,	OF_MUL,
	/* neg	  */		1,	0,		0x19,	OF_SOP,
	/* negb	  */		1,	OP_BYTE,	0x18,	OF_SOP,
	/* negw	  */		1,	OP_WORD,	0x19,	OF_SOP,
	/* not	  */		1,	0,		0x11,	OF_SOP,
	/* notb	  */		1,	OP_BYTE,	0x10,	OF_SOP,
	/* notw	  */		1,	OP_WORD,	0x11,	OF_SOP,
	/* ret	  */		1,	OP_NPTR,	0xC2,	OF_NRET,
	/* ret	  */		1,	OP_NPTR,	0xCB,	OF_NRET,
	/* or	  */		2,	0,		0x09,	OF_DOPS,
	/* orb	  */		2,	OP_BYTE,	0x08,	OF_DOP,
	/* orw	  */		2,	OP_WORD,	0x09,	OF_DOPS,
	/* pop	  */		1,	0,		0x8F,	OF_POP,
	/* popf	  */		0,	0,		0x9D,	OF_INH,
	/* push	  */		1,	0,		0xFF,	OF_PUSH,
	/* pushf  */		0,	0,		0x9C,	OF_INH,
	/* rcl	  */		2,	0,		0x11,	OF_SHR,
	/* rclb	  */		2,	OP_BYTE,	0x10,	OF_SHR,
	/* rcr	  */		2,	0,		0x19,	OF_SHR,
	/* rcrb	  */		2,	OP_BYTE,	0x18,	OF_SHR,
	/* repe	  */		0,	0,		0xF3,	OF_INH,
	/* repne  */		0,	0,		0xF2,	OF_INH,
	/* ret	  */		0,	0,		0xC3,	OF_INH,
	/* rol	  */		2,	0,		0x01,	OF_SHR,
	/* rolb	  */		2,	OP_BYTE,	0x00,	OF_SHR,
	/* ror	  */		2,	0,		0x09,	OF_SHR,
	/* rorb	  */		2,	OP_BYTE,	0x08,	OF_SHR,
	/* sal	  */		2,	0,		0x21,	OF_SHR,
	/* salb	  */		2,	OP_BYTE,	0x20,	OF_SHR,
	/* salw	  */		2,	OP_WORD,	0x21,	OF_SHR,
	/* sar	  */		2,	0,		0x39,	OF_SHR,
	/* sarb	  */		2,	OP_BYTE,	0x38,	OF_SHR,
	/* sarw	  */		2,	OP_WORD,	0x39,	OF_SHR,
	/* sbb	  */		2,	0,		0x19,	OF_DOPS,
	/* scasw  */		0,	0,		0xAF,	OF_INH,
	/* scasb  */		0,	0,		0xAE,	OF_INH,
	/* shl	  */		2,	0,		0x21,	OF_SHR,
	/* shlb	  */		2,	OP_BYTE,	0x20,	OF_SHR,
	/* shlw	  */		2,	OP_WORD,	0x21,	OF_SHR,
	/* shr	  */		2,	0,		0x29,	OF_SHR,
	/* shrb	  */		2,	OP_BYTE,	0x28,	OF_SHR,
	/* shrw	  */		2,	OP_WORD,	0x29,	OF_SHR,
	/* stc	  */		0,	0,		0xF9,	OF_INH,
	/* std	  */		0,	0,		0xFD,	OF_INH,
	/* sti	  */		0,	0,		0xFB,	OF_INH,
	/* stosw  */		0,	0,		0xAB,	OF_INH,
	/* stosb  */		0,	0,		0xAA,	OF_INH,
	/* sub	  */		2,	0,		0x29,	OF_DOPS,
	/* subb	  */		2,	OP_BYTE,	0x28,	OF_DOP,
	/* subw	  */		2,	OP_WORD,	0x29,	OF_DOPS,
	/* test	  */		2,	0,		0x85,	OF_DOP,
	/* testb  */		2,	OP_BYTE,	0x84,	OF_DOP,
	/* testw  */		2,	OP_WORD,	0x85,	OF_DOP,
	/* wait	  */		0,	0,		0x9B,	OF_INH,
	/* xcall  */		1,	OP_NPTR,	0x9A,	OF_XCALL,
	/* xchg	  */		2,	0,		0x87,	OF_DOP,
	/* xchgb  */		2,	OP_BYTE,	0x86,	OF_DOP,
	/* xjmp	  */		1,	OP_NPTR,	0xEA,	OF_XCALL,
	/* xor	  */		2,	0,		0x31,	OF_DOPS,
	/* xorb	  */		2,	OP_BYTE,	0x30,	OF_DOP,
	/* xorw	  */		2,	OP_WORD,	0x31,	OF_DOPS,
	/* xret	  */		0,	0,		0xCB,	OF_INH,

/* Specials. */
	/* .byte  */		1,	OP_DD|OP_NPTR,	0x00,	OF_BYTE,
	/* .word  */		1,	OP_DD|OP_NPTR,	0x00,	OF_WORD,
	/* .long  */		1,	OP_DD|OP_NPTR,	0x00,	OF_LONG,
	/* .long  */		1,	OP_DD|OP_NPTR,	0x00,	OF_LPTR,
	/* .long  */		1,	OP_DD|OP_NPTR,	0x00,	OF_GPTR,

/* Old, now unused, retained for no good reason. */
#if	0
	/* aaa	  */		0,	0,		0x37,	OF_INH,
	/* aad	  */		0,	0,		0xD5,	OF_INH2,
	/* aam	  */		0,	0,		0xD4,	OF_INH2,
	/* aas	  */		0,	0,		0x3F,	OF_INH,
	/* adcb	  */		2,	OP_BYTE,	0x10,	OF_DOP,
	/* daa	  */		0,	0,		0x27,	OF_INH,
	/* das	  */		0,	0,		0x2F,	OF_INH,
	/* in	  */		1,	0,		0xE5,	OF_IN,
	/* inb	  */		1,	OP_BYTE,	0xE4,	OF_IN,
	/* int	  */		1,	OP_NPTR,	0xCD,	OF_INT,
	/* into	  */		0,	0,		0xCE,	OF_INH,
	/* lahf	  */		0,	0,		0x9F,	OF_INH,
	/* lds	  */		2,	OP_DWORD,	0xC5,	OF_LEA,
	/* les	  */		2,	OP_DWORD,	0xC4,	OF_LEA,
	/* out	  */		1,	0,		0xE7,	OF_OUT,
	/* outb	  */		1,	OP_BYTE,	0xE6,	OF_OUT,
	/* sahf	  */		0,	0,		0x9E,	OF_INH,
	/* sbbb	  */		2,	OP_BYTE,	0x18,	OF_DOP,
	/* xlat	  */		0,	0,		0xD7,	OF_INH,
#endif

#if	1
	/* faddd  */		1,	0,		0x04,	OF_FRM,
	/* faddf  */		1,	0,		0x00,	OF_FRM,
	/* faddl  */		1,	0,		0x02,	OF_FRM,
	/* faddi  */		1,	0,		0x06,	OF_FRM,
	/* fsubd  */		1,	0,		0x24,	OF_FRM,
	/* fsubf  */		1,	0,		0x20,	OF_FRM,
	/* fsubl  */		1,	0,		0x22,	OF_FRM,
	/* fsubi  */		1,	0,		0x26,	OF_FRM,
	/* frsubd */		1,	0,		0x2C,	OF_FRM,
	/* frsubf */		1,	0,		0x28,	OF_FRM,
	/* frsubl */		1,	0,		0x2A,	OF_FRM,
	/* frsubi */		1,	0,		0x2E,	OF_FRM,
	/* fcompp */		0,	0,		0xD9,	OF_FDE,
	/* fcompd */		1,	0,		0x1C,	OF_FRM,
	/* fcompf */		1,	0,		0x18,	OF_FRM,
	/* fcompl */		1,	0,		0x1A,	OF_FRM,
	/* fcompi */		1,	0,		0x1E,	OF_FRM,
	/* fmuld  */		1,	0,		0x0C,	OF_FRM,
	/* fmulf  */		1,	0,		0x08,	OF_FRM,
	/* fmull  */		1,	0,		0x0A,	OF_FRM,
	/* fmuli  */		1,	0,		0x0E,	OF_FRM,
	/* fdivd  */		1,	0,		0x34,	OF_FRM,
	/* fdivf  */		1,	0,		0x30,	OF_FRM,
	/* fdivl  */		1,	0,		0x32,	OF_FRM,
	/* fdivi  */		1,	0,		0x36,	OF_FRM,
	/* frdivd */		1,	0,		0x3C,	OF_FRM,
	/* frdivf */		1,	0,		0x38,	OF_FRM,
	/* frdivl */		1,	0,		0x3A,	OF_FRM,
	/* frdivi */		1,	0,		0x3E,	OF_FRM,
	/* fchs	  */		0,	0,		0xE0,	OF_FD9,
	/* ftst	  */		0,	0,		0xE4,	OF_FD9,
	/* fldz	  */		0,	0,		0xEE,	OF_FD9,
	/* fld1	  */		0,	0,		0xE8,	OF_FD9,
	/* fstsw  */		1,	0,		0x3D,	OF_FRM,
	/* fldd	  */		1,	0,		0x05,	OF_FRM,
	/* fldf	  */		1,	0,		0x01,	OF_FRM,
	/* fldl	  */		1,	0,		0x03,	OF_FRM,
	/* fldi	  */		1,	0,		0x07,	OF_FRM,
	/* fldt	  */		1,	0,		0x2B,	OF_FRM,
	/* fstd	  */		1,	0,		0x15,	OF_FRM,
	/* fstf	  */		1,	0,		0x11,	OF_FRM,
	/* fstl	  */		1,	0,		0x13,	OF_FRM,
	/* fsti	  */		1,	0,		0x17,	OF_FRM,
	/* fstpd  */		1,	0,		0x1D,	OF_FRM,
	/* fstpf  */		1,	0,		0x19,	OF_FRM,
	/* fstpl  */		1,	0,		0x1B,	OF_FRM,
	/* fstpi  */		1,	0,		0x1F,	OF_FRM,
	/* fstpt  */		1,	0,		0x3B,	OF_FRM,
	/* fwait  */		0,	0,		0x9B,	OF_FWAIT,
	/* fdrop  */		0,	0,		0xD8,	OF_FDD,

/* Unused, retained for no good reason. */
#if	0
	/* fadd	  */		0,	0,		0xC1,	OF_FDE,
	/* fsub	  */		0,	0,		0xE1,	OF_FDE,
	/* frsub  */		0,	0,		0xE9,	OF_FDE,
	/* fmul	  */		0,	0,		0xC9,	OF_FDE,
	/* fdiv	  */		0,	0,		0xF1,	OF_FDE,
	/* frdiv  */		0,	0,		0xF9,	OF_FDE,
#endif
#endif
};

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