www.pudn.com > ASM86_64.rar > opcode.c


 
 
#include "opcode.h" 
 
 
i_set_t i_transfer[] = { 
 
	{ "jmp", JMP }, 
	{ "call", CALL }, 
 
	{ "jo", JO }, 
 
	{ "jno", JNO }, 
 
	{ "jb", JB }, 
	{ "jc", JB }, 
	{ "jnae", JB }, 
 
	{ "jnb", JNB }, 
	{ "jnc", JNB }, 
	{ "jae", JNB }, 
 
	{ "jz", JZ }, 
	{ "je", JZ }, 
 
	{ "jnz", JNZ }, 
	{ "jne", JNZ }, 
 
	{ "jbe", JBE }, 
	{ "jna", JBE }, 
 
	{ "jnbe", JNBE }, 
	{ "ja", JNBE }, 
 
	{ "js", JS }, 
 
	{ "jns", JNS }, 
 
	{ "jp", JP }, 
	{ "jpe", JP }, 
 
	{ "jnp", JNP }, 
	{ "jpo", JNP }, 
 
	{ "jl", JL }, 
	{ "jnge", JL }, 
 
	{ "jnl", JNL }, 
	{ "jge", JNL }, 
 
	{ "jle", JLE }, 
	{ "jng", JLE }, 
 
	{ "jnle", JNLE }, 
	{ "jg", JNLE }, 
 
	{ "jcxz", JCXZ }, 
	{ "jecxz", JECXZ }, 
	{ "jrcxz", JRCXZ }, 
 
	{ "loopnz", LOOPNZ }, 
	{ "loopne", LOOPNZ }, 
 
	{ "loopz", LOOPZ }, 
	{ "loope", LOOPZ }, 
 
	{ "loop", LOOP }, 
 
	{ 0, 0 } 
}; 
 
 
/***** x86-64 instruction set ********/ 
 
 
i_key_t ADD[] = { 
	{ 0, MEM|MOFFSET|GPR|ALL_REGS|SIZE8,  
	   	GPR|ALL_REGS|SIZE8, I_GPI|FS_8, 0x00  }, /* ADD Eb, Gb */  
 
	{ 0, MEM|MOFFSET|GPR|ALL_REGS|SIZE_V,  
		GPR|ALL_REGS|SIZE_V, I_GPI, 0x01 },	/* ADD Ev, Gv */ 
	 
	/* ADD Gb, Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x02 }, 
	 
 	/* ADD Gv, Ev */ 
	{ 0, GPR|ALL_REGS|SIZE_V, MEM|MOFFSET|SIZE_V, I_GPI, 0x03}, 
	 
	/* ADD AL, Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x04 }, 
 
	/* ADD rAX, Iz	*/ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x05 }, 
 
	/******* group ********/ 
 
	/* ADD Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(0)|FS_8, 0x80 }, 
 
	/* ADD Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(0), 0x81 }, 
	 
	/* ADD Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(0)|FS_8, 0x82 }, 
 
	/* ADD Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(0), 0x83 }, 
 
	 
	{ 0, 0, 0, 0, 0} 
}; 
 
 
 
 
i_key_t PUSH[] = { 
	/* push es */ 
	{ 0, 0, SREG|rAX|SIZE16,  
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE|NO_CAST, 0x06 },  
 
	 /* PUSH CS */ 
	{ 0, 0, SREG|rCX|SIZE16,  
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x0e },  
 
	 /* PUSH SS */			 
	{ 0, 0, SREG|rDX|SIZE16,  
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x16 }, 
 
	 /* PUSH DS */	 
	{ 0, 0, SREG|rBX|SIZE16,  
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x1e }, 
 
	/* PUSH rAX/r8 */ 
	{ 0, 0, GPR|rAX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x50 }, 
	 
	/* PUSH rCX/r9 */	 
	{ 0, 0, GPR|rCX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x51 },  
 
	/* PUSH rDX/r10 */ 
	{ 0, 0, GPR|rDX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x52 }, 
	 
	/* PUSH rBX/r11 */ 
	{ 0, 0, GPR|rBX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x53 }, 
	 
	/* PUSH rSP/r12 */ 
	{ 0, 0, GPR|rSP|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x54 }, 
	 
	/* PUSH rBP/r13 */ 
	{ 0, 0, GPR|rBP|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x55 }, 
	 
	/* PUSH rSI/r14 */	 
	{ 0, 0, GPR|rSI|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x56 }, 
	 
	/* PUSH rDI/r15 */ 
	{ 0, 0, GPR|rDI|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x57 }, 
	 
	/* PUSH Iz */ 
	{ 0, 0, IMME|0x06, I_GPI|NO_NEED_MODRM, 0x68 }, 
	 
	/* PUSH Ib */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM, 0x6a }, 
 
	/**************** GROUP ****************/ 
	/* PUSH Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(6), 0xff },		 
	 
	/***************** two byte opcode ****************/ 
 
	/* PUSH FS */ 
	{ 0, 0, SREG|rSP|SIZE16,  
		I_GPI|NO_CAST|NO_NEED_MODRM|ONLY_OPCODE, 0x0fa0 },	 
 
	/* PUSH GS */ 
	{ 0, 0, SREG|rBP|SIZE16, 	 
		I_GPI|NO_CAST|NO_NEED_MODRM|ONLY_OPCODE, 0x0fa8 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
 
i_key_t POP[] = { 
	/* POP ES */ 
	{ 0, 0, SREG|rAX|SIZE16,  
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x07 }, 
	 
	/* POP SS */ 
	{ 0, 0, SREG|rDX|SIZE16, 
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x17 }, 
	 
	/* POP DS */ 
	{ 0, 0, SREG|rBX|SIZE16,  
		I_GPI|NO_CAST|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x1f }, 
	 
	/* POP rAX/r8 */ 
	{ 0, 0, GPR|rAX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x58 }, 
	 
	/* POP rCX/r9 */	 
	{ 0, 0, GPR|rCX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x59 }, 
 
	/* POP rDX/r10 */ 
	{ 0, 0, GPR|rDX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5a }, 
	 
	/* POP rBX/r11 */ 
	{ 0, 0, GPR|rBX|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5b }, 
	 
	/* POP rSP/r12 */ 
	{ 0, 0, GPR|rSP|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5c }, 
	 
	/* POP rBP/r13 */	 
	{ 0, 0, GPR|rBP|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5d }, 
	 
	/* POP rSI/r14 */ 
	{ 0, 0, GPR|rSI|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5e }, 
	 
	/* POP rDI/r15 */ 
	{ 0, 0, GPR|rDI|0x0e, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x5f }, 
	 
	/****************** GROUP ***************/ 
 
	/* POP Ev */ 
	{ 0, 0, MEM|MOFFSET|0x0e, I_GPI|GROUP|GROUPID(0), 0x8f }, 
 
 
	/************* two byte opcode ***************/ 
	/* POP FS */ 
	{ 0, 0, SREG|rSP|SIZE16,  
		I_GPI|NO_NEED_MODRM|NO_CAST|ONLY_OPCODE, 0x0fa1 },	 
 
	/* POP GS */ 
	{ 0, 0, SREG|rBP|SIZE16,  
		I_GPI|NO_NEED_MODRM|NO_CAST|ONLY_OPCODE, 0x0fa9 },	 
 
 
	{ 0, 0, 0, 0, 0 } 
	 
}; 
 
 
 
i_key_t OR[] = { 
 
	{ 0, MEM|MOFFSET|GPR|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x08 },			/* OR Eb, Gb */ 
 
	/* OR Ev, Gv */ 
	{ 0, MEM|MOFFSET|GPR|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x09 }, 
	 
	/* OR Gb, Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x0a }, 
 
	/* OR Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x0b }, 
			 
	/* OR AL, Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8,  0x0c }, 
 
	/* OR rAX, Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x0d }, 
 
	/**************** GROUP *****************/ 
 
	/* OR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(1)|FS_8, 0x80 }, 
 
	/* OR Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(1)|FS_IN_BITS, 0x81 }, 
	 
	/* OR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(1)|FS_8, 0x82 }, 
 
	/* OR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(1), 0x83 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t ADC[] = { 
	/* ADC Eb, Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8,  
		I_GPI|FS_8, 0x10 }, 
 
	/* ADC Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x11 }, 
 
	/* ADC Gb, Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x12 }, 
 
	/* ADC Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x13 }, 
 
 
	/* ADC AL, Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x14 }, 
 
	/* ADC rAX, Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x15 }, 
 
 
	/***************** GROUP ************************/ 
	/* ADC Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(2)|FS_8, 0x80 }, 
 
	/* ADC Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(2), 0x81 }, 
 
	/* ADC Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(2)|FS_8, 0x82 }, 
 
	/* ADC Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(2), 0x83 }, 
 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SBB[] = { 
	/* SBB Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x18 }, 
 
	/* SBB Ev,Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x19 }, 
 
	/* SBB Gb,Eb */	 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x1a }, 
 
	/* SBB Gv,Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x1b }, 
 
	/* SBB AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x1c }, 
 
	/* SBB rAX,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x1d }, 
 
 
	/*********************** GROUP *********************/ 
 
	/* SBB Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(3)|FS_8, 0x80 }, 
 
	/* SBB Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(3), 0x81 }, 
 
	/* SBB Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(3)|FS_8, 0x82 }, 
 
	/* SBB Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(3), 0x83 }, 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t AND[] ={ 
	/* AND Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x20 }, 
 
	/* AND Ev,Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x21 }, 
 
	/* AND Gb,Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x22 }, 
 
	/* AND Gv,Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x23 }, 
 
	/* AND AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x24 }, 
 
	/* AND rAX,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x25 }, 
 
 
	/********************* GROUP ****************************/  
	/* AND Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(4)|FS_8, 0x80 }, 
 
	/* AND Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(4), 0x81 }, 
 
	/* AND Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(4)|FS_8, 0x82 }, 
 
	/* AND Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(4), 0x83 }, 
 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t DAA[] = { 
	/* DAA */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x27 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SUB[] = { 
	/* SUB Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x28 }, 
 
	/* SUB Ev,Gv */	 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x29 }, 
 
	/* SUB Gb,Eb */	 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x2a }, 
 
	/* SUB Gv,Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x2b }, 
 
	/* SUB AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x2c }, 
 
	/* SUB rAX,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x2d }, 
 
 
	/******************** GROUP ************************/ 
	 
	/* SUB Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(5)|FS_8, 0x80 }, 
 
	/* SUB Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(5), 0x81 }, 
 
	/* SUB Eb, Ib */	 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(5)|FS_8, 0x82 }, 
 
	/* SUB Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(5), 0x83 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t DAS[] = { 
	/* DAS */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x2f }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t XOR[] = { 
	/* XOR Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x30 }, 
 
	/* XOR Ev,Gv */	 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x31 }, 
 
 
	/* XOR Gb,Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x32 }, 
 
	/* XOR Gv,Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x33 }, 
 
	/* X0R AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x34 }, 
 
	/* XOR rAX,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI|NO_NEED_MODRM, 0x35 }, 
 
	 
	/************************* GROUP ******************************/ 
 
	/* XOR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(6)|FS_8, 0x80 }, 
 
	/* XOR Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(6), 0x81 }, 
 
	/* XOR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(6)|FS_8, 0x82 }, 
 
 
	/* XOR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(6), 0x83 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t AAA[] = { 
	/* AAA */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x37 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t CMP[] = { 
	/* CMP Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x38 }, 
	 
	/* CMP Ev,Gv */	 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x39 }, 
 
	/* CMP Gb,Eb */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x3a }, 
 
	/* CMP Gv,Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x3b }, 
 
	/* CMP AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|FS_8, 0x3c }, 
 
	/* CMP rAX,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0e, I_GPI, 0x3d }, 
 
 
	/************************* GROUP ******************************/ 
 
	/* CMP Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(7)|FS_8, 0x80 }, 
 
	/* CMP Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0e, 
		I_GPI|GROUP|GROUPID(7), 0x81 }, 
 
	/* CMP Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|INVLD_IN_64|GROUP|GROUPID(7)|FS_8, 0x82 }, 
 
	/* CMP Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(7), 0x83 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t AAS[] = { 
 	/* AAS */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x3f }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t INC[] = { 
	/* INC eAX */ 
	{ 0, 0, GPR|rAX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x40 }, 
 
	/* INC eCX */ 
	{ 0, 0, GPR|rCX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x41 }, 
 
	/* INC eDX */ 
	{ 0, 0, GPR|rDX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x42 }, 
 
	/* INC eBX */ 
	{ 0, 0, GPR|rBX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x43 }, 
 
	/* INC eSP */ 
	{ 0, 0, GPR|rSP|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x44 }, 
 
	/* INC eBP */ 
	{ 0, 0, GPR|rBP|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x45 }, 
 
	/* INC eSI */ 
	{ 0, 0, GPR|rSI|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE|FS_32, 0x46 }, 
 
	/* INC eDI */ 
	{ 0, 0, GPR|rDI|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE|FS_32, 0x47 }, 
 
	/******************* GROUP ************************/ 
	/* INC Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(0)|FS_8, 0xfe }, 
 
	/* INC Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e,  
		I_GPI|GROUP|GROUPID(0), 0xff }, 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t DEC[] = { 
	/* DEC eAX */ 
	{ 0, 0, GPR|rAX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x48 }, 
 
	/* DEC eCX */ 
	{ 0, 0, GPR|rCX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x49 }, 
 
	/* DEC eDX */ 
	{ 0, 0, GPR|rDX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4a }, 
 
	/* DEC eBX */ 
	{ 0, 0, GPR|rBX|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4b }, 
 
	/* DEC eSP */	 
	{ 0, 0, GPR|rSP|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4c }, 
 
	/* DEC eBP */ 
	{ 0, 0, GPR|rBP|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4d }, 
 
	/* DEC eSI */ 
	{ 0, 0, GPR|rSI|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4e }, 
 
	/* DEC eDI */ 
	{ 0, 0, GPR|rDI|0x06, 
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x4f }, 
 
	/******************* GROUP *******************/ 
	/* DEC Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(1)|FS_8, 0xfe }, 
 
	/* DEC Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e,  
		I_GPI|GROUP|GROUPID(1), 0xff }, 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t PUSHA[] = { 
	/* PUSHA */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x60 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t PUSHD[] = { 
	/* PUSHD */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x60 }, 
 
	/* PUSHD Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9c }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t POPA[] = { 
	/* POPA */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x61 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t POPD[] = { 
	/* POPD */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x61 }, 
 
	/* POPD Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9d }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t BOUND[] = {		/***** keep it to reserved ******/ 
	/* BOUND Gv,Ma */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI|INVLD_IN_64, 0x62 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t ARPL[] = { 
 	/* ARPL Ew,Gw */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE16, GPR|ALL_REGS|SIZE16, 
		I_GPI|INVLD_IN_64|FS_16, 0x63 }, 
}; 
 
i_key_t MOVSXD[] = {	 
	/* valid only in 64-bit mode */ 
	/* MOVSXD Gv,Ed */ 
	{ 0, GPR|ALL_REGS|0x18, GPR|MEM|MOFFSET|ALL_REGS|SIZE32, 
		I_GPI|ONLY_IN_64, 0x63 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t IMUL[] = { 
	/* IMUL Gv,Ev,Iz */ 
	{ GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		IMME|0x0e, I_GPI, 0x69 }, 
 
	/* IMUL Gv,Ev,Ib */ 
	{ GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		IMME|SIZE8, I_GPI, 0x6b }, 
 
	/********  GROUP   **************/ 
	/* IMUL Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(5)|FS_8, 0xf6 }, 
 
	/* IMUL Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(5), 0xf7 },		 
 
 
	/**************** two byte opcode ***************/ 
	/* IMUL Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0faf }, 
 
 
	{ 0, 0, 0, 0, 0 }	 
};  
 
 
i_key_t INSB[] = { 
	/* INSB Yb,DX */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0x6c }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t INSW[] = { 
	/* INSW Yz,DX */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x6d }, 
 
	{ 0, 0, 0, 0, 0 } 
 
}; 
 
i_key_t INSD[] = { 
	/* INSD Yz,DX */ 
	{ 0, 0, 0, I_GPI|FS_32|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x6d }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t OUTSB[] = { 
	/* OUTSB DX,Xb */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0x6e },  
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t OUTSW[] = { 
	/* OUTSW DX,Xz */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x6f }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t OUTSD[] = { 
 	/* OUTSD DX,Xz */ 
	{ 0, 0, 0, I_GPI|FS_32|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x6f }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t JO[] = { 
	/* JO Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x70 }, 
 
 
	/***************** two byte opcode ****************/ 
 
	/* JO Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f80 },	 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JNO[] = { 
	/* JNO Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x71 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JNO Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f81 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JB[] = { 
	/* JB Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x72 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JB Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f82 },	 
 
	{ 0, 0, 0, 0, 0 } 
 
}; 
 
 
i_key_t JNB[] = { 
	/* JNB Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x73 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JNB Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f83 },	 
 
	{ 0, 0, 0, 0, 0 } 
 
}; 
 
i_key_t JZ[] = { 
	/* JZ Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x74 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JZ Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f84 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JNZ[] = { 
	/* JNZ Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x75 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JNZ Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f85 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JBE[] = { 
	/* JBE Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x76 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JBE Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f86 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JNBE[] = { 
	/* JNBE Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x77 }, 
 
	/***************** two byte opcode ****************/ 
 
	/* JNBE Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f87 },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JS[] = { 
	/* JS Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x78 }, 
 
	/************ two byte opcode **************/ 
	/* JS Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f88 },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t JNS[] = { 
	/* JNS Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x79 }, 
 
	/************ two byte opcode **************/ 
	/* JNS Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f89 },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t JP[] = { 
	/* JP Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7a }, 
 
	/************ two byte opcode **************/ 
	/* JP Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8a },		 
 
	{ 0, 0, 0, 0, 0 } 
 
}; 
 
 
i_key_t JNP[] = { 
	/* JNP Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7b }, 
 
	/************ two byte opcode **************/ 
	/* JNP Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8b },		 
 
	{ 0, 0, 0, 0, 0 } 
 
}; 
 
i_key_t JL[] = { 
	/* JL Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7c }, 
 
	/************ two byte opcode **************/ 
	/* JL Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8c },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JNL[] = { 
	/* JNL Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7d }, 
 
	/************ two byte opcode **************/ 
	/* JNL Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8d },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JLE[] = { 
	/* JLE Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7e }, 
 
	/************ two byte opcode **************/ 
	/* JLE Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8e },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JNLE[] = { 
	/* JNLE Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0x7f }, 
 
	/************ two byte opcode **************/ 
	/* JNLE Jz */ 
	{ 0, 0, IMME|0x0e, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0x0f8f },		 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t TEST[] = { 
	/* TEST Eb, Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x84 }, 
 
	/* TEST Ev, Gv */	 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x85 }, 
		 
	/* TEST AL,Ib */ 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xa8 }, 
 
	/* TEST rAx,Iz */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0f, I_GPI|NO_NEED_MODRM, 0xa9 }, 
 
	/*************** GROUP ******************/ 
 
	/* TEST Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(0)|FS_8, 0xf6 }, 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|SIZE8, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(1)|FS_8, 0xf6 }, 
 
	/* TEST Ev, Iz */ 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0f, 
		I_GPI|GROUP|GROUPID(0), 0xf7 }, 
	{ 0, GPR|MEM|MOFFSET|0x7f000000|0x0e, IMME|0x0f, 
		I_GPI|GROUP|GROUPID(1), 0xf7 }, 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t XCHG[] = { 
	/* XCHG Eb,Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x86 }, 
 
	/* XCHG	Ev,Gv */ 
	/* but not include "XCHG rAX, GPRs" and "XCHG GPRs, rAX" */ 
	{ 0, GPR|0x70000000|MEM|MOFFSET|0x0e,  
		GPR|0x70000000|0x0e, I_GPI, 0x87 }, 
/********************************************************** 
* TODO: reserved for "xchg rax, GPRs" and "xchg GPRs, rax" 
***********************************************************/ 
 
	/* r8,rAX */ 
	{ 0, GPR|rAX|0x0e, GPR|rAX|0x0e, I_GPI|NO_NEED_MODRM, 0x90 }, 
 
	/* rCX/r9,rAX */ 
	{ 0, GPR|rAX|rCX|0x0e, GPR|rAX|rCX|0x0e, I_GPI|NO_NEED_MODRM, 0x91 }, 
 
	/* rDX/r10,rAX */ 
	{ 0, GPR|rAX|rDX|0x0e, GPR|rAX|rDX|0x0e, I_GPI|NO_NEED_MODRM, 0x92 }, 
 
	/* rBX/r11,rAX */ 
	{ 0, GPR|rAX|rBX|0x0e, GPR|rAX|rBX|0x0e, I_GPI|NO_NEED_MODRM, 0x93 }, 
 
	/* rSP/r12,rAX */ 
	{ 0, GPR|rAX|rSP|0x0e, GPR|rAX|rSP|0x0e, I_GPI|NO_NEED_MODRM, 0x94 }, 
 
	/* rBP/r13,rAX */ 
	{ 0, GPR|rAX|rBP|0x0e, GPR|rAX|rBP|0x0e, I_GPI|NO_NEED_MODRM, 0x95 }, 
 
	/* rSI/r14,rAX */ 
	{ 0, GPR|rAX|rSI|0x0e, GPR|rAX|rSI|0x0e, I_GPI|NO_NEED_MODRM, 0x96 }, 
 
	/* rDI/r15,rAX */  
	{ 0, GPR|rAX|rDI|0x0e, GPR|rAX|rDI|0x0e, I_GPI|NO_NEED_MODRM, 0x97 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t MOV[] = { 
	/* MOV Eb,Gb */  
	/* but it's not MOV ob, AL */ 
	{ 0, GPR|MEM|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x88 }, 
	{ 0, MOFFSET|SIZE8, GPR|0x7f000000|SIZE8, I_GPI|FS_8, 0x88 }, 
 
	/* MOV Ev,Gv */ 
	/* but it's not MOV Ov, rAX */ 
	{ 0, GPR|MEM|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, I_GPI, 0x89 }, 
	{ 0, MOFFSET|0x0e, GPR|0x7f000000|0x0e, I_GPI, 0x89 }, 
 
	/* MOV Gb,Eb */ 
	/* but it's not MOV al, ob */ 
	{ 0, GPR|ALL_REGS|SIZE8, MEM|SIZE8, I_GPI|FS_8, 0x8a }, 
	{ 0, GPR|0x7f000000|SIZE8, MOFFSET|SIZE8, I_GPI|FS_8, 0x8a }, 
 
	/* MOV Gv,Ev */ 
	/* but it's no MOV rAx, Ov */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|0x0e, I_GPI, 0x8b }, 
	{ 0, GPR|0x7f000000|0x0e, MOFFSET|0x0e, I_GPI, 0x8b }, 
 
	/* MOV Mw/Rv,Sw */ 
	{ 0, MEM|MOFFSET|SIZE16, SREG|0xfc000000|SIZE16,	 
		I_GPI|FS_16|NO_CAST_SIZE, 0x8c }, 
	{ 0, GPR|ALL_REGS|0x0e, SREG|0xfc000000|SIZE16,  
		I_GPI|DEST_EXTEND, 0x8c }, 
		 
 
	/* MOV Sw,Ew */ 
	{ 0, SREG|0xfc000000|SIZE16, GPR|MEM|MOFFSET|ALL_REGS|SIZE16,  
		I_GPI|FS_16|NO_CAST, 0x8e }, 
 
	/* MOV AL,Ob */ 
	{ 0, GPR|rAX|SIZE8, MOFFSET|SIZE8,  
		I_GPI|NO_NEED_MODRM|FS_8, 0xa0}, 
 
	/* MOV rAX,Ov */ 
	{ 0, GPR|rAX|0x0e, MOFFSET|0x0e,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xa1 }, 
 
	/* MOV Ob,AL */ 
	{ 0, MOFFSET|SIZE8, GPR|rAX|SIZE8,  
		I_GPI|NO_NEED_MODRM|FS_8, 0xa2 }, 
 
	/* MOV Ov,rAX */ 
	{ 0, MOFFSET|0x0e, GPR|rAX|0x0e,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xa3 }, 
 
 
	/* MOV AL/r8b,Ib */ 
	{ 0,  GPR|rAX|SIZE8, IMME|SIZE8,  
		I_GPI|NO_NEED_MODRM|FS_8, 0xb0 }, 
 
	/* MOV CL/r9b,Ib */ 
	{ 0, GPR|rCX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb1 }, 
 
	/* MOV DL/r10b,Ib */ 
	{ 0, GPR|rDX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb2 }, 
	 
	/* MOV BL/r11b,Ib */ 
	{ 0, GPR|rBX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb3 }, 
 
	/* MOV AH/r12b/spl,Ib */ 
	{ 0, GPR|rSP|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb4 }, 
 
	/* MOV CH/r13b/bpl,Ib */  
	{ 0, GPR|rBP|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb5 }, 
 
	/* MOV DH/r14b/sil,Ib */ 
	{ 0, GPR|rSI|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb6 }, 
 
	/* MOV BH/r15b/dil,Ib */ 
	{ 0, GPR|rDI|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xb7 }, 
 
	/* MOV rAX/r8,Iv */ 
	{ 0, GPR|rAX|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xb8 }, 
 
	/* MOV rCX/r9,Iv */ 
	{ 0, GPR|rCX|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xb9 }, 
 
	/* MOV rDX/r10,Iv */ 
	{ 0, GPR|rDX|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64,0xba }, 
 
	/* MOV rBX/r11,Iv */	 
	{ 0, GPR|rBX|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xbb }, 
 
	/* MOV rSP/r12,Iv */ 
	{ 0, GPR|rSP|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xbc }, 
 
	/* MOV rBP/r13,Iv */ 
	{ 0, GPR|rBP|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xbd }, 
 
	/* MOV rSI/r14,Iv */ 
	{ 0, GPR|rSI|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xbe }, 
 
	/* MOV rDI/r15,Iv */ 
	{ 0, GPR|rDI|0x0e, IMME|0x0f,  
		I_GPI|NO_NEED_MODRM|SUPPORT_VALUE64, 0xbf }, 
 
 
	/***************** GROUP *******************/ 
	/* MOV Eb, Ib */ 
	{ 0, MEM|MOFFSET|SIZE8, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(0)|FS_8, 0xc6 }, 
 
	/* MOV Ev, Iz */ 
	{ 0, MEM|MOFFSET|0x0e, IMME|0x0f,  
		I_GPI|GROUP|GROUPID(0), 0xc7 }, 
 
 
	/**************** two byte opcode **************/ 
	/* MOV Rd, Cd */ 
	{ 0, GPR|ALL_REGS|SIZE32, CREG|ALL_REGS|SIZE32, I_GPI|FS_32, 0x0f20 }, 
	/* MOV Rq, Cq */ 
	{ 0, GPR|ALL_REGS|SIZE64, CREG|ALL_REGS|SIZE64, I_GPI|FS_64, 0x0f20 }, 
 
	 
	/* MOV Rd, Dd */ 
	{ 0, GPR|ALL_REGS|SIZE32, DREG|ALL_REGS|SIZE32, I_GPI|FS_32, 0x0f21 }, 
	/* MOV Rq, Dq */ 
	{ 0, GPR|ALL_REGS|SIZE64, DREG|ALL_REGS|SIZE64, I_GPI|FS_64, 0x0f21 }, 
 
		 
	/* MOV Cd, Rd */ 
	{ 0, CREG|ALL_REGS|SIZE32, GPR|ALL_REGS|SIZE32, I_GPI|FS_32, 0x0f22 }, 
	/* MOV Cq, Rq */ 
	{ 0, CREG|ALL_REGS|SIZE64, GPR|ALL_REGS|SIZE64, I_GPI|FS_64, 0x0f22 },	 
 
 
	/* MOV Dd, Rd */ 
	{ 0, DREG|ALL_REGS|SIZE32, GPR|ALL_REGS|SIZE32, I_GPI|FS_32, 0x0f23 }, 
	/* MOV Dq, Rq */ 
	{ 0, DREG|ALL_REGS|SIZE64, GPR|ALL_REGS|SIZE64, I_GPI|FS_64, 0x0f23 },	 
 
 
	/********** end flag *************/ 
	{ 0, 0, 0, 0, 0 } 
}; 
 
  
 
i_key_t LEA[] = { 
	/* LEA Gv,M */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e, I_GPI, 0x8d }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t NOP[] = { 
	/* NOP */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x90 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CBW[] = { 
	/* CBW */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x98 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CWDE[] = { 
	/* CWDE */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0x98 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CDQE[] = { 
	/* CDQE */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x98 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CWD[] = { 
	/* CWD */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0x99 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CDQ[] = { 
	/* CDQ */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0x99 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CQO[] = { 
	/* CQO */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x99 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CALL[] = { 
	/* CALL Ap */ 
	{ 0, 0, MOFFSET|FAR_POINTER|SIZE32,  
		I_GPI|INVLD_IN_64|NO_NEED_MODRM|FS_32, 0x9a }, 
	 
	/* CALL Jz */ 
	{ 0, 0, IMME|0x0f, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0xe8 }, 
 
	/******************* GROUP *********************/ 
	/* CALL Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e,  
		I_GPI|GROUP|GROUPID(2), 0xff }, 
 
	/* CALL Ep */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE32|FAR_POINTER,  
		I_GPI|GROUP|GROUPID(3)|FS_32, 0xff }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t WAIT[] = { 
	/* WAIT */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9b }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t FWAIT[] = { 
	/* FWAIT */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9b }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t PUSHF[] = { 
	/* PUSHF Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9c }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t PUSHQ[] = { 
	/* PUSHQ Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9c }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t POPF[] = { 
	/* POPF Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9d }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
	 
i_key_t POPQ[] = { 
	/* POPQ Fv */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x9d }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SAHF[] = { 
	/* SAHF */	 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x9e }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LAHF[] = { 
	/* LAHF */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0x9f }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t MOVSB[] = { 
	/* MOVSB Yb,Xb */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xa4 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t MOVSW[] = { 
	/* MOVSW Yv,Xv */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t MOVSD[] = { 
	/* MOVSD Yv,Xv */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t MOVSQ[] = { 
	/* MOVSQ Yv,Xv */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xa5 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMPSB[] = { 
	/* CMPSB Xb,Yb */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xa6 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMPSW[] = { 
	/* CMPSW Xv,Yv */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMPSD[] = { 
	/* CMPSD Xv,Yv */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMPSQ[] = { 
 	/* CMPSQ Xv,Yv */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xa7 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t STOSB[] = { 
	/* STOSB Yb,AL */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xaa }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STOSW[] = { 
	/* STOSW Yv,rAX */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xab }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STOSD[] = { 
	/* STOSD Yv,rAX */	 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xab }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STOSQ[] = { 
	/* STOSQ Yv,rAX */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xab }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LODSB[] = { 
	/* LODSB AL,Xb */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xac }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LODSW[] = { 
	/* LODSW rAX,Xv */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xad }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LODSD[] = { 
	/* LODSD rAX,Xv */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xad }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LODSQ[] = { 
	/* LODSQ rAX,Xv */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xad }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SCASB[] = { 
	/* SCASB AL,Yb */ 
	{ 0, 0, 0, I_GPI|FS_8|NO_NEED_MODRM|ONLY_OPCODE, 0xae }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SCASW[] = { 
	/* SCASW rAX,Yv */ 
	{ 0, 0, 0, I_GPI|FS_16|NO_NEED_MODRM|ONLY_OPCODE, 0xaf }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SCASD[] = { 
 	/* SCASD rAX,Yv */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xaf }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SCASQ[] = { 
	/* SCASQ rAX,Yv */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xaf }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t RET[] = { 
	/* ret near */ 
	/* RET Iw */ 
	{ 0, 0, IMME|SIZE8|SIZE16, I_GPI|NO_NEED_MODRM|FS_16|NO_CAST, 0xc2 }, 
 
	/* RET */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xc3 }, 
 
	/* ret far */ 
	/* RET Iw */ 
	{ 0, 0, IMME|SIZE16, I_GPI|NO_NEED_MODRM|FAR_POINTER|FS_16, 0xca }, 
 
	/* RET */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE|FAR_POINTER, 0xcb }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LES[] = { 
	/* LES Gz,Mp */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e,  
		I_GPI|INVLD_IN_64|FS_IN_BITS|FAR_POINTER, 0xc4 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LDS[] = { 
	/* LDS Gz,Mp */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|0x0e,  
		I_GPI|INVLD_IN_64|FS_IN_BITS|FAR_POINTER, 0xc5 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t ENTER[] = { 
	/* ENTER Iw,Ib */ 
	{ 0, IMME|SIZE8|SIZE16, IMME|SIZE8, I_GPI|NO_NEED_MODRM, 0xc8 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LEAVE[] = { 
	/* LEAVE */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xc9 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t INT3[] = { 
	/* INT3 */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xcc }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t INTN[] = { 
	/* INT Ib*/ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xcd }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t INTO[] = { 
	/* INTO */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xce }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t IRET[] = { 
	/* IRET */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xcf }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t IRETD[] = { 
	/* IRETD */ 
	{ 0, 0, 0, I_GPI|FS_32|NO_NEED_MODRM|ONLY_OPCODE, 0xcf }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t IRETQ[] = { 
	/* IRETQ */ 
	{ 0, 0, 0, I_GPI|FS_64|ONLY_IN_64|NO_NEED_MODRM|ONLY_OPCODE, 0xcf }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LOOPNZ[] = { 
	/* LOOPNZ Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe0 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LOOPE[] = { 
	/* LOOPE Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe1 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LOOP[] = { 
	/* LOOP Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe2 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JCXZ[] = { 
	/* JCXZ Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_16, 0xe3 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JECXZ[] = { 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_32, 0xe3 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t JRCXZ[] = { 
	/* JrCXZ Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|ONLY_IN_64|FS_64, 0xe3 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
/* TODO: ****************/ 
i_key_t IN[] = { 
	/* IN AL,Ib */	 
	{ 0, GPR|rAX|SIZE8, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xe4 }, 
 
	/* IN eAX,Ib */ 
	{ 0, GPR|rAX|0x06, IMME|SIZE8, I_GPI|NO_NEED_MODRM, 0xe5 }, 
 
	/* IN AL,DX */ 
	{ 0, GPR|rAX|SIZE8, GPR|rDX|SIZE16, I_GPI|NO_NEED_MODRM|NO_CAST, 0xec }, 
 
	/* IN eAX,DX */ 
	{ 0, GPR|rAX|0x06, GPR|rDX|SIZE16, I_GPI|NO_NEED_MODRM, 0xed }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t OUT[] = { 
	/* OUT Ib,AL */ 
	{ 0, IMME|SIZE8, GPR|rAX|SIZE8, I_GPI|NO_NEED_MODRM, 0xe6 }, 
 
	/* OUT Ib,eAX */ 
	{ 0, IMME|SIZE8, GPR|rAX|0x06, I_GPI|NO_NEED_MODRM, 0xe7 }, 
 
	/* OUT DX,AL */ 
	{ 0, GPR|rDX|SIZE16, GPR|rAX|SIZE8, I_GPI|NO_NEED_MODRM|NO_CAST, 0xee }, 
 
	/* OUT DX,eAX */ 
	{ 0, GPR|rDX|SIZE16, GPR|rAX|0x06, I_GPI|NO_NEED_MODRM, 0xef },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t JMP[] = { 
	/* JMP Ap */ 
	{ 0, 0, MOFFSET|FAR_POINTER|SIZE32,  
		INVLD_IN_64|I_GPI|NO_NEED_MODRM|FS_32, 0xea }, 
 
	/* JMP Jb */ 
	{ 0, 0, IMME|SIZE8, I_GPI|NO_NEED_MODRM|FS_8, 0xeb }, 
 
	/* JMP Jz */ 
	{ 0, 0, IMME|0x0f, I_GPI|NO_NEED_MODRM|FS_IN_BITS, 0xe9 }, 
 
	/*********************** GROUP ***************************/ 
	/* JMP Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(4), 0xff },		 
 
	/* JMP Ep */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE32|FAR_POINTER, 
		I_GPI|GROUP|GROUPID(5)|FS_32, 0xff },		 
 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t INT1[] = { 
	/* INT1 ICE Bkpt */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf1 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
	 
i_key_t HLT[] = { 
	/* HLT */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf4 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMC[] = { 
	/* CMC */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf5 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t CLC[] = { 
	/* CLC */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf8 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STC[] = { 
	/* STC */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xf9 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CLI[] = { 
	/* CLI */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfa }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STI[] ={ 
	/* STI */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfb }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CLD[] = { 
	/* CLD */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfc }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t STD[] = { 
	/* STD */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0xfd }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
 
 
/************** Group instruction ***********/ 
i_key_t ROL[] = { 
	/* ROL Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(0)|FS_8, 0xc0 }, 
 
	/* ROL Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(0), 0xc1 }, 
 
	/* ROL Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(0), 0xd0 }, 
	 
	/* ROL Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(0), 0xd1 }, 
	 
	/* ROL Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(0)|FS_8, 0xd2 }, 
 
	/* ROL Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(0), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
}; 
 
 
 
i_key_t ROR[] = { 
	/* ROR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(1)|FS_8, 0xc0 }, 
 
	/* ROR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(1), 0xc1 }, 
 
	/* ROR Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(1), 0xd0 }, 
 
	/* ROR Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(1), 0xd1 }, 
	 
	/* ROR Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(1)|FS_8, 0xd2 }, 
 
	/* ROR Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(1), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
i_key_t RCL[] = { 
	/* RCL Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(2)|FS_8, 0xc0 }, 
 
	/* RCL Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(2), 0xc1 }, 
 
	/* RCL Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(2), 0xd0 }, 
	 
	/* RCL Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(2), 0xd1 }, 
	 
	/* RCL Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(2)|FS_8, 0xd2 }, 
 
	/* RCL Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(2), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
 
i_key_t RCR[] = { 
	/* RCR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(3)|FS_8, 0xc0 }, 
 
	/* RCR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(3), 0xc1 }, 
 
	/* RCR Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(3), 0xd0 }, 
	 
	/* RCR Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(3), 0xd1 }, 
	 
	/* RCR Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(3)|FS_8, 0xd2 }, 
 
	/* RCR Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(3), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
 
i_key_t SHL[] = { 
	/* SHL Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(4)|FS_8, 0xc0 }, 
 
	/* SHL Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(4), 0xc1 }, 
 
	/* SHL Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(4), 0xd0 }, 
 
	/* SHL Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(4), 0xd1 },	 
 
	/* SHL Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(4)|FS_8, 0xd2 }, 
 
	/* SHL Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(4), 0xd3 }, 
 
	 
	/*********** other ***************/ 
	/* SHL Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(6)|FS_8, 0xc0 }, 
 
	/* SHL Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(6), 0xc1 }, 
 
	/* SHL Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(6), 0xd0 }, 
	 
	/* SHL Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(6), 0xd1 }, 
	 
	/* SHL Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(6)|FS_8, 0xd2 }, 
 
	/* SHL Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(6), 0xd3 }, 
 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
/* SAL = SHL */ 
i_key_t *SAL = SHL; 
 
 
 
i_key_t SHR[] = { 
	/* SHR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(5)|FS_8, 0xc0 }, 
 
	/* SHR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(5), 0xc1 }, 
 
	/* SHR Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(5), 0xd0 }, 
	 
	/* SHR Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(5), 0xd1 }, 
	 
	/* SHR Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(5)|FS_8, 0xd2 }, 
 
	/* SHR Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(5), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
i_key_t SAR[] = { 
	/* SAR Eb, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 0x800|SIZE8,  
		I_GPI|GROUP|GROUPID(7)|FS_8, 0xc0 }, 
 
	/* SAR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 0x800|SIZE8, 
		I_GPI|GROUP|GROUPID(7), 0xc1 }, 
 
	/* SAR Eb, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(7), 0xd0 }, 
	 
	/* SAR Ev, 1 */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME_1|SIZE8, 
		I_GPI|GROUP|GROUPID(7), 0xd1 }, 
	 
	/* SAR Eb, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|rCX|SIZE8, 
		I_GPI|GROUP|GROUPID(7)|FS_8, 0xd2 }, 
 
	/* SAR Ev, CL */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8,  
		I_GPI|GROUP|GROUPID(7), 0xd3 }, 
 
	{ 0, 0, 0, 0, 0 }		 
 
}; 
 
 
i_key_t NOT[] = { 
	/* NOT Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(2)|FS_8, 0xf6 }, 
 
	/* NOT Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(2), 0xf7 },		 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
i_key_t NEG[] = { 
	/* NEG Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(3)|FS_8, 0xf6 }, 
 
	/* NEG Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(3), 0xf7 },		 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
i_key_t MUL[] = { 
	/* MUL Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(4)|FS_8, 0xf6 }, 
 
	/* MUL Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(4), 0xf7 },		 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
i_key_t DIV[] = { 
	/* DIV Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(6)|FS_8, 0xf6 }, 
 
	/* DIV Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(6)|FS_8, 0xf7 },		 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
 
i_key_t IDIV[] = { 
	/* IDIV Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8,  
		I_GPI|GROUP|GROUPID(7)|FS_8, 0xf6 }, 
 
	/* IDIV Ev */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI|GROUP|GROUPID(7)|FS_8, 0xf7 },		 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
 
i_key_t SLDT[] = { 
	/* SLDT Mw/Rv */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(0), 0x0f00 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t STR[] = { 
	/* STR Mw/Rv */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(1), 0x0f00 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LLDT[] = { 
	/* LLDT Ew */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(2), 0x0f00 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LTR[] = { 
	/*  LTR Ew */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(3), 0x0f00 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t VERR[] = { 
	/* VERR Ew */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(4), 0x0f00 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t VERW[] = { 
	/* VERW Ew */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(5), 0x0f00 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
 
i_key_t SGDT[] = { 
	/* SGDT Ms */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(0), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
i_key_t SIDT[] = { 
	/* SIDT Ms */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(1), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t LGDT[] = { 
	/* LGDT Ms */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(2), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t LIDT[] = { 
	/* LIDT Ms */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(3), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t SMSW[] = { 
	/* SMSW Mw/Rv */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(4), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t LMSW[] = { 
	/* LMSW Mw/Rv */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(6), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t INVLPG[] = { 
	/* INVLPG Mb */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(7), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t SWAPGS[] = { 
	/* SWAPGS */ 
	/* mod = 11  of modrm's byte */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(7), 0x0f01 }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t LFENCE[] = { 
	/* LFENCE */ 
	/* mod = 11 of modrm's byte */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(5), 0x0fae }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t MFENCE[] = { 
	/* MFENCE */ 
	/* mod = 11 of modrm's byte */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(6), 0x0fae }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
i_key_t SFENCE[] = { 
	/* SFENCE */ 
	/* mod = 11 of modrm's byte */ 
	{ 0, 0, 0, I_GPI|GROUP|GROUPID(7), 0x0fae }, 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
 
i_key_t BT[] = { 
	/* BT Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(4), 0x0fba },  
 
	/****************** two byte opcode *******************/ 
	/* BT Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, 
		I_GPI, 0x0fa3 }, 
	 
	{ 0, 0, 0, 0, 0 }		 
}; 
 
i_key_t SHLD[] = { 
	/* SHLD Ev, Gv, Ib */ 
	{ GPR|ALL_REGS|MEM|MOFFSET|0x0e, GPR|ALL_REGS|0x0e, 
		IMME|SIZE8, I_GPI, 0x0fa4 }, 
 
	{ GPR|ALL_REGS|MEM|MOFFSET|0x0e, GPR|ALL_REGS|0x0e, 
		GPR|rCX|SIZE8, I_GPI, 0x0fa5 }, 
 
	{ 0, 0, 0, 0, 0 }		 
	 
}; 
 
 
i_key_t  BTS[] = { 
	/* BTS Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(5), 0x0fba },  
 
 
	/* BTS Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, 
		I_GPI, 0x0fab },	 
 
	{ 0, 0, 0, 0, 0 }			 
}; 
 
 
i_key_t  BTR[] = { 
	/* BTR Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(6), 0x0fba },  
 
	/* BTR Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e,  
		I_GPI, 0x0fb3 },  
 
	{ 0, 0, 0, 0, 0 }			 
}; 
 
 
i_key_t  BTC[] = { 
	/* BTC Ev, Ib */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI|GROUP|GROUPID(7), 0x0fba },  
 
	/* BTC Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, 
		I_GPI, 0x0fbb },  
	 
	{ 0, 0, 0, 0, 0 }			 
}; 
 
 
i_key_t CPUID[] = { 
	/* CPUID */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fa2 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETO[] = { 
	/* SETO Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f90 }, 
/*	{ 0, 0, MEM|MOFFSET|SIZE8, I_GPI|FS_8, 0x0f90 },	*/ 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETNO[] = { 
	/* SETNO Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f91 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETB[] = { 
	/* SETB Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f92 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETNB[] = { 
	/* SETNB Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f93 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETZ[] = { 
	/* SETZ Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f94 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETNZ[] = { 
	/* SETNZ Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f95 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETBE[] = { 
	/* SETBE Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f96 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETNBE[] = { 
	/* SETNBE Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0f97 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t MOVZX[] = { 
	/* MOVZX Gv, Eb */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI, 0x0fb6 }, 
 
	/* MOVZX Gv, Ew */ 
	{ 0, GPR|ALL_REGS|0x0e,  
			GPR|MEM|MOFFSET|ALL_REGS|SIZE16, I_GPI, 0x0fb7 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETS[] = { 
	/* SETS Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f98 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETNS[] = { 
	/* SETNS Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f99 }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETP[] = { 
	/* SETP Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9a }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SETNP[] = { 
	/* SETNP Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9b }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETL[] = { 
	/* SETL Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9c }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETNL[] = { 
	/* SETNL Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9d }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETLE[] = { 
	/* SETLE Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9e }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SETNLE[] = { 
	/* SETNLE Eb */ 
	{ 0, 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, I_GPI|FS_8, 0x0f9f }, 
	 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t RSM[] = { 
	/* RSM */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0faa }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SHRD[] = { 
	/* SHRD Ev, Gv, Ib */ 
	{ GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, IMME|SIZE8, 
		I_GPI, 0x0fac }, 
 
	/* SHRD Ev, Gv, CL */ 
	{ GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, GPR|rCX|SIZE8, 
		I_GPI, 0x0fad },	 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t BSF[] = { 
	/* BSF Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e,  
		I_GPI, 0x0fbc }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t BSR[] = { 
	/* BSR Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e,  
		I_GPI, 0x0fbd }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t MOVSX[] = { 
	/* MOVSX Gv, Eb */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, 
		I_GPI, 0x0fbe }, 
 
	/* MOVSX Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0fbf }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LAR[] = { 
	/* LAR Gv, Ew */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|ALL_REGS|MEM|MOFFSET|SIZE16,  
		I_GPI, 0x0f02 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LAL[] = { 
	/* LAL Gv, Ew */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|SIZE16, I_GPI, 0x0f03 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SYSCALL[] = { 
	/* SYSCALL */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f05 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CLTS[] = { 
	/* CLTS */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f06 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SYSRET[] = { 
	/* SYSRET */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f07 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t WRMSR[] = { 
	/* WRMSR */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f30 }, 
 
	{ 0, 0, 0, 0, 0 }	 
}; 
 
 
i_key_t RDTSC[] = { 
	/* RDTSC */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f31 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t RDMSR[] = { 
	/* RDMSR */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f32 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t RDPMC[] = { 
	/* RDPMC */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0f33 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SYSENTER[] = { 
	/* SYSENTER */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE|ONLY_IN_64, 0x0f34 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t SYSEXIT[] = { 
	/* SYSEXIT */ 
	{ 0, 0, 0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE|ONLY_IN_64, 0x0f35 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVO[] = { 
	/* CMOVO Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f40 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVNO[] = { 
	/* CMOVNO Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f41 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVB[] = { 
	/* CMOVB Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f42 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVNB[] = { 
	/* CMOVNB Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f43 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVZ[] = { 
	/* CMOVZ Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f44 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVNZ[] = { 
	/* CMOVNZ Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f45 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVBE[] = { 
	/* CMOVBE Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f46 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVNBE[] = { 
	/* CMOVNBE Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f47 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVS[] = { 
	/* CMOVS Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f48 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVNS[] = { 
	/* CMOVNS Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f49 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVP[] = { 
	/* CMOVP Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f4a }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVNP[] = { 
	/* CMOVNP Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f4b }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVL[] = { 
	/* CMOVL Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f4c }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMOVLE[] = { 
	/* CMOVLE Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f4e }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t CMOVNLE[] = { 
	/* CMOVNLE Gv, Ev */ 
	{ 0, GPR|ALL_REGS|0x0e, GPR|MEM|MOFFSET|ALL_REGS|0x0e, 
		I_GPI, 0x0f4f }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LSS[] = { 
	/* LSS Gz, Mp */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|SIZE32,  
		I_GPI|FAR_POINTER, 0x0fb2 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t LFS[] = { 
	/* LFS Gz, Mp */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|SIZE32,  
		I_GPI|FAR_POINTER, 0x0fb4 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t LGS[] = { 
	/* LGS Gz, Mp */ 
	{ 0, GPR|ALL_REGS|0x0e, MEM|MOFFSET|SIZE32,  
		I_GPI|FAR_POINTER, 0x0fb5 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
i_key_t CMPXCHG[] = { 
	/* CMPXCHG Eb, Gb */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI|FS_8, 0x0fb0 }, 
 
	/* CMPXCHG Ev, Gv */ 
	{ 0, GPR|MEM|MOFFSET|ALL_REGS|0x0e, GPR|ALL_REGS|0x0e, 
		I_GPI, 0x0fb1 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t XADD[] = { 
	/* XADD Eb, Gb */ 
	{ 0, GPR|ALL_REGS|MEM|MOFFSET|SIZE8, GPR|ALL_REGS|SIZE8, 
		I_GPI, 0x0fc0 }, 
 
	/* XADD Ev, Gv */ 
	{ 0, GPR|ALL_REGS|MEM|MOFFSET|0x0e, GPR|ALL_REGS|0x0e, 
		I_GPI, 0x0fc1 }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t BSWAP[] = { 
	/* BSWAP rAx/r8 */ 
	{ 0, 0, GPR|rAX|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fc8 }, 
 
	/* BSWAP rCX/r9 */ 
	{ 0, 0, GPR|rCX|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fc9 }, 
 
	/* BSWAP rDX/r10 */ 
	{ 0, 0, GPR|rDX|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fca }, 
 
	/* BSWAP rBX/r11 */ 
	{ 0, 0, GPR|rBX|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fcb }, 
 
	/* BSWAP rSP/r12 */ 
	{ 0, 0, GPR|rSP|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fcc }, 
 
	/* BSWAP rBP/r13 */ 
	{ 0, 0, GPR|rBP|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fcd }, 
 
	/* BSWAP rSI/r14 */ 
	{ 0, 0, GPR|rSI|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fce }, 
 
	/* BSWAP rDI/r15 */ 
	{ 0, 0, GPR|rDI|0xc0, I_GPI|NO_NEED_MODRM|ONLY_OPCODE, 0x0fcf }, 
 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
 
i_key_t AAM[] = { 
	/* AAM */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|ONLY_OPCODE|NO_NEED_MODRM, 0xd4 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t AAD[] = { 
	/* AAD */ 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|ONLY_OPCODE|NO_NEED_MODRM, 0xd5 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
i_key_t SALC[] = { 
	{ 0, 0, 0, I_GPI|INVLD_IN_64|ONLY_OPCODE|NO_NEED_MODRM, 0xd6 }, 
	{ 0, 0, 0, 0, } 
}; 
 
i_key_t XLAT[] = { 
	{ 0, 0, 0, I_GPI|ONLY_OPCODE|NO_NEED_MODRM, 0xd7 }, 
	{ 0, 0, 0, 0, 0 } 
}; 
 
 
/************************************************************************/ 
 
i_set_t	i_set[] = { 
	{ "mov", MOV }, 
	{ "push", PUSH }, 
 
	{ "add", ADD }, 
	{ "pop", POP }, 
	{ "or", OR }, 
	{ "adc", ADC }, 
	{ "sbb", SBB }, 
	{ "and", AND }, 
	{ "daa", DAA }, 
	{ "sub", SUB }, 
	{ "das", DAS }, 
	{ "xor", XOR }, 
	{ "aaa", AAA }, 
	{ "cmp", CMP }, 
	{ "aas", AAS }, 
	{ "inc", INC }, 
	{ "dec", DEC }, 
	{ "pusha", PUSHA }, 
	{ "pushd", PUSHD }, 
	{ "popa", POPA }, 
	{ "popd", POPD }, 
	{ "bound", BOUND }, 
	{ "arpl", ARPL }, 
	{ "movsxd", MOVSXD }, 
	{ "imul", IMUL }, 
	{ "insb", INSB }, 
	{ "insw", INSW }, 
	{ "insd", INSD }, 
	{ "outsb", OUTSB }, 
	{ "outsw", OUTSW }, 
	{ "outsd", OUTSD }, 
	{ "jo", JO }, 
	{ "jno", JNO }, 
	{ "jb", JB }, 
	{ "jc", JB }, 
	{ "jnae", JB }, 
	{ "jnb", JNB }, 
	{ "jnc", JNB }, 
	{ "jae", JNB }, 
	{ "jz", JZ }, 
	{ "je", JZ }, 
	{ "jnz", JNZ }, 
	{ "jne", JNZ }, 
	{ "jbe", JBE }, 
	{ "jna", JBE }, 
	{ "jnbe", JNBE }, 
	{ "ja", JNBE }, 
	{ "js", JS }, 
	{ "jns", JNS }, 
	{ "jp", JP }, 
	{ "jpe", JP }, 
	{ "jnp", JNP }, 
	{ "jpo", JNP }, 
	{ "jl", JL }, 
	{ "jnge", JL }, 
	{ "jnl", JNL }, 
	{ "jge", JNL }, 
	{ "jle", JLE }, 
	{ "jng", JLE }, 
	{ "jnle", JNLE }, 
	{ "jg", JNLE }, 
	{ "test", TEST }, 
	{ "xchg", XCHG }, 
	{ "lea", LEA }, 
	{ "nop", NOP }, 
	{ "cbw", CBW }, 
	{ "cwde", CWDE }, 
	{ "cdqe", CDQE }, 
	{ "cwd", CWD }, 
	{ "cdq", CDQ }, 
	{ "cqo", CQO }, 
	{ "call", CALL }, 
	{ "wait", WAIT }, 
	{ "fwait", FWAIT }, 
	{ "pushf", PUSHF }, 
	{ "pushd", PUSHD }, 
	{ "pushq", PUSHQ }, 
	{ "popf", POPF }, 
	{ "popd", POPD }, 
	{ "popq", POPQ }, 
	{ "sahf", SAHF }, 
	{ "lahf", LAHF }, 
	{ "movsb", MOVSB }, 
	{ "movsw", MOVSW }, 
	{ "movsd", MOVSD }, 
	{ "movsq", MOVSQ }, 
	{ "cmpsb", CMPSB }, 
	{ "cmpsw", CMPSW }, 
	{ "cmpsd", CMPSD }, 
	{ "cmpsq", CMPSQ }, 
	{ "stosb", STOSB }, 
	{ "stosw", STOSW }, 
	{ "stosd", STOSD }, 
	{ "stosq", STOSQ }, 
	{ "lodsb", LODSB }, 
	{ "lodsw", LODSW }, 
	{ "lodsd", LODSD }, 
	{ "lodsq", LODSQ }, 
	{ "scasb", SCASB }, 
	{ "scasw", SCASW }, 
	{ "scasd", SCASD }, 
	{ "scasq", SCASQ }, 
	{ "ret", RET }, 
	{ "les", LES }, 
	{ "lds", LDS }, 
	{ "enter", ENTER }, 
	{ "leave", LEAVE }, 
	{ "int3", INT3 }, 
	{ "int", INTN }, 
	{ "into", INTO }, 
	{ "iret", IRET }, 
	{ "iretd", IRETD }, 
	{ "iretq", IRETQ }, 
/* 
	{ "loopnz", LOOPNZ }, 
	{ "loopz", LOOPZ }, 
	{ "loop", LOOP }, 
	{ "jrcxz", JRCXZ }, 
*/ 
	{ "in", IN }, 
	{ "out", OUT }, 
	{ "jmp", JMP }, 
	{ "int1", INT1 }, 
	{ "hlt", HLT }, 
	{ "cmc", CMC }, 
	{ "clc", CLC }, 
	{ "stc", STD }, 
	{ "cli", CLI }, 
	{ "sti", STI }, 
	{ "cld", CLD }, 
	{ "std", STD }, 
	{ "rol", ROL }, 
	{ "ror", ROR }, 
	{ "rcl", RCL }, 
	{ "rcr", RCR }, 
	{ "shl", SHL }, 
	{ "sal", SHL }, 
	{ "shr", SHR }, 
	{ "sar", SAR }, 
	{ "not", NOT }, 
	{ "neg", NEG }, 
	{ "mul", MUL }, 
	{ "div", DIV }, 
	{ "idiv", IDIV }, 
	{ "sldt", SLDT }, 
	{ "str", STR }, 
	{ "lldt", LLDT }, 
	{ "ltr", LTR }, 
	{ "verr", VERR }, 
	{ "verw", VERW }, 
	{ "sgdt", SGDT }, 
	{ "sidt", SIDT }, 
	{ "lgdt", LGDT }, 
	{ "lidt", LIDT }, 
	{ "smsw", SMSW }, 
	{ "lmsw", LMSW }, 
	{ "invlpg", INVLPG }, 
	{ "swapgs", SWAPGS }, 
	{ "lfence", LFENCE }, 
	{ "mfence", MFENCE }, 
	{ "sfence", SFENCE }, 
	{ "bt", BT }, 
	{ "shld", SHLD }, 
	{ "bts",  BTS }, 
	{ "btr",  BTR }, 
	{ "btc",  BTC }, 
	{ "cpuid", CPUID }, 
	{ "seto", SETO }, 
	{ "setno", SETNO }, 
	{ "setb", SETB }, 
	{ "setnb", SETNB }, 
	{ "setz", SETZ }, 
	{ "setnz", SETNZ }, 
	{ "setbe", SETBE }, 
	{ "setnbe", SETNBE }, 
	{ "movzx", MOVZX }, 
	{ "sets", SETS }, 
	{ "setns", SETNS }, 
	{ "setp", SETP }, 
	{ "setnp", SETNP }, 
	{ "setl", SETL }, 
	{ "setnl", SETNL }, 
	{ "setle", SETLE }, 
	{ "setnle", SETNLE }, 
	{ "rsm", RSM }, 
	{ "shrd", SHRD }, 
	{ "bsf", BSF }, 
	{ "bsr", BSR }, 
	{ "movsx", MOVSX }, 
	{ "lar", LAR }, 
	{ "lal", LAL }, 
	{ "syscall", SYSCALL }, 
	{ "clts", CLTS }, 
	{ "sysret", SYSRET }, 
	{ "wrmsr", WRMSR }, 
	{ "rdtsc", RDTSC }, 
	{ "rdmsr", RDMSR }, 
	{ "rdpmc", RDPMC }, 
	{ "sysenter", SYSENTER }, 
	{ "sysexit", SYSEXIT }, 
	{ "cmovo", CMOVO }, 
	{ "cmovno", CMOVNO }, 
	{ "cmovb", CMOVB }, 
	{ "cmovnb", CMOVNB }, 
	{ "cmovz", CMOVZ }, 
	{ "cmovnz", CMOVNZ }, 
	{ "cmovbe", CMOVB }, 
	{ "cmovnbe", CMOVBE }, 
	{ "cmovs", CMOVS }, 
	{ "cmovns", CMOVNS }, 
	{ "cmovp", CMOVP }, 
	{ "cmovnp", CMOVNP }, 
	{ "cmovl", CMOVL }, 
	{ "cmovnl", CMOVNL }, 
	{ "cmovle", CMOVLE }, 
	{ "cmovnle", CMOVNLE }, 
	{ "lss", LSS }, 
	{ "lfs", LFS }, 
	{ "lgs", LGS }, 
	{ "cmpxchg", CMPXCHG }, 
	{ "xadd", XADD }, 
	{ "bswap", BSWAP }, 
	{ "aam", AAM }, 
	{ "aad", AAD }, 
	{ "salc", SALC }, 
	{ "xlat", XLAT }, 
	 
/*-------------- X87 instruction ----------------*/ 
 
#if 0 
	{ "fadd", fadd }, 
	{ "fmul", fmul }, 
	{ "fcom", fcom }, 
	{ "fcomp", fcomp }, 
	{ "fsub", fsub }, 
	{ "fsubr", fsubr }, 
	{ "fdiv", fdiv }, 
	{ "fdivr", fdivr }, 
	{ "fld", fld }, 
	{ "fxch", fxch }, 
	{ "fst", fst }, 
	{ "fstp", fstp }, 
	{ "fldenv", fldenv },	 
	{ "fldcw", fldcw }, 
	{ "fstenv", fstenv }, 
	{ "fstcw", fstcw }, 
	{ "fnop", fnop }, 
	{ "fchs", fchs }, 
	{ "fld1", fld1 }, 
	{ "f2xm1", f2xm1 }, 
	{ "fprem", fprem }, 
	{ "fabs", fabs }, 
	{ "ftst", ftst }, 
	{ "fxam", fxam }, 
	{ "fldl2t", fldl2t }, 
	{ "fldl2e", fldl2e }, 
	{ "fldpi", fldpi }, 
	{ "fldlg2", fldlg2 }, 
	{ "fldln2", fldln2 }, 
	{ "fldz", fldz }, 
	{ "fyl2x", fy12x }, 
	{ "fptan", fptan }, 
	{ "fpatan", fpatan }, 
	{ "fxtract", fxtract }, 
	{ "fprem1", fprem1 }, 
	{ "fdecstp", fecstp }, 
	{ "fincstp", fincstp }, 
	{ "fyl2xp1", fyl2xp1 }, 
	{ "fsqrt", fsqrt }, 
	{ "fsincos", fsincos }, 
	{ "frndint", frndint }, 
	{ "fscale", fscale }, 
	{ "fsin", fsin }, 
	{ "fcos", fcos }, 
	{ "fiadd", fiadd }, 
	{ "fcmovb", fcmovb }, 
	{ "fcmove", fcmove }, 
	{ "fcmovbe", fcmovbe }, 
	{ "fcmovu", fcmovu }, 
	{ "fimul", fimul }, 
	{ "ficom", ficom }, 
	{ "ficomp", ficomp }, 
	{ "fisub", fisub }, 
	{ "fisubr", fisubr }, 
	{ "fidiv", fidiv }, 
	{ "fidivr", fidivr }, 
	{ "fucompp", fucompp }, 
	{ "fild", fild }, 
 
#endif 
	 
	{ 0, 0 } 
};