mirror of
https://github.com/NishiOwO/JWasm.git
synced 2025-04-22 01:04:39 +00:00
1313 lines
134 KiB
C
1313 lines
134 KiB
C
/****************************************************************************
|
|
*
|
|
* Description: table of instructions. Other reserved words see special.h
|
|
*
|
|
****************************************************************************/
|
|
|
|
/* The order of items for an opcode (ins + insn) is IMPORTANT!
|
|
* And op1 has a higher precedence than op2.
|
|
* operands with type OP_A should be before OP_Rx & OP_R
|
|
* operands with type OP_M should follow OP_Mx
|
|
* operands with type OP_R should follow OP_Rx
|
|
* operands with type OP_I should follow OP_Ix
|
|
*/
|
|
|
|
/* v1.96: the table needn't be sorted anymore, but
|
|
* "additional" (=insn) entries must still be located after the
|
|
* main (=ins) entry. These entries must have a <suffix> so that <tok> +
|
|
* <suffix> gives a unique identifier.
|
|
*/
|
|
|
|
/* branch instructions */
|
|
/* there are some macros in codegen.h which rely on the order of the
|
|
* branch tokens. To satisfy those make sure:
|
|
* - the branch instructions are in order CALL, JMP, Jcc, JeCXZ, LOOPcc
|
|
* - no other instruction between these
|
|
*/
|
|
|
|
/* tok (suffix) op1-3 b1_inf op_dir rm_inf opcode rm_byte cpu prefix */
|
|
|
|
ins (CALL, call, OpCls( I16, NONE, NONE ), 0, 0, no_RM, 0xE8, 0x00, P_86, 0)
|
|
insn(CALL, 1, OpCls( I32, NONE, NONE ), 0, 0, no_RM, 0xE8, 0x00, P_386, 0)
|
|
insn(CALL, 2, OpCls( RGT8, NONE, NONE ), 0, 0, no_WDS, 0xFF, 0x10, P_86, 0)
|
|
insn(CALL, 3, OpCls( M32, NONE, NONE ), F_32, 0, no_WDS, 0xFF, 0x10, P_386, 0)
|
|
insn(CALL, 4, OpCls( M16, NONE, NONE ), F_16, 0, no_WDS, 0xFF, 0x10, P_86, 0)
|
|
/* start entries for FAR call */
|
|
insm(CALL, 6, OpCls( I32, NONE, NONE ), F_16, 0, no_RM, 0x9A, 0x00, P_86, 0)
|
|
insn(CALL, 7, OpCls( I48, NONE, NONE ), F_32, 0, no_RM, 0x9A, 0x00, P_386, 0)
|
|
insn(CALL, 8, OpCls( M32, NONE, NONE ), F_16, 0, no_WDS, 0xFF, 0x18, P_86, 0)
|
|
insn(CALL, 9, OpCls( M48, NONE, NONE ), F_32, 0, no_WDS, 0xFF, 0x18, P_386, 0)
|
|
ins (JMP, jmp, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xEB, 0x00, P_86, 0)
|
|
insn(JMP, 1, OpCls( I16, NONE, NONE ), 0, 0, no_RM, 0xE9, 0x00, P_86, 0)
|
|
insn(JMP, 2, OpCls( I32, NONE, NONE ), 0, 0, no_RM, 0xE9, 0x00, P_386, 0)
|
|
insn(JMP, 3, OpCls( RGT8, NONE, NONE ), 0, 0, no_WDS, 0xFF, 0x20, P_86, 0)
|
|
insn(JMP, 4, OpCls( M32, NONE, NONE ), F_32, 0, no_WDS, 0xFF, 0x20, P_386, 0)
|
|
insn(JMP, 5, OpCls( M16, NONE, NONE ), F_16, 0, no_WDS, 0xFF, 0x20, P_86, 0)
|
|
/* entries for FAR jmp */
|
|
insm(JMP, 7, OpCls( I32, NONE, NONE ), F_16, 0, no_RM, 0xEA, 0x00, P_86, 0)
|
|
insn(JMP, 8, OpCls( I48, NONE, NONE ), F_32, 0, no_RM, 0xEA, 0x00, P_386, 0)
|
|
insn(JMP, 9, OpCls( M32, NONE, NONE ), F_16, 0, no_WDS, 0xFF, 0x28, P_86, 0)
|
|
insn(JMP, 10, OpCls( M48, NONE, NONE ), F_32, 0, no_WDS, 0xFF, 0x28, P_386, 0)
|
|
|
|
// for conditional jumps, the SHORT version must always be first!
|
|
#define jcc( cond, code, condlc ) \
|
|
ins (J##cond, j##condlc, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0x70+code, 0x00, P_86, 0) \
|
|
insn(J##cond, 1, OpCls( I, NONE, NONE ), F_0F, 0, no_RM, 0x80+code, 0x00, P_386, 0)
|
|
|
|
jcc( A, 0x7, a )
|
|
jcc( AE, 0x3, ae )
|
|
jcc( B, 0x2, b )
|
|
jcc( BE, 0x6, be )
|
|
jcc( C, 0x2, c )
|
|
jcc( E, 0x4, e )
|
|
jcc( G, 0xf, g )
|
|
jcc( GE, 0xd, ge )
|
|
jcc( L, 0xc, l )
|
|
jcc( LE, 0xe, le )
|
|
jcc( NA, 0x6, na )
|
|
jcc( NAE, 0x2, nae )
|
|
jcc( NB, 0x3, nb )
|
|
jcc( NBE, 0x7, nbe )
|
|
jcc( NC, 0x3, nc )
|
|
jcc( NE, 0x5, ne )
|
|
jcc( NG, 0xe, ng )
|
|
jcc( NGE, 0xc, nge )
|
|
jcc( NL, 0xd, nl )
|
|
jcc( NLE, 0xf, nle )
|
|
jcc( NO, 0x1, no )
|
|
jcc( NP, 0xb, np )
|
|
jcc( NS, 0x9, ns )
|
|
jcc( NZ, 0x5, nz )
|
|
jcc( O, 0x0, o )
|
|
jcc( P, 0xa, p )
|
|
jcc( PE, 0xa, pe )
|
|
jcc( PO, 0xb, po )
|
|
jcc( S, 0x8, s )
|
|
jcc( Z, 0x4, z )
|
|
|
|
#undef jcc
|
|
|
|
insx(JCXZ, jcxz, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE3, 0x00, P_86, 0, RWF_IA32)
|
|
ins (JECXZ, jecxz, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE3, 0x00, P_386, 0)
|
|
#if AMD64_SUPPORT
|
|
insx(JRCXZ, jrcxz, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE3, 0x00, P_64, 0, RWF_X64)
|
|
#endif
|
|
ins (LOOP, loop, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE2, 0x00, P_86, 0)
|
|
ins (LOOPE, loope, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE1, 0x00, P_86, 0)
|
|
ins (LOOPZ, loopz, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE1, 0x00, P_86, 0)
|
|
ins (LOOPNE, loopne, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE0, 0x00, P_86, 0)
|
|
ins (LOOPNZ, loopnz, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0xE0, 0x00, P_86, 0)
|
|
ins (LOOPD, loopd, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE2, 0x00, P_386, 0)
|
|
ins (LOOPED, looped, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE1, 0x00, P_386, 0)
|
|
ins (LOOPZD, loopzd, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE1, 0x00, P_386, 0)
|
|
ins (LOOPNED,loopned, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE0, 0x00, P_386, 0)
|
|
ins (LOOPNZD,loopnzd, OpCls( I8, NONE, NONE ), F_32A, 0, no_RM, 0xE0, 0x00, P_386, 0)
|
|
insx(LOOPW, loopw, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE2, 0x00, P_86, 0, RWF_IA32)
|
|
insx(LOOPEW, loopew, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE1, 0x00, P_86, 0, RWF_IA32)
|
|
insx(LOOPZW, loopzw, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE1, 0x00, P_86, 0, RWF_IA32)
|
|
insx(LOOPNEW,loopnew, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE0, 0x00, P_86, 0, RWF_IA32)
|
|
insx(LOOPNZW,loopnzw, OpCls( I8, NONE, NONE ), F_16A, 0, no_RM, 0xE0, 0x00, P_86, 0, RWF_IA32)
|
|
|
|
/* arith instructions. Masm v6 encodes operand types R,R differently
|
|
* (direction bit is NOT set). JWasm does like Masm v8+.
|
|
*/
|
|
|
|
#define ari( name, namelc, code, lock ) \
|
|
ins (name, namelc, OpCls( RGT8, I8, NONE ), 0, 0, no_WDS, 0x83, code, P_86, 0) \
|
|
insn(name, 1, OpCls( R, R_MS, NONE ), 0, 1, 0, code+2, 0x00, P_86, 0) \
|
|
insn(name, 3, OpCls( A, I, NONE ), 0, 0, no_RM, code+4, 0x00, P_86, 0) \
|
|
insn(name, 4, OpCls( R, I, NONE ), 0, 0, 0, 0x80, code, P_86, 0) \
|
|
insn(name, 6, OpCls( MGT8, I8, NONE ), 0, 0, no_WDS, 0x83, code, P_86, lock) \
|
|
insn(name, 7, OpCls( MS, R, NONE ), 0, 0, 0, code, 0x00, P_86, lock) \
|
|
insn(name, 8, OpCls( MS, I, NONE ), 0, 0, 0, 0x80, code, P_86, lock)
|
|
|
|
/* v2.02: entries 5+6 replaced by 6 */
|
|
/* v2.06: entries 1+2 replaced by 1 */
|
|
/* v2.11: added AP_LOCK argument, because CMP isn't supposed to accept this prefix */
|
|
|
|
ari( ADD, add, 0x00, AP_LOCK )
|
|
ari( OR, or, 0x08, AP_LOCK )
|
|
ari( ADC, adc, 0x10, AP_LOCK )
|
|
ari( SBB, sbb, 0x18, AP_LOCK )
|
|
ari( AND, and, 0x20, AP_LOCK )
|
|
ari( SUB, sub, 0x28, AP_LOCK )
|
|
ari( XOR, xor, 0x30, AP_LOCK )
|
|
ari( CMP, cmp, 0x38, 0 )
|
|
|
|
#undef ari
|
|
|
|
/* std bitshift instructions */
|
|
#define bsi( name, namelc, code ) \
|
|
ins (name, namelc, OpCls( R_MS, CL_ONLY, NONE ), 0, 0, 0, 0xD2, code, P_86, 0) \
|
|
insn(name, 1, OpCls( R_MS, I_1, NONE ), 0, 0, 0, 0xD0, code, P_86, 0) \
|
|
insn(name, 2, OpCls( R_MS, I8_U, NONE ), 0, 0, 0, 0xC0, code, P_186, 0)
|
|
|
|
bsi( RCL, rcl, 0x10 )
|
|
bsi( RCR, rcr, 0x18 )
|
|
bsi( ROL, rol, 0x00 )
|
|
bsi( ROR, ror, 0x08 )
|
|
bsi( SAL, sal, 0x20 )
|
|
bsi( SAR, sar, 0x38 )
|
|
bsi( SHL, shl, 0x20 )
|
|
bsi( SHR, shr, 0x28 )
|
|
|
|
#undef bsi
|
|
|
|
/* string instructions */
|
|
|
|
ins (CMPS, cmps, OpCls( MS, MS, NONE ), 0, 0, no_RM, 0xA6, 0x00, P_86, AP_REPxx)
|
|
ins (CMPSB, cmpsb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xA6, 0x00, P_86, AP_REPxx)
|
|
insn(CMPSB, 1, OpCls( M08, M08, NONE ), 0, 0, no_RM, 0xA6, 0x00, P_86, AP_REPxx)
|
|
ins (CMPSW, cmpsw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xA7, 0x00, P_86, AP_REPxx)
|
|
insn(CMPSW, 1, OpCls( M16, M16, NONE ), F_16, 0, no_RM, 0xA7, 0x00, P_86, AP_REPxx)
|
|
ins (CMPSD, cmpsd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xA7, 0x00, P_386, AP_REPxx)
|
|
insn(CMPSD, 1, OpCls( M32, M32, NONE ), F_32, 0, no_RM, 0xA7, 0x00, P_386, AP_REPxx)
|
|
insn(CMPSD, 2, OpCls( XMM, XMM_M64, I8_U ), F_F20F, 1, no_WDS, 0xC2, 0x00, P_686|P_SSE2,0)
|
|
ins (INS, ins, OpCls( MS, DX_ONLY, NONE ), 0, 0, no_RM, 0x6C, 0x00, P_186, AP_REP)
|
|
ins (INSB, insb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x6C, 0x00, P_186, AP_REP)
|
|
insn(INSB, 1, OpCls( M08, DX_ONLY, NONE ), 0, 0, no_RM, 0x6C, 0x00, P_186, AP_REP)
|
|
ins (INSW, insw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x6D, 0x00, P_186, AP_REP)
|
|
insn(INSW, 1, OpCls( M16, DX_ONLY, NONE ), F_16, 0, no_RM, 0x6D, 0x00, P_186, AP_REP)
|
|
ins (INSD, insd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x6D, 0x00, P_386, AP_REP)
|
|
insn(INSD, 1, OpCls( M32, DX_ONLY, NONE ), F_32, 0, no_RM, 0x6D, 0x00, P_386, AP_REP)
|
|
ins (LODS, lods, OpCls( MS, NONE, NONE ), 0, 0, no_RM, 0xAC, 0x00, P_86, AP_REP)
|
|
ins (LODSB, lodsb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xAC, 0x00, P_86, AP_REP)
|
|
insn(LODSB, 1, OpCls( M08, NONE, NONE ), 0, 0, no_RM, 0xAC, 0x00, P_86, AP_REP)
|
|
ins (LODSW, lodsw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xAD, 0x00, P_86, AP_REP)
|
|
insn(LODSW, 1, OpCls( M16, NONE, NONE ), F_16, 0, no_RM, 0xAD, 0x00, P_86, AP_REP)
|
|
ins (LODSD, lodsd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xAD, 0x00, P_386, AP_REP)
|
|
insn(LODSD, 1, OpCls( M32, NONE, NONE ), F_32, 0, no_RM, 0xAD, 0x00, P_386, AP_REP)
|
|
ins (MOVS, movs, OpCls( MS, MS, NONE ), 0, 0, no_RM, 0xA4, 0x00, P_86, AP_REP)
|
|
ins (MOVSB, movsb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xA4, 0x00, P_86, AP_REP)
|
|
insn(MOVSB, 1, OpCls( M08, M08, NONE ), 0, 0, no_RM, 0xA4, 0x00, P_86, AP_REP)
|
|
ins (MOVSW, movsw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xA5, 0x00, P_86, AP_REP)
|
|
insn(MOVSW, 1, OpCls( M16, M16, NONE ), F_16, 0, no_RM, 0xA5, 0x00, P_86, AP_REP)
|
|
ins (MOVSD, movsd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xA5, 0x00, P_386, AP_REP)
|
|
insn(MOVSD, 1, OpCls( M32, M32, NONE ), F_32, 0, no_RM, 0xA5, 0x00, P_386, AP_REP)
|
|
insn(MOVSD, 2, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x10, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVSD, 3, OpCls( M64, XMM, NONE ), F_F20F, 0, no_WDS, 0x11, 0x00, P_686|P_SSE2,0)
|
|
ins (OUTS, outs, OpCls( DX_ONLY, MS, NONE ), 0, 0, no_RM, 0x6E, 0x00, P_186, AP_REP)
|
|
ins (OUTSB, outsb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x6E, 0x00, P_186, AP_REP)
|
|
insn(OUTSB, 1, OpCls( DX_ONLY, M08, NONE ), 0, 0, no_RM, 0x6E, 0x00, P_186, AP_REP)
|
|
ins (OUTSW, outsw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x6F, 0x00, P_186, AP_REP)
|
|
insn(OUTSW, 1, OpCls( DX_ONLY, M16, NONE ), F_16, 0, no_RM, 0x6F, 0x00, P_186, AP_REP)
|
|
ins (OUTSD, outsd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x6F, 0x00, P_386, AP_REP)
|
|
insn(OUTSD, 1, OpCls( DX_ONLY, M32, NONE ), F_32, 0, no_RM, 0x6F, 0x00, P_386, AP_REP)
|
|
ins (SCAS, scas, OpCls( MS, NONE, NONE ), 0, 0, no_RM, 0xAE, 0x00, P_86, AP_REPxx)
|
|
ins (SCASB, scasb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xAE, 0x00, P_86, AP_REPxx)
|
|
insn(SCASB, 1, OpCls( M08, NONE, NONE ), 0, 0, no_RM, 0xAE, 0x00, P_86, AP_REPxx)
|
|
ins (SCASW, scasw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xAF, 0x00, P_86, AP_REPxx)
|
|
insn(SCASW, 1, OpCls( M16, NONE, NONE ), F_16, 0, no_RM, 0xAF, 0x00, P_86, AP_REPxx)
|
|
ins (SCASD, scasd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xAF, 0x00, P_386, AP_REPxx)
|
|
insn(SCASD, 1, OpCls( M32, NONE, NONE ), F_32, 0, no_RM, 0xAF, 0x00, P_386, AP_REPxx)
|
|
ins (STOS, stos, OpCls( MS, NONE, NONE ), 0, 0, no_RM, 0xAA, 0x00, P_86, AP_REP)
|
|
ins (STOSB, stosb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xAA, 0x00, P_86, AP_REP)
|
|
insn(STOSB, 1, OpCls( M08, NONE, NONE ), 0, 0, no_RM, 0xAA, 0x00, P_86, AP_REP)
|
|
ins (STOSW, stosw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xAB, 0x00, P_86, AP_REP)
|
|
insn(STOSW, 1, OpCls( M16, NONE, NONE ), F_16, 0, no_RM, 0xAB, 0x00, P_86, AP_REP)
|
|
ins (STOSD, stosd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xAB, 0x00, P_386, AP_REP)
|
|
insn(STOSD, 1, OpCls( M32, NONE, NONE ), F_32, 0, no_RM, 0xAB, 0x00, P_386, AP_REP)
|
|
|
|
/* instructions invalid for IA32+ */
|
|
|
|
insx(AAA, aaa, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x37, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(AAD, aad, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD5, 0x0A, P_86, 0, RWF_IA32 )
|
|
insx(AAM, aam, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD4, 0x0A, P_86, 0, RWF_IA32 )
|
|
insx(AAS, aas, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x3F, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(DAA, daa, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x27, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(DAS, das, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x2F, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(LDS, lds, OpCls( RGT8, MFPTR, NONE ), 0, 1, no_WDS, 0xC5, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(LES, les, OpCls( RGT8, MFPTR, NONE ), 0, 1, no_WDS, 0xC4, 0x00, P_86, 0, RWF_IA32 )
|
|
insx(POPA, popa, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x61, 0x00, P_186, 0, RWF_IA32 )
|
|
insx(POPAD, popad, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x61, 0x00, P_386, 0, RWF_IA32 )
|
|
insx(POPAW, popaw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x61, 0x00, P_186, 0, RWF_IA32 )
|
|
insx(POPFD, popfd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x9D, 0x00, P_386, 0, RWF_IA32 )
|
|
insx(PUSHA, pusha, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x60, 0x00, P_186, 0, RWF_IA32 )
|
|
insx(PUSHAD, pushad, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x60, 0x00, P_386, 0, RWF_IA32 )
|
|
insx(PUSHAW, pushaw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x60, 0x00, P_186, 0, RWF_IA32 )
|
|
insx(PUSHFD, pushfd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x9C, 0x00, P_386, 0, RWF_IA32 )
|
|
insx(PUSHD, pushd, OpCls( I8, NONE, NONE ), F_32, 0, no_RM, 0x6A, 0x00, P_386, 0, RWF_IA32 )
|
|
insn(PUSHD, 1, OpCls( I32, NONE, NONE ), F_32, 0, no_RM, 0x68, 0x00, P_386, 0)
|
|
insn(PUSHD, 2, OpCls( R32, NONE, NONE ), 0, 0, R_in_OP,0x50, 0x00, P_386, 0)
|
|
insn(PUSHD, 3, OpCls( SR86, NONE, NONE ), 0, 1, R_in_OP,0x06, 0x00, P_86, 0)
|
|
insn(PUSHD, 4, OpCls( SR, NONE, NONE ), F_0F, 1, R_in_OP,0x80, 0x00, P_386, 0)
|
|
insn(PUSHD, 5, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xFF, 0x30, P_386, 0)
|
|
/* unlike their names suggest, RETD/RETW will always create a 32-/16-bit far ret */
|
|
insx(RETD, retd, OpCls( I16, NONE, NONE ), F_32, 0, no_RM, 0xCA, 0x00, P_386, 0, RWF_IA32 )
|
|
insn(RETD, 1, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xCB, 0x00, P_386, 0)
|
|
insx(RETW, retw, OpCls( I16, NONE, NONE ), F_16, 0, no_RM, 0xCA, 0x00, P_86, 0, RWF_IA32 )
|
|
insn(RETW, 1, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xCB, 0x00, P_86, 0)
|
|
|
|
/* protected-mode instructions */
|
|
/* some (i.e. SMSW) also work with 32bit register as first operand, but Masm won't accept.
|
|
* to make JWasm accept, change OP_R16 to OP_RGT8
|
|
*/
|
|
|
|
ins (ARPL, arpl, OpCls( R16_M16, R16, NONE ), 0, 0, no_WDS, 0x63, 0x00, P_286, 0)
|
|
ins (LLDT, lldt, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x10, P_286p, 0)
|
|
ins (LMSW, lmsw, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x01, 0x30, P_286p, 0)
|
|
ins (LTR, ltr, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x18, P_286p, 0)
|
|
ins (SLDT, sldt, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x00, P_286, 0)
|
|
ins (SMSW, smsw, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x01, 0x20, P_286, 0)
|
|
ins (STR, str, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x08, P_286, 0)
|
|
ins (VERR, verr, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x20, P_286, 0)
|
|
ins (VERW, verw, OpCls( R16_M16, NONE, NONE ), F_0FNO66,0, no_WDS, 0x00, 0x28, P_286, 0)
|
|
/* v2.06: obsolete */
|
|
//insn(ARPL, 1, OP_M16, OP_R16, OP_NONE, 0, 0, no_WDS, 0x63, 0x00, P_286, 0)
|
|
//insn(LLDT, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x10, P_286p, 0)
|
|
//insn(LMSW, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x01, 0x30, P_286p, 0)
|
|
//insn(LTR, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x18, P_286p, 0)
|
|
//insn(SLDT, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x00, P_286, 0)
|
|
//insn(SMSW, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x01, 0x20, P_286, 0)
|
|
//insn(STR, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x08, P_286, 0)
|
|
//insn(VERR, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x20, P_286, 0)
|
|
//insn(VERW, 1, OP_M16, OP_NONE, OP_NONE, F_0FNO66,0, no_WDS, 0x00, 0x28, P_286, 0)
|
|
|
|
/* one-operand register/memory instructions */
|
|
|
|
ins (DIV, div, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x30, P_86, 0)
|
|
insn(DIV, 1, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x30, P_86, 0)
|
|
insn(DIV, 2, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x30, P_86, 0)
|
|
ins (IDIV, idiv, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x38, P_86, 0)
|
|
insn(IDIV, 1, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x38, P_86, 0)
|
|
insn(IDIV, 2, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x38, P_86, 0)
|
|
ins (MUL, mul, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x20, P_86, 0)
|
|
insn(MUL, 1, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x20, P_86, 0)
|
|
insn(MUL, 2, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x20, P_86, 0)
|
|
ins (NEG, neg, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x18, P_86, 0)
|
|
insn(NEG, 1, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x18, P_86, AP_LOCK)
|
|
insn(NEG, 2, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x18, P_86, AP_LOCK)
|
|
ins (NOT, not, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x10, P_86, 0)
|
|
insn(NOT, 1, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x10, P_86, AP_LOCK)
|
|
insn(NOT, 2, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x10, P_86, AP_LOCK)
|
|
|
|
/* prefixes. must start with LOCK, end with REPZ and be consecutive */
|
|
ins (LOCK, lock, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF0, 0, P_86, AP_LOCK)
|
|
ins (REP, rep, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF3, 0, P_86, AP_REP)
|
|
ins (REPE, repe, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF3, 0, P_86, AP_REPxx)
|
|
ins (REPNE, repne, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF2, 0, P_86, AP_REPxx)
|
|
ins (REPNZ, repnz, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF2, 0, P_86, AP_REPxx)
|
|
ins (REPZ, repz, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF3, 0, P_86, AP_REPxx)
|
|
|
|
/* BTx */
|
|
|
|
ins (BT, bt, OpCls( RGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xA3, 0x00, P_386, 0)
|
|
insn(BT, 1, OpCls( RGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x20, P_386, 0)
|
|
insn(BT, 2, OpCls( MGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xA3, 0x00, P_386, 0)
|
|
insn(BT, 3, OpCls( MGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x20, P_386, 0)
|
|
ins (BTC, btc, OpCls( RGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xBB, 0x00, P_386, 0)
|
|
insn(BTC, 1, OpCls( RGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x38, P_386, 0)
|
|
insn(BTC, 2, OpCls( MGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xBB, 0x00, P_386, AP_LOCK)
|
|
insn(BTC, 3, OpCls( MGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x38, P_386, AP_LOCK)
|
|
ins (BTR, btr, OpCls( RGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xB3, 0x00, P_386, 0)
|
|
insn(BTR, 1, OpCls( RGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x30, P_386, 0)
|
|
insn(BTR, 2, OpCls( MGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xB3, 0x00, P_386, AP_LOCK)
|
|
insn(BTR, 3, OpCls( MGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x30, P_386, AP_LOCK)
|
|
ins (BTS, bts, OpCls( RGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xAB, 0x00, P_386, 0)
|
|
insn(BTS, 1, OpCls( RGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x28, P_386, 0)
|
|
insn(BTS, 2, OpCls( MGT8, RGT8, NONE ), F_0F, 0, no_WDS, 0xAB, 0x00, P_386, AP_LOCK)
|
|
insn(BTS, 3, OpCls( MGT8, I8_U, NONE ), F_0F, 0, no_WDS, 0xBA, 0x28, P_386, AP_LOCK)
|
|
|
|
/* set/reset flags */
|
|
|
|
ins (CMC, cmc, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF5, 0x00, P_86, 0)
|
|
ins (CLC, clc, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF8, 0x00, P_86, 0)
|
|
ins (STC, stc, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF9, 0x00, P_86, 0)
|
|
ins (CLI, cli, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xFA, 0x00, P_86, 0)
|
|
ins (STI, sti, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xFB, 0x00, P_86, 0)
|
|
ins (CLD, cld, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xFC, 0x00, P_86, 0)
|
|
ins (STD, std, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xFD, 0x00, P_86, 0)
|
|
|
|
/* INC/DEC. (hack for 64-bit in reswords.c!) */
|
|
|
|
ins (INC, inc, OpCls( RGT8, NONE, NONE ), 0, 0, R_in_OP,0x40, 0x00, P_86, 0)
|
|
insn(INC, 1, OpCls( R, NONE, NONE ), 0, 0, 0, 0xFE, 0x00, P_86, 0)
|
|
insn(INC, 2, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xFE, 0x00, P_86, AP_LOCK)
|
|
insn(INC, 3, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xFF, 0x00, P_86, AP_LOCK)
|
|
ins (DEC, dec, OpCls( RGT8, NONE, NONE ), 0, 0, R_in_OP,0x48, 0x00, P_86, 0)
|
|
insn(DEC, 1, OpCls( R, NONE, NONE ), 0, 0, 0, 0xFE, 0x08, P_86, 0)
|
|
insn(DEC, 2, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xFE, 0x08, P_86, AP_LOCK)
|
|
insn(DEC, 3, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xFF, 0x08, P_86, AP_LOCK)
|
|
|
|
/* PUSH/POP (16- and 32-bit only) */
|
|
|
|
ins (PUSH, push, OpCls( R16_R32, NONE, NONE ), 0, 0, R_in_OP,0x50, 0x00, P_86, 0)
|
|
insn(PUSH, 1, OpCls( I8, NONE, NONE ), 0, 0, no_RM, 0x6A, 0x00, P_186, 0)
|
|
insn(PUSH, 2, OpCls( I, NONE, NONE ), 0, 0, no_RM, 0x68, 0x00, P_186, 0)
|
|
insn(PUSH, 3, OpCls( SR86, NONE, NONE ), 0, 1, R_in_OP,0x06, 0x00, P_86, 0)
|
|
insn(PUSH, 4, OpCls( SR, NONE, NONE ), F_0F, 1, R_in_OP,0x80, 0x00, P_386, 0)
|
|
insn(PUSH, 5, OpCls( M16_M32, NONE, NONE ), 0, 0, 0, 0xFF, 0x30, P_86, 0)
|
|
ins (POP, pop, OpCls( R16_R32, NONE, NONE ), 0, 0, R_in_OP,0x58, 0x00, P_86, 0)
|
|
insn(POP, 1, OpCls( SR86, NONE, NONE ), 0, 1, R_in_OP,0x07, 0x00, P_86, 0)
|
|
insn(POP, 2, OpCls( SR, NONE, NONE ), F_0F, 1, R_in_OP,0x81, 0x00, P_386, 0)
|
|
insn(POP, 3, OpCls( M16_M32, NONE, NONE ), 0, 0, 0, 0x8F, 0x00, P_86, 0)
|
|
ins (PUSHW, pushw, OpCls( I8, NONE, NONE ), F_16, 0, no_RM, 0x6A, 0x00, P_186, 0)
|
|
insn(PUSHW, 1, OpCls( I16, NONE, NONE ), F_16, 0, no_RM, 0x68, 0x00, P_186, 0)
|
|
ins (PUSHF, pushf, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x9C, 0x00, P_86, 0)
|
|
ins (POPF, popf, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x9D, 0x00, P_86, 0)
|
|
|
|
/* MOV */
|
|
|
|
ins (MOV, mov, OpCls( A, MS, NONE ), 0, 1, no_RM, 0xA0, 0x00, P_86, 0)
|
|
insn(MOV, 1, OpCls( R, R_MS, NONE ), 0, 1, 0, 0x8A, 0x00, P_86, 0)
|
|
insn(MOV, 2, OpCls( R8, I, NONE ), 0, 0, R_in_OP,0xB0, 0x00, P_86, 0)
|
|
insn(MOV, 3, OpCls( R16_R32, I, NONE ), 0, 0, R_in_OP,0xB8, 0x00, P_86, 0)
|
|
#if AMD64_SUPPORT
|
|
insn(MOV, 4, OpCls( R64, I, NONE ), 0, 0, 0, 0xC6, 0x00, P_64, 0)
|
|
insn(MOV, 5, OpCls( R64, I64, NONE ), 0, 0, R_in_OP,0xB8, 0x00, P_64, 0)
|
|
#endif
|
|
insn(MOV, 6, OpCls( RGT8, SR, NONE ), 0, 0, no_WDS, 0x8C, 0xC0, P_86, 0)
|
|
insn(MOV, 7, OpCls( SR, RGT8, NONE ), 0, 1, no_WDS, 0x8E, 0xC0, P_86, 0)
|
|
insn(MOV, 8, OpCls( SR, MS, NONE ), 0, 1, no_WDS, 0x8E, 0x00, P_86, 0)
|
|
insn(MOV, 9, OpCls( MS, A, NONE ), 0, 0, no_RM, 0xA2, 0x00, P_86, 0)
|
|
insn(MOV, 10, OpCls( MS, R, NONE ), 0, 0, 0, 0x88, 0x00, P_86, 0)
|
|
insn(MOV, 11, OpCls( MS, I, NONE ), 0, 0, 0, 0xC6, 0x00, P_86, 0)
|
|
insn(MOV, 12, OpCls( MS, SR, NONE ), 0, 0, no_WDS, 0x8C, 0x00, P_86, 0)
|
|
insn(MOV, 13, OpCls( RGT16, RSPEC, NONE ), F_0FNO66,0, no_WDS, 0x20, 0xC0, P_386, 0)
|
|
insn(MOV, 14, OpCls( RSPEC, RGT16, NONE ), F_0FNO66,1, no_WDS, 0x22, 0xC0, P_386, 0)
|
|
|
|
/* rest */
|
|
|
|
ins (BOUND_, bound, OpCls( RGT8, MS, NONE ), 0, 1, no_WDS, 0x62, 0x00, P_186, 0)
|
|
ins (BSF, bsf, OpCls( RGT8, RGT8_MS, NONE ), F_0F, 1, no_WDS, 0xBC, 0x00, P_386, 0)
|
|
ins (BSR, bsr, OpCls( RGT8, RGT8_MS, NONE ), F_0F, 1, no_WDS, 0xBD, 0x00, P_386, 0)
|
|
ins (BSWAP, bswap, OpCls( RGT16, NONE, NONE ), F_0F, 0, R_in_OP,0xC8, 0x00, P_486, 0)
|
|
ins (CBW, cbw, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x98, 0x00, P_86, 0)
|
|
ins (CDQ, cdq, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x99, 0x00, P_386, 0)
|
|
ins (CWD, cwd, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0x99, 0x00, P_86, 0)
|
|
ins (CWDE, cwde, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0x98, 0x00, P_386, 0)
|
|
ins (CLTS, clts, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0x0F, 0x06, P_286p, 0)
|
|
ins (CMPXCHG, cmpxchg, OpCls( R, R, NONE ), F_0F, 0, 0, 0xB0, 0x00, P_486, 0)
|
|
insn(CMPXCHG, 1, OpCls( MS, R, NONE ), F_0F, 0, 0, 0xB0, 0x00, P_486, AP_LOCK)
|
|
ins (CMPXCHG8B, cmpxchg8b, OpCls( M64, NONE, NONE ), F_0F, 0, 0, 0xC7, 0x08, P_586, AP_LOCK)
|
|
ins (CPUID, cpuid, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0x0F, 0xA2, P_586, 0)
|
|
ins (ENTER, enter, OpCls( I16, I8_U, NONE ), 0, 0, no_RM, 0xC8, 0x00, P_186, 0)
|
|
ins (HLT, hlt, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xF4, 0x00, P_86, 0)
|
|
ins (IMUL, imul, OpCls( R, NONE, NONE ), 0, 0, 0, 0xF6, 0x28, P_86, 0)
|
|
insn(IMUL, 2, OpCls( M08, NONE, NONE ), 0, 0, 0, 0xF6, 0x28, P_86, 0)
|
|
insn(IMUL, 3, OpCls( MGT8, NONE, NONE ), 0, 0, 0, 0xF7, 0x28, P_86, 0)
|
|
insn(IMUL, 4, OpCls( RGT8, R_MS, NONE ), F_0F, 1, no_WDS, 0xAF, 0x00, P_386, 0)
|
|
insn(IMUL, 6, OpCls( RGT8, I8, NONE ), 0, 1, no_WDS, 0x6B, 0x00, P_186, 0)
|
|
insn(IMUL, 7, OpCls( RGT8, I, NONE ), 0, 1, no_WDS, 0x69, 0x00, P_186, 0)
|
|
insn(IMUL, 8, OpCls( RGT8, R_MS, I8_U ), 0, 1, no_WDS, 0x6B, 0x00, P_186, 0)
|
|
insn(IMUL, 9, OpCls( RGT8, R_MS, I ), 0, 1, no_WDS, 0x69, 0x00, P_186, 0)
|
|
ins (IN, in, OpCls( A, DX_ONLY, NONE ), 0, 0, no_RM, 0xEC, 0x00, P_86, 0)
|
|
insn(IN, 1, OpCls( A, I8_U, NONE ), 0, 0, no_RM, 0xE4, 0x00, P_86, 0)
|
|
ins (INT, int, OpCls( I_3, NONE, NONE ), 0, 0, no_RM, 0xCC, 0x00, P_86, 0)
|
|
insn(INT, 1, OpCls( I8_U, NONE, NONE ), 0, 0, no_RM, 0xCD, 0x00, P_86, 0)
|
|
ins (INTO, into, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xCE, 0x00, P_86, 0)
|
|
ins (INVD, invd, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x08, 0x00, P_486, 0)
|
|
ins (INVLPG, invlpg, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0x38, P_486, 0)
|
|
ins (IRET, iret, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xCF, 0x00, P_86, 0)
|
|
ins (IRETD, iretd, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xCF, 0x00, P_386, 0)
|
|
/* the F-suffix variants of IRET/IRETD are just aliases and pretty useless.
|
|
* In Masm v8+, IRETF has disappeared, but IRETDF is still there.
|
|
*/
|
|
ins (IRETF, iretf, OpCls( NONE, NONE, NONE ), F_16, 0, no_RM, 0xCF, 0x00, P_86, 0)
|
|
ins (IRETDF, iretdf, OpCls( NONE, NONE, NONE ), F_32, 0, no_RM, 0xCF, 0x00, P_386, 0)
|
|
ins (LAHF, lahf, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9F, 0x00, P_86, 0)
|
|
ins (LAR, lar, OpCls( RGT8, RGT8_MS, NONE ), F_0F, 1, no_WDS, 0x02, 0x00, P_286, 0)
|
|
ins (LSL, lsl, OpCls( RGT8, RGT8_MS, NONE ), F_0F, 1, no_WDS, 0x03, 0x00, P_286, 0)
|
|
ins (LEA, lea, OpCls( RGT8, MS, NONE ), 0, 1, no_WDS, 0x8D, 0x00, P_86, 0)
|
|
ins (LEAVE, leave, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xC9, 0x00, P_186, 0)
|
|
ins (LFS, lfs, OpCls( RGT8, MFPTR, NONE ), F_0F, 1, no_WDS, 0xB4, 0x00, P_386, 0)
|
|
ins (LGS, lgs, OpCls( RGT8, MFPTR, NONE ), F_0F, 1, no_WDS, 0xB5, 0x00, P_386, 0)
|
|
ins (LSS, lss, OpCls( RGT8, MFPTR, NONE ), F_0F, 1, no_WDS, 0xB2, 0x00, P_386, 0)
|
|
ins (LGDT, lgdt, OpCls( M48, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0x10, P_286p, 0)
|
|
ins (LIDT, lidt, OpCls( M48, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0x18, P_286p, 0)
|
|
ins (MOVSX, movsx, OpCls( RGT8, R_MS, NONE ), F_0F, 1, 0, 0xBE, 0x00, P_386, 0)
|
|
ins (MOVZX, movzx, OpCls( RGT8, R_MS, NONE ), F_0F, 1, 0, 0xB6, 0x00, P_386, 0)
|
|
ins (NOP, nop, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x90, 0x00, P_86, 0)
|
|
ins (OUT, out, OpCls( DX_ONLY, A, NONE ), 0, 0, no_RM, 0xEE, 0x00, P_86, 0)
|
|
insn(OUT, 1, OpCls( I8_U, A, NONE ), 0, 0, no_RM, 0xE6, 0x00, P_86, 0)
|
|
|
|
ins (RDMSR, rdmsr, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x32, 0x00, P_586, 0)
|
|
/* v2.11: RDPMC is accepted with .586 ( was: .686 ) */
|
|
ins (RDPMC, rdpmc, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x33, 0x00, P_586, 0)
|
|
ins (RDTSC, rdtsc, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x31, 0x00, P_586, 0)
|
|
ins (RDTSCP, rdtscp, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xF9, P_686, 0)
|
|
ins (RET, ret, OpCls( I16, NONE, NONE ), 0, 0, no_RM, 0xC2, 0x00, P_86, 0)
|
|
insn(RET, 1, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xC3, 0x00, P_86, 0)
|
|
ins (RETN, retn, OpCls( I16, NONE, NONE ), 0, 0, no_RM, 0xC2, 0x00, P_86, 0)
|
|
insn(RETN, 1, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xC3, 0x00, P_86, 0)
|
|
ins (RETF, retf, OpCls( I16, NONE, NONE ), 0, 0, no_RM, 0xCA, 0x00, P_86, 0)
|
|
insn(RETF, 1, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xCB, 0x00, P_86, 0)
|
|
ins (RSM, rsm, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0xAA, 0x00, P_586, 0)
|
|
ins (SAHF, sahf, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9E, 0x00, P_86, 0)
|
|
ins (SGDT, sgdt, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0x00, P_286, 0)
|
|
ins (SIDT, sidt, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0x08, P_286, 0)
|
|
ins (SHLD, shld, OpCls( RGT8_MGT8,RGT8, CL ), F_0F, 0, no_WDS, 0xA5, 0x00, P_386, 0)
|
|
insn(SHLD, 1, OpCls( RGT8_MGT8,RGT8, I8_U ), F_0F, 0, no_WDS, 0xA4, 0x00, P_386, 0)
|
|
ins (SHRD, shrd, OpCls( RGT8_MGT8,RGT8, CL ), F_0F, 0, no_WDS, 0xAD, 0x00, P_386, 0)
|
|
insn(SHRD, 1, OpCls( RGT8_MGT8,RGT8, I8_U ), F_0F, 0, no_WDS, 0xAC, 0x00, P_386, 0)
|
|
ins (SYSENTER, sysenter, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x34, 0x00, P_686, 0)
|
|
ins (SYSEXIT, sysexit, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x35, 0x00, P_686p, 0)
|
|
ins (TEST, test, OpCls( A, I, NONE ), 0, 0, no_RM, 0xA8, 0x00, P_86, 0)
|
|
insn(TEST, 1, OpCls( R, R_MS, NONE ), 0, 1, 0, 0x84, 0x00, P_86, 0)
|
|
insn(TEST, 3, OpCls( R_MS, I, NONE ), 0, 0, 0, 0xF6, 0x00, P_86, 0)
|
|
insn(TEST, 4, OpCls( MS, R, NONE ), 0, 0, 0, 0x84, 0x00, P_86, 0)
|
|
ins (UD2, ud2, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x0B, 0x00, P_686, 0)
|
|
ins (WAIT, wait, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9B, 0x00, P_86, 0)
|
|
ins (WBINVD, wbinvd, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x09, 0x00, P_486, 0)
|
|
ins (WRMSR, wrmsr, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x30, 0x00, P_586, 0)
|
|
ins (XADD, xadd, OpCls( R, R, NONE ), F_0F, 0, 0, 0xC0, 0x00, P_486, 0)
|
|
insn(XADD, 1, OpCls( MS, R, NONE ), F_0F, 0, 0, 0xC0, 0x00, P_486, AP_LOCK)
|
|
ins (XCHG, xchg, OpCls( A, RGT8, NONE ), 0, 0, R_in_OP,0x90, 0x00, P_86, 0)
|
|
insn(XCHG, 1, OpCls( RGT8, A, NONE ), 0, 0, R_in_OP,0x90, 0x00, P_86, 0)
|
|
insn(XCHG, 2, OpCls( R, R, NONE ), 0, 1, 0, 0x86, 0x00, P_86, 0)
|
|
insn(XCHG, 3, OpCls( R, MS, NONE ), 0, 1, 0, 0x86, 0x00, P_86, AP_LOCK)
|
|
insn(XCHG, 4, OpCls( MS, R, NONE ), 0, 0, 0, 0x86, 0x00, P_86, AP_LOCK)
|
|
ins (XLAT, xlat, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xD7, 0x00, P_86, 0)
|
|
insn(XLAT, 1, OpCls( M08, NONE, NONE ), 0, 0, no_RM, 0xD7, 0x00, P_86, 0)
|
|
ins (XLATB, xlatb, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0xD7, 0x00, P_86, 0)
|
|
insn(XLATB, 1, OpCls( M08, NONE, NONE ), 0, 0, no_RM, 0xD7, 0x00, P_86, 0)
|
|
|
|
ins (SETA, seta, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x97, 0x00, P_386, 0)
|
|
ins (SETAE, setae, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x93, 0x00, P_386, 0)
|
|
ins (SETB, setb, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x92, 0x00, P_386, 0)
|
|
ins (SETBE, setbe, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x96, 0x00, P_386, 0)
|
|
ins (SETC, setc, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x92, 0x00, P_386, 0)
|
|
ins (SETE, sete, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x94, 0x00, P_386, 0)
|
|
ins (SETG, setg, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9F, 0x00, P_386, 0)
|
|
ins (SETGE, setge, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9D, 0x00, P_386, 0)
|
|
ins (SETL, setl, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9C, 0x00, P_386, 0)
|
|
ins (SETLE, setle, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9E, 0x00, P_386, 0)
|
|
ins (SETNA, setna, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x96, 0x00, P_386, 0)
|
|
ins (SETNAE,setnae, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x92, 0x00, P_386, 0)
|
|
ins (SETNB, setnb, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x93, 0x00, P_386, 0)
|
|
ins (SETNBE,setnbe, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x97, 0x00, P_386, 0)
|
|
ins (SETNC, setnc, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x93, 0x00, P_386, 0)
|
|
ins (SETNE, setne, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x95, 0x00, P_386, 0)
|
|
ins (SETNG, setng, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9E, 0x00, P_386, 0)
|
|
ins (SETNGE,setnge, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9C, 0x00, P_386, 0)
|
|
ins (SETNL, setnl, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9D, 0x00, P_386, 0)
|
|
ins (SETNLE,setnle, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9F, 0x00, P_386, 0)
|
|
ins (SETNO, setno, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x91, 0x00, P_386, 0)
|
|
ins (SETNP, setnp, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9B, 0x00, P_386, 0)
|
|
ins (SETNS, setns, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x99, 0x00, P_386, 0)
|
|
ins (SETNZ, setnz, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x95, 0x00, P_386, 0)
|
|
ins (SETO, seto, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x90, 0x00, P_386, 0)
|
|
ins (SETP, setp, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9A, 0x00, P_386, 0)
|
|
ins (SETPE, setpe, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9A, 0x00, P_386, 0)
|
|
ins (SETPO, setpo, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x9B, 0x00, P_386, 0)
|
|
ins (SETS, sets, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x98, 0x00, P_386, 0)
|
|
ins (SETZ, setz, OpCls( R8_M08, NONE, NONE ), F_0F, 0, no_WDS, 0x94, 0x00, P_386, 0)
|
|
|
|
#define cmov( cond, code, condlc ) \
|
|
ins (CMOV##cond, cmov##condlc, OpCls( RGT8, R_MS, NONE ), F_0F, 1, no_WDS, 0x40+code,0x00, P_686, 0)
|
|
|
|
cmov( A, 0x7, a )
|
|
cmov( AE, 0x3, ae )
|
|
cmov( B, 0x2, b )
|
|
cmov( BE, 0x6, be )
|
|
cmov( C, 0x2, c )
|
|
cmov( E, 0x4, e )
|
|
cmov( G, 0xf, g )
|
|
cmov( GE, 0xd, ge )
|
|
cmov( L, 0xc, l )
|
|
cmov( LE, 0xe, le )
|
|
cmov( NA, 0x6, na )
|
|
cmov( NAE, 0x2, nae )
|
|
cmov( NB, 0x3, nb )
|
|
cmov( NBE, 0x7, nbe )
|
|
cmov( NC, 0x3, nc )
|
|
cmov( NE, 0x5, ne )
|
|
cmov( NG, 0xe, ng )
|
|
cmov( NGE, 0xc, nge )
|
|
cmov( NL, 0xd, nl )
|
|
cmov( NLE, 0xf, nle )
|
|
cmov( NO, 0x1, no )
|
|
cmov( NP, 0xb, np )
|
|
cmov( NS, 0x9, ns )
|
|
cmov( NZ, 0x5, nz )
|
|
cmov( O, 0x0, o )
|
|
cmov( P, 0xa, p )
|
|
cmov( PE, 0xa, pe )
|
|
cmov( PO, 0xb, po )
|
|
cmov( S, 0x8, s )
|
|
cmov( Z, 0x4, z )
|
|
|
|
#undef cmov
|
|
|
|
/* FPU opcodes */
|
|
|
|
ins (FCMOVB, fcmovb, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDA, 0xC0, P_686, 0)
|
|
ins (FCMOVBE, fcmovbe, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDA, 0xD0, P_686, 0)
|
|
ins (FCMOVE, fcmove, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDA, 0xC8, P_686, 0)
|
|
ins (FCMOVNB, fcmovnb, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xC0, P_686, 0)
|
|
ins (FCMOVNBE, fcmovnbe, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xD0, P_686, 0)
|
|
ins (FCMOVNE, fcmovne, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xC8, P_686, 0)
|
|
ins (FCMOVNU, fcmovnu, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xD8, P_686, 0)
|
|
ins (FCMOVU, fcmovu, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDA, 0xD8, P_686, 0)
|
|
|
|
ins (FCOM, fcom, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xD8, 0xD0, P_87, 0)
|
|
insn(FCOM, 1, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x10, P_87, 0)
|
|
insn(FCOM, 2, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x10, P_87, 0)
|
|
insn(FCOM, 3, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD8, 0xD1, P_87, 0)
|
|
ins (FCOMP, fcomp, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xD8, 0xD8, P_87, 0)
|
|
insn(FCOMP, 1, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x18, P_87, 0)
|
|
insn(FCOMP, 2, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x18, P_87, 0)
|
|
insn(FCOMP, 3, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD8, 0xD9, P_87, 0)
|
|
ins (FCOMPP, fcompp, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xD9, P_87, 0)
|
|
|
|
ins (FUCOM, fucom, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDD, 0xE0, P_387, 0)
|
|
insn(FUCOM, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDD, 0xE1, P_387, 0)
|
|
ins (FUCOMP, fucomp, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDD, 0xE8, P_387, 0)
|
|
insn(FUCOMP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDD, 0xE9, P_387, 0)
|
|
ins (FUCOMPP, fucompp, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDA, 0xE9, P_387, 0)
|
|
ins (FCOMI, fcomi, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xF0, P_686, 0)
|
|
ins (FCOMIP, fcomip, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDF, 0xF0, P_686, 0)
|
|
ins (FUCOMI, fucomi, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDB, 0xE8, P_686, 0)
|
|
ins (FUCOMIP, fucomip, OpCls( ST, STI, NONE ), 0, 0, 0, 0xDF, 0xE8, P_686, 0)
|
|
|
|
/* v2.11: first 2 variants of FADD, FMUL, FDIV, FDIVP, FSUP and FSUBR exchanged */
|
|
ins (FADD, fadd, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xC0, P_87, 0)
|
|
insn(FADD, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xC0, P_87, 0)
|
|
insn(FADD, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x00, P_87, 0)
|
|
insn(FADD, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x00, P_87, 0)
|
|
insn(FADD, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xC1, P_87, 0)
|
|
ins (FADDP, faddp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xC0, P_87, 0)
|
|
insn(FADDP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xC1, P_87, 0)
|
|
ins (FMUL, fmul, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xC8, P_87, 0)
|
|
insn(FMUL, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xC8, P_87, 0)
|
|
insn(FMUL, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x08, P_87, 0)
|
|
insn(FMUL, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x08, P_87, 0)
|
|
insn(FMUL, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xC9, P_87, 0)
|
|
ins (FMULP, fmulp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xC8, P_87, 0)
|
|
insn(FMULP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xC9, P_87, 0)
|
|
|
|
ins (FDIV, fdiv, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xF0, P_87, 0)
|
|
insn(FDIV, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xF8, P_87, 0)
|
|
insn(FDIV, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x30, P_87, 0)
|
|
insn(FDIV, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x30, P_87, 0)
|
|
insn(FDIV, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xF9, P_87, 0)
|
|
ins (FDIVP, fdivp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xF8, P_87, 0)
|
|
insn(FDIVP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xF9, P_87, 0)
|
|
ins (FDIVR, fdivr, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xF8, P_87, 0)
|
|
insn(FDIVR, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xF0, P_87, 0)
|
|
insn(FDIVR, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x38, P_87, 0)
|
|
insn(FDIVR, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x38, P_87, 0)
|
|
insn(FDIVR, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xF1, P_87, 0)
|
|
ins (FDIVRP, fdivrp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xF0, P_87, 0)
|
|
insn(FDIVRP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xF1, P_87, 0)
|
|
ins (FSUB, fsub, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xE0, P_87, 0)
|
|
insn(FSUB, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xE8, P_87, 0)
|
|
insn(FSUB, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x20, P_87, 0)
|
|
insn(FSUB, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x20, P_87, 0)
|
|
insn(FSUB, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xE9, P_87, 0)
|
|
ins (FSUBP, fsubp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xE8, P_87, 0)
|
|
insn(FSUBP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xE9, P_87, 0)
|
|
ins (FSUBR, fsubr, OpCls( ST, STI, NONE ), 0, 0, 0, 0xD8, 0xE8, P_87, 0)
|
|
insn(FSUBR, 1, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDC, 0xE0, P_87, 0)
|
|
insn(FSUBR, 2, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD8, 0x28, P_87, 0)
|
|
insn(FSUBR, 3, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDC, 0x28, P_87, 0)
|
|
insn(FSUBR, 4, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xE1, P_87, 0)
|
|
ins (FSUBRP, fsubrp, OpCls( STI, ST, NONE ), 0, 0, 0, 0xDE, 0xE0, P_87, 0)
|
|
insn(FSUBRP, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDE, 0xE1, P_87, 0)
|
|
|
|
ins (FIADD, fiadd, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x00, P_87, 0)
|
|
insn(FIADD, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x00, P_87, 0)
|
|
ins (FICOM, ficom, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x10, P_87, 0)
|
|
insn(FICOM, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x10, P_87, 0)
|
|
ins (FICOMP, ficomp, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x18, P_87, 0)
|
|
insn(FICOMP, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x18, P_87, 0)
|
|
ins (FIDIV, fidiv, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x30, P_87, 0)
|
|
insn(FIDIV, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x30, P_87, 0)
|
|
ins (FIDIVR, fidivr, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x38, P_87, 0)
|
|
insn(FIDIVR, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x38, P_87, 0)
|
|
ins (FIMUL, fimul, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x08, P_87, 0)
|
|
insn(FIMUL, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x08, P_87, 0)
|
|
ins (FISUB, fisub, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x20, P_87, 0)
|
|
insn(FISUB, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x20, P_87, 0)
|
|
ins (FISUBR, fisubr, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDA, 0x28, P_87, 0)
|
|
insn(FISUBR, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDE, 0x28, P_87, 0)
|
|
|
|
ins (FILD, fild, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDB, 0x00, P_87, 0)
|
|
insn(FILD, 1, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDF, 0x28, P_87, 0)
|
|
insn(FILD, 2, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDF, 0x00, P_87, 0)
|
|
ins (FISTP, fistp, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDB, 0x18, P_87, 0)
|
|
insn(FISTP, 1, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDF, 0x38, P_87, 0)
|
|
insn(FISTP, 2, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDF, 0x18, P_87, 0)
|
|
ins (FIST, fist, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xDB, 0x10, P_87, 0)
|
|
insn(FIST, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDF, 0x10, P_87, 0)
|
|
|
|
ins (FLD, fld, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xD9, 0xC0, P_87, 0)
|
|
insn(FLD, 1, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD9, 0x00, P_87, 0)
|
|
insn(FLD, 2, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDD, 0x00, P_87, 0)
|
|
insn(FLD, 3, OpCls( M80, NONE, NONE ), 0, 0, 0, 0xDB, 0x28, P_87, 0)
|
|
ins (FSTP, fstp, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDD, 0xD8, P_87, 0)
|
|
insn(FSTP, 1, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD9, 0x18, P_87, 0)
|
|
insn(FSTP, 2, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDD, 0x18, P_87, 0)
|
|
insn(FSTP, 3, OpCls( M80, NONE, NONE ), 0, 0, 0, 0xDB, 0x38, P_87, 0)
|
|
ins (FST, fst, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDD, 0xD0, P_87, 0)
|
|
insn(FST, 1, OpCls( M32, NONE, NONE ), 0, 0, 0, 0xD9, 0x10, P_87, 0)
|
|
insn(FST, 2, OpCls( M64, NONE, NONE ), 0, 0, 0, 0xDD, 0x10, P_87, 0)
|
|
|
|
ins (FLDENV, fldenv, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xD9, 0x20, P_87, 0)
|
|
ins (FLDENVD, fldenvd, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xD9, 0x20, P_387, 0)
|
|
ins (FLDENVW, fldenvw, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xD9, 0x20, P_87, 0)
|
|
ins (FNSAVE, fnsave, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xDD, 0x30, P_87, AP_NO_FWAIT)
|
|
ins (FNSAVED, fnsaved, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xDD, 0x30, P_387, AP_NO_FWAIT)
|
|
ins (FNSAVEW, fnsavew, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xDD, 0x30, P_87, AP_NO_FWAIT)
|
|
ins (FNSTENV, fnstenv, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xD9, 0x30, P_87, AP_NO_FWAIT)
|
|
ins (FNSTENVD, fnstenvd, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xD9, 0x30, P_387, AP_NO_FWAIT)
|
|
ins (FNSTENVW, fnstenvw, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xD9, 0x30, P_87, AP_NO_FWAIT)
|
|
ins (FRSTOR, frstor, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xDD, 0x20, P_87, 0)
|
|
ins (FRSTORD, frstord, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xDD, 0x20, P_387, 0)
|
|
ins (FRSTORW, frstorw, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xDD, 0x20, P_87, 0)
|
|
ins (FSAVE, fsave, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xDD, 0x30, P_87, AP_FWAIT)
|
|
ins (FSAVED, fsaved, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xDD, 0x30, P_387, AP_FWAIT)
|
|
ins (FSAVEW, fsavew, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xDD, 0x30, P_87, AP_FWAIT)
|
|
ins (FSTENV, fstenv, OpCls( M_ANY, NONE, NONE ), 0, 0, 0, 0xD9, 0x30, P_87, AP_FWAIT)
|
|
ins (FSTENVD, fstenvd, OpCls( M_ANY, NONE, NONE ), F_32, 0, 0, 0xD9, 0x30, P_387, AP_FWAIT)
|
|
ins (FSTENVW, fstenvw, OpCls( M_ANY, NONE, NONE ), F_16, 0, 0, 0xD9, 0x30, P_87, AP_FWAIT)
|
|
|
|
ins (FLDCW, fldcw, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xD9, 0x28, P_87, 0)
|
|
ins (FNSTCW, fnstcw, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xD9, 0x38, P_87, AP_NO_FWAIT)
|
|
ins (FNSTSW, fnstsw, OpCls( AX, NONE, NONE ), 0, 0, no_WDS, 0xDF, 0xE0, P_287, AP_NO_FWAIT)
|
|
insn(FNSTSW, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDD, 0x38, P_87, AP_NO_FWAIT)
|
|
ins (FSTCW, fstcw, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xD9, 0x38, P_87, AP_FWAIT)
|
|
ins (FSTSW, fstsw, OpCls( AX, NONE, NONE ), 0, 0, no_WDS, 0xDF, 0xE0, P_287, AP_FWAIT)
|
|
insn(FSTSW, 1, OpCls( M16, NONE, NONE ), 0, 0, 0, 0xDD, 0x38, P_87, AP_FWAIT)
|
|
|
|
ins (FCOS, fcos, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFF, P_387, 0)
|
|
ins (FPATAN, fpatan, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF3, P_87, 0)
|
|
ins (FPTAN, fptan, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF2, P_87, 0)
|
|
ins (FSIN, fsin, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFE, P_387, 0)
|
|
ins (FSINCOS, fsincos, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFB, P_387, 0)
|
|
|
|
ins (FINIT, finit, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE3, P_87, AP_FWAIT)
|
|
ins (FNINIT, fninit, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE3, P_87, AP_NO_FWAIT)
|
|
ins (FDISI, fdisi, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE1, P_87, AP_FWAIT)
|
|
ins (FNDISI, fndisi, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE1, P_87, AP_NO_FWAIT)
|
|
ins (FENI, feni, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE0, P_87, AP_FWAIT)
|
|
ins (FNENI, fneni, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE0, P_87, AP_NO_FWAIT)
|
|
ins (FCLEX, fclex, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE2, P_87, AP_FWAIT)
|
|
ins (FNCLEX, fnclex, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE2, P_87, AP_NO_FWAIT)
|
|
|
|
ins (F2XM1, f2xm1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF0, P_87, 0)
|
|
ins (FABS, fabs, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE1, P_87, 0)
|
|
ins (FBLD, fbld, OpCls( M80, NONE, NONE ), 0, 0, 0, 0xDF, 0x20, P_87, 0)
|
|
ins (FBSTP, fbstp, OpCls( M80, NONE, NONE ), 0, 0, 0, 0xDF, 0x30, P_87, 0)
|
|
ins (FCHS, fchs, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE0, P_87, 0)
|
|
ins (FLD1, fld1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE8, P_87, 0)
|
|
ins (FLDL2E, fldl2e, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xEA, P_87, 0)
|
|
ins (FLDL2T, fldl2t, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE9, P_87, 0)
|
|
ins (FLDLG2, fldlg2, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xEC, P_87, 0)
|
|
ins (FLDLN2, fldln2, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xED, P_87, 0)
|
|
ins (FLDPI, fldpi, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xEB, P_87, 0)
|
|
ins (FLDZ, fldz, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xEE, P_87, 0)
|
|
ins (FDECSTP, fdecstp, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF6, P_87, 0)
|
|
ins (FINCSTP, fincstp, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF7, P_87, 0)
|
|
ins (FFREE, ffree, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDD, 0xC0, P_87, 0)
|
|
/* FFREEP is undocumented (same as FFREE + POP) */
|
|
ins (FFREEP, ffreep, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xDF, 0xC0, P_87, 0)
|
|
ins (FNOP, fnop, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xD0, P_87, 0)
|
|
ins (FPREM, fprem, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF8, P_87, 0)
|
|
ins (FPREM1, fprem1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF5, P_387, 0)
|
|
ins (FRNDINT, frndint, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFC, P_87, 0)
|
|
ins (FSCALE, fscale, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFD, P_87, 0)
|
|
ins (FSETPM, fsetpm, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xDB, 0xE4, P_287, 0)
|
|
ins (FSQRT, fsqrt, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xFA, P_87, 0)
|
|
ins (FTST, ftst, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE4, P_87, 0)
|
|
ins (FWAIT, fwait, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9B, 0x00, P_87, 0)
|
|
ins (FXAM, fxam, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xE5, P_87, 0)
|
|
ins (FXCH, fxch, OpCls( STI, NONE, NONE ), 0, 0, 0, 0xD9, 0xC8, P_87, 0)
|
|
insn(FXCH, 1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xC9, P_87, 0)
|
|
ins (FXRSTOR, fxrstor, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x08, P_686|P_SSE1,0)
|
|
ins (FXSAVE, fxsave, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x00, P_686|P_SSE1,0)
|
|
ins (FXTRACT, fxtract, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF4, P_87, 0)
|
|
ins (FYL2X, fyl2x, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF1, P_87, 0)
|
|
ins (FYL2XP1, fyl2xp1, OpCls( NONE, NONE, NONE ), 0, 0, 0, 0xD9, 0xF9, P_87, 0)
|
|
|
|
/* MMX/SSE related opcodes (except SSE instructions CMPSD and MOVSD) */
|
|
|
|
ins (EMMS, emms, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x77, 0x00, P_586|P_MMX, 0)
|
|
ins (CLFLUSH, clflush, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x38, P_686|P_SSE2,0)
|
|
ins (LDMXCSR, ldmxcsr, OpCls( M32, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x10, P_686|P_SSE1,0)
|
|
ins (STMXCSR, stmxcsr, OpCls( M32, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x18, P_686|P_SSE1,0)
|
|
ins (LFENCE, lfence, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0xE8, P_686|P_SSE2,0)
|
|
ins (MFENCE, mfence, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0xF0, P_686|P_SSE2,0)
|
|
ins (SFENCE, sfence, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0xF8, P_686|P_SSE1,0)
|
|
ins (PREFETCHNTA,prefetchnta, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x18, 0x00, P_686|P_SSE1,0)
|
|
ins (PREFETCHT0, prefetcht0, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x18, 0x08, P_686|P_SSE1,0)
|
|
ins (PREFETCHT1, prefetcht1, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x18, 0x10, P_686|P_SSE1,0)
|
|
ins (PREFETCHT2, prefetcht2, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x18, 0x18, P_686|P_SSE1,0)
|
|
ins (PAUSE, pause, OpCls( NONE, NONE, NONE ), F_F3, 0, no_RM, 0x90, 0x00, P_686|P_SSE2,0)
|
|
|
|
/* define ADDPD, ADDPS, ADDSD, ADDSS, DIVPD, DIVPS, DIVSD, DIVSS, ... */
|
|
#define arfl( prefix, prefixlc, opc ) \
|
|
ins (prefix ## PD, prefixlc ## pd, OpCls( XMM, XMM_M128,NONE ), F_660F, 1, no_WDS, opc, 0x00, P_686|P_SSE2,0) \
|
|
ins (prefix ## PS, prefixlc ## ps, OpCls( XMM, XMM_M128,NONE ), F_0F, 1, no_WDS, opc, 0x00, P_686|P_SSE1,0) \
|
|
ins (prefix ## SD, prefixlc ## sd, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, opc, 0x00, P_686|P_SSE2,0) \
|
|
ins (prefix ## SS, prefixlc ## ss, OpCls( XMM, XMM_M32, NONE ), F_F30F, 1, no_WDS, opc, 0x00, P_686|P_SSE1,0)
|
|
|
|
arfl( ADD, add, 0x58 )
|
|
arfl( DIV, div, 0x5E )
|
|
arfl( MAX, max, 0x5F )
|
|
arfl( MIN, min, 0x5D )
|
|
arfl( MUL, mul, 0x59 )
|
|
arfl( SQRT, sqrt, 0x51 )
|
|
arfl( SUB, sub, 0x5C )
|
|
|
|
/* CMP can't be added because CMPSD is special */
|
|
ins (CMPPD, cmppd, OpCls( XMM, XMM_M128, I8_U ), F_660F, 1, no_WDS, 0xC2, 0x00, P_686|P_SSE2,0)
|
|
ins (CMPPS, cmpps, OpCls( XMM, XMM_M128, I8_U ), F_0F, 1, no_WDS, 0xC2, 0x00, P_686|P_SSE1,0)
|
|
//ins (CMPSD, cmpsd, OpCls( XMM, XMM_M64, I8_U ), F_F20F, 1, no_WDS, 0xC2, 0x00, P_686|P_SSE2,0)
|
|
ins (CMPSS, cmpss, OpCls( XMM, XMM_M32, I8_U ), F_F30F, 1, no_WDS, 0xC2, 0x00, P_686|P_SSE1,0)
|
|
|
|
#undef arfl
|
|
|
|
#define cmpxx( suffix, suffixlc, byte1, memop, ssever ) \
|
|
ins (CMP ## EQ ## suffix, cmp ## eq ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## LT ## suffix, cmp ## lt ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## LE ## suffix, cmp ## le ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## UNORD ## suffix, cmp ## unord ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## NEQ ## suffix, cmp ## neq ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## NLT ## suffix, cmp ## nlt ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## NLE ## suffix, cmp ## nle ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 ) \
|
|
ins (CMP ## ORD ## suffix, cmp ## ord ## suffixlc, OpCls( XMM, XMM_ ## memop, HID ),byte1, 1, no_WDS, 0xC2, 0x00, P_686|ssever, 0 )
|
|
|
|
cmpxx( PD, pd, F_660F, M128, P_SSE2 )
|
|
cmpxx( PS, ps, F_0F, M128, P_SSE1 )
|
|
cmpxx( SD, sd, F_F20F, M64, P_SSE2 )
|
|
cmpxx( SS, ss, F_F30F, M32, P_SSE1 )
|
|
|
|
#undef cmpxx
|
|
|
|
ins (ANDNPD, andnpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x55, 0x00, P_686|P_SSE2,0)
|
|
ins (ANDNPS, andnps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x55, 0x00, P_686|P_SSE1,0)
|
|
ins (ANDPD, andpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x54, 0x00, P_686|P_SSE2,0)
|
|
ins (ANDPS, andps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x54, 0x00, P_686|P_SSE1,0)
|
|
ins (ORPD, orpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x56, 0x00, P_686|P_SSE2,0)
|
|
ins (ORPS, orps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x56, 0x00, P_686|P_SSE1,0)
|
|
ins (COMISD, comisd, OpCls( XMM, XMM_M64, NONE ), F_660F, 1, no_WDS, 0x2F, 0x00, P_686|P_SSE2,0)
|
|
ins (COMISS, comiss, OpCls( XMM, XMM_M32, NONE ), F_0F, 1, no_WDS, 0x2F, 0x00, P_686|P_SSE1,0)
|
|
ins (XORPD, xorpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x57, 0x00, P_686|P_SSE2,0)
|
|
ins (XORPS, xorps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x57, 0x00, P_686|P_SSE1,0)
|
|
|
|
ins (CVTPD2PI, cvtpd2pi, OpCls( MMX, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x2D, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTPS2PI, cvtps2pi, OpCls( MMX, XMM_M64, NONE ), F_0F, 1, no_WDS, 0x2D, 0x00, P_686|P_SSE1,0)
|
|
ins (CVTSD2SI, cvtsd2si, OpCls( RGT16, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x2D, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTSS2SI, cvtss2si, OpCls( RGT16, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x2D, 0x00, P_686|P_SSE1,0)
|
|
ins (CVTPI2PD, cvtpi2pd, OpCls( XMM, MMX_M64, NONE ), F_660F, 1, no_WDS, 0x2A, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTPI2PS, cvtpi2ps, OpCls( XMM, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x2A, 0x00, P_686|P_SSE1,0)
|
|
ins (CVTSI2SD, cvtsi2sd, OpCls( XMM, RMGT16, NONE ), F_F20F, 1, no_WDS, 0x2A, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTSI2SS, cvtsi2ss, OpCls( XMM, RMGT16, NONE ), F_F30F, 1, no_WDS, 0x2A, 0x00, P_686|P_SSE1,0)
|
|
ins (CVTTPD2PI, cvttpd2pi, OpCls( MMX, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x2C, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTTPS2PI, cvttps2pi, OpCls( MMX, XMM_M64, NONE ), F_0F, 1, no_WDS, 0x2C, 0x00, P_686|P_SSE1,0)
|
|
ins (CVTTSD2SI, cvttsd2si, OpCls( RGT16, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x2C, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTTSS2SI, cvttss2si, OpCls( RGT16, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x2C, 0x00, P_686|P_SSE1,0)
|
|
|
|
ins (CVTDQ2PS, cvtdq2ps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x5B, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTPS2DQ, cvtps2dq, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x5B, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTTPS2DQ, cvttps2dq, OpCls( XMM, XMM_M128, NONE ), F_F30F, 1, no_WDS, 0x5B, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (CVTPD2DQ, cvtpd2dq, OpCls( XMM, XMM_M128, NONE ), F_F20F, 1, no_WDS, 0xE6, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTDQ2PD, cvtdq2pd, OpCls( XMM, XMM_M64, NONE ), F_F30F, 1, no_WDS, 0xE6, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTTPD2DQ, cvttpd2dq, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE6, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (CVTPD2PS, cvtpd2ps, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x5A, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTPS2PD, cvtps2pd, OpCls( XMM, XMM_M64, NONE ), F_0F, 1, no_WDS, 0x5A, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTSD2SS, cvtsd2ss, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x5A, 0x00, P_686|P_SSE2,0)
|
|
ins (CVTSS2SD, cvtss2sd, OpCls( XMM, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x5A, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (MASKMOVDQU, maskmovdqu, OpCls( XMM, XMM, NONE ), F_660F, 1, no_WDS, 0xF7, 0x00, P_686|P_SSE2,0)
|
|
ins (MASKMOVQ, maskmovq, OpCls( MMX, MMX, NONE ), F_0F, 1, no_WDS, 0xF7, 0x00, P_686|P_SSE1,0)
|
|
|
|
/* Masm (ML64) uses MOVD if a 64-bit register is src/dst. Intel docs prefer MOVQ */
|
|
ins (MOVD, movd, OpCls( MMX, RMGT16, NONE ), F_0F, 1, no_WDS, 0x6E, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVD, 1, OpCls( XMM, RMGT16, NONE ), F_660F, 1, no_WDS, 0x6E, 0x00, P_686|P_SSE2,0)
|
|
#if INTELMOVQ
|
|
insn(MOVD, 2, OpCls( R32_M32, MMX, NONE ), F_0F, 0, no_WDS, 0x7E, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVD, 3, OpCls( R32_M32, XMM, NONE ), F_660F, 0, no_WDS, 0x7E, 0x00, P_686|P_SSE2,0)
|
|
#else
|
|
insn(MOVD, 2, OpCls( RMGT16, MMX, NONE ), F_0F, 0, no_WDS, 0x7E, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVD, 3, OpCls( RMGT16, XMM, NONE ), F_660F, 0, no_WDS, 0x7E, 0x00, P_686|P_SSE2,0)
|
|
#endif
|
|
ins (MOVQ, movq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x6F, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVQ, 1, OpCls( XMM, XMM_M64, NONE ), F_F30F, 1, no_WDS, 0x7E, 0x00, P_686|P_SSE2,0)
|
|
#if INTELMOVQ
|
|
insn(MOVQ, 2, OpCls( R64_M64, MMX, NONE ), F_0F, 0, no_WDS, 0x7F, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVQ, 3, OpCls( R64_M64, XMM, NONE ), F_660F, 0, no_WDS, 0xD6, 0x00, P_686|P_SSE2,0)
|
|
#else
|
|
insn(MOVQ, 2, OpCls( M64, MMX, NONE ), F_0F, 0, no_WDS, 0x7F, 0x00, P_586|P_MMX, 0)
|
|
insn(MOVQ, 3, OpCls( M64, XMM, NONE ), F_660F, 0, no_WDS, 0xD6, 0x00, P_686|P_SSE2,0)
|
|
#endif
|
|
|
|
ins (MOVAPD, movapd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x28, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVAPD, 1, OpCls( M128, XMM, NONE ), F_660F, 0, no_WDS, 0x29, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVAPS, movaps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x28, 0x00, P_686|P_SSE1,0)
|
|
insn(MOVAPS, 1, OpCls( M128, XMM, NONE ), F_0F, 0, no_WDS, 0x29, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVDQA, movdqa, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x6F, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVDQA, 1, OpCls( M128, XMM, NONE ), F_660F, 0, no_WDS, 0x7F, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVDQU, movdqu, OpCls( XMM, XMM_M128, NONE ), F_F30F, 1, no_WDS, 0x6F, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVDQU, 1, OpCls( M128, XMM, NONE ), F_F30F, 0, no_WDS, 0x7F, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVUPD, movupd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x10, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVUPD, 1, OpCls( M128, XMM, NONE ), F_660F, 0, no_WDS, 0x11, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVUPS, movups, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x10, 0x00, P_686|P_SSE1,0)
|
|
insn(MOVUPS, 1, OpCls( M128, XMM, NONE ), F_0F, 0, no_WDS, 0x11, 0x00, P_686|P_SSE1,0)
|
|
|
|
ins (MOVHPD, movhpd, OpCls( XMM, M64, NONE ), F_660F, 1, no_WDS, 0x16, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVHPD, 1, OpCls( M64, XMM, NONE ), F_660F, 0, no_WDS, 0x17, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVHPS, movhps, OpCls( XMM, M64, NONE ), F_0F, 1, no_WDS, 0x16, 0x00, P_686|P_SSE1,0)
|
|
insn(MOVHPS, 1, OpCls( M64, XMM, NONE ), F_0F, 0, no_WDS, 0x17, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVLPD, movlpd, OpCls( XMM, M64, NONE ), F_660F, 1, no_WDS, 0x12, 0x00, P_686|P_SSE2,0)
|
|
insn(MOVLPD, 1, OpCls( M64, XMM, NONE ), F_660F, 0, no_WDS, 0x13, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVLPS, movlps, OpCls( XMM, M64, NONE ), F_0F, 1, no_WDS, 0x12, 0x00, P_686|P_SSE1,0)
|
|
insn(MOVLPS, 1, OpCls( M64, XMM, NONE ), F_0F, 0, no_WDS, 0x13, 0x00, P_686|P_SSE1,0)
|
|
|
|
ins (MOVHLPS, movhlps, OpCls( XMM, XMM, NONE ), F_0F, 1, no_WDS, 0x12, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVLHPS, movlhps, OpCls( XMM, XMM, NONE ), F_0F, 1, no_WDS, 0x16, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVDQ2Q, movdq2q, OpCls( MMX, XMM, NONE ), F_F20F, 1, no_WDS, 0xD6, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVQ2DQ, movq2dq, OpCls( XMM, MMX, NONE ), F_F30F, 1, no_WDS, 0xD6, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (MOVMSKPD, movmskpd, OpCls( RGT16, XMM, NONE ), F_660F, 1, no_WDS, 0x50, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVMSKPS, movmskps, OpCls( RGT16, XMM, NONE ), F_0F, 1, no_WDS, 0x50, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVNTDQ, movntdq, OpCls( M128, XMM, NONE ), F_660F, 0, no_WDS, 0xE7, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVNTI, movnti, OpCls( MGT16, RGT16, NONE ), F_0F, 0, no_WDS, 0xC3, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVNTPD, movntpd, OpCls( M128, XMM, NONE ), F_660F, 0, no_WDS, 0x2B, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVNTPS, movntps, OpCls( M128, XMM, NONE ), F_0F, 0, no_WDS, 0x2B, 0x00, P_686|P_SSE1,0)
|
|
ins (MOVNTQ, movntq, OpCls( M64, MMX, NONE ), F_0F, 0, no_WDS, 0xE7, 0x00, P_686|P_SSE1,0)
|
|
//ins (MOVSD, movsd, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x10, 0x00, P_686|P_SSE2,0)
|
|
//insn(MOVSD, 1 OpCls( M64, XMM, NONE ), F_F20F, 0, no_WDS, 0x11, 0x00, P_686|P_SSE2,0)
|
|
ins (MOVSS, movss, OpCls( XMM, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x10, 0x00, P_686|P_SSE1,0)
|
|
insn(MOVSS, 1, OpCls( M32, XMM, NONE ), F_F30F, 0, no_WDS, 0x11, 0x00, P_686|P_SSE1,0)
|
|
|
|
ins (PACKSSDW, packssdw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x6B, 0x00, P_586|P_MMX, 0)
|
|
insn(PACKSSDW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x6B, 0x00, P_686|P_SSE2,0)
|
|
ins (PACKSSWB, packsswb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x63, 0x00, P_586|P_MMX, 0)
|
|
insn(PACKSSWB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x63, 0x00, P_686|P_SSE2,0)
|
|
ins (PACKUSWB, packuswb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x67, 0x00, P_586|P_MMX, 0)
|
|
insn(PACKUSWB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x67, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDB, paddb, OpCls( MMX, MMX_M64_08, NONE ), F_0F, 1, no_WDS, 0xFC, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDB, 1, OpCls( XMM, XMM_M128_08,NONE ), F_660F, 1, no_WDS, 0xFC, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDW, paddw, OpCls( MMX, MMX_M64_16, NONE ), F_0F, 1, no_WDS, 0xFD, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDW, 1, OpCls( XMM, XMM_M128_16,NONE ), F_660F, 1, no_WDS, 0xFD, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDD, paddd, OpCls( MMX, MMX_M64_32, NONE ), F_0F, 1, no_WDS, 0xFE, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDD, 1, OpCls( XMM, XMM_M128_32,NONE ), F_660F, 1, no_WDS, 0xFE, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDQ, paddq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD4, 0x00, P_686|P_SSE2,0)
|
|
insn(PADDQ, 1, OpCls( XMM, XMM_M128_64,NONE ), F_660F, 1, no_WDS, 0xD4, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDSB, paddsb, OpCls( MMX, MMX_M64_08, NONE ), F_0F, 1, no_WDS, 0xEC, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDSB, 1, OpCls( XMM, XMM_M128_08,NONE ), F_660F, 1, no_WDS, 0xEC, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDSW, paddsw, OpCls( MMX, MMX_M64_16, NONE ), F_0F, 1, no_WDS, 0xED, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDSW, 1, OpCls( XMM, XMM_M128_16,NONE ), F_660F, 1, no_WDS, 0xED, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDUSB, paddusb, OpCls( MMX, MMX_M64_08, NONE ), F_0F, 1, no_WDS, 0xDC, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDUSB, 1, OpCls( XMM, XMM_M128_08,NONE ), F_660F, 1, no_WDS, 0xDC, 0x00, P_686|P_SSE2,0)
|
|
ins (PADDUSW, paddusw, OpCls( MMX, MMX_M64_16, NONE ), F_0F, 1, no_WDS, 0xDD, 0x00, P_586|P_MMX, 0)
|
|
insn(PADDUSW, 1, OpCls( XMM, XMM_M128_16,NONE ), F_660F, 1, no_WDS, 0xDD, 0x00, P_686|P_SSE2,0)
|
|
ins (PAND, pand, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xDB, 0x00, P_586|P_MMX, 0)
|
|
insn(PAND, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xDB, 0x00, P_686|P_SSE2,0)
|
|
ins (PANDN, pandn, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xDF, 0x00, P_586|P_MMX, 0)
|
|
insn(PANDN, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xDF, 0x00, P_686|P_SSE2,0)
|
|
ins (PAVGB, pavgb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE0, 0x00, P_686|P_SSE1,0)
|
|
insn(PAVGB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE0, 0x00, P_686|P_SSE2,0)
|
|
ins (PAVGW, pavgw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE3, 0x00, P_686|P_SSE1,0)
|
|
insn(PAVGW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE3, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPEQB, pcmpeqb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x74, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPEQB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x74, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPEQW, pcmpeqw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x75, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPEQW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x75, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPEQD, pcmpeqd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x76, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPEQD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x76, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPGTB, pcmpgtb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x64, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPGTB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x64, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPGTW, pcmpgtw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x65, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPGTW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x65, 0x00, P_686|P_SSE2,0)
|
|
ins (PCMPGTD, pcmpgtd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x66, 0x00, P_586|P_MMX, 0)
|
|
insn(PCMPGTD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x66, 0x00, P_686|P_SSE2,0)
|
|
ins (PEXTRW, pextrw, OpCls( RGT16, MMX, I8_U ), F_0F, 1, no_WDS, 0xC5, 0x00, P_686|P_SSE1,0)
|
|
insn(PEXTRW, 1, OpCls( RGT16, XMM, I8_U ), F_660F, 1, no_WDS, 0xC5, 0x00, P_686|P_SSE1,0)
|
|
#if SSE4SUPP /* SSE 4.1 */
|
|
insn(PEXTRW, 2, OpCls( M16, XMM, I8_U ), F_660F3A, 0,no_WDS, 0x15, 0x00, P_686|P_SSE4,0)
|
|
#endif
|
|
/* v2.06: define it like PINSRB/PINSRD */
|
|
//ins (PINSRW, pinsrw, OpCls( MMX, R32, I8_U ), F_0F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
//insn(PINSRW, 1, OpCls( MMX, M16, I8_U ), F_0F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
//insn(PINSRW, 2, OpCls( XMM, R32, I8_U ), F_660F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
//insn(PINSRW, 3, OpCls( XMM, M16, I8_U ), F_660F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
ins (PINSRW, pinsrw, OpCls( MMX, R32_M16, I8_U ), F_0F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
insn(PINSRW, 1, OpCls( XMM, R32_M16, I8_U ), F_660F, 1, no_WDS, 0xC4, 0x00, P_686|P_SSE1,0)
|
|
ins (PMADDWD, pmaddwd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF5, 0x00, P_586|P_MMX, 0)
|
|
insn(PMADDWD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF5, 0x00, P_686|P_SSE2,0)
|
|
ins (PMAXSW, pmaxsw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xEE, 0x00, P_686|P_SSE1,0)
|
|
insn(PMAXSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xEE, 0x00, P_686|P_SSE2,0)
|
|
ins (PMAXUB, pmaxub, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xDE, 0x00, P_686|P_SSE1,0)
|
|
insn(PMAXUB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xDE, 0x00, P_686|P_SSE2,0)
|
|
ins (PMINSW, pminsw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xEA, 0x00, P_686|P_SSE1,0)
|
|
insn(PMINSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xEA, 0x00, P_686|P_SSE2,0)
|
|
ins (PMINUB, pminub, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xDA, 0x00, P_686|P_SSE1,0)
|
|
insn(PMINUB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xDA, 0x00, P_686|P_SSE2,0)
|
|
ins (PMOVMSKB, pmovmskb, OpCls( RGT16, MMX, NONE ), F_0F, 1, no_WDS, 0xD7, 0x00, P_686|P_SSE1,0)
|
|
insn(PMOVMSKB, 1, OpCls( RGT16, XMM, NONE ), F_660F, 1, no_WDS, 0xD7, 0x00, P_686|P_SSE2,0)
|
|
ins (PMULHUW, pmulhuw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE4, 0x00, P_586|P_SSE1,0)
|
|
insn(PMULHUW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE4, 0x00, P_686|P_SSE2,0)
|
|
ins (PMULHW, pmulhw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE5, 0x00, P_586|P_MMX, 0)
|
|
insn(PMULHW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE5, 0x00, P_686|P_SSE2,0)
|
|
ins (PMULLW, pmullw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD5, 0x00, P_586|P_MMX, 0)
|
|
insn(PMULLW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD5, 0x00, P_686|P_SSE2,0)
|
|
ins (PMULUDQ, pmuludq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF4, 0x00, P_686|P_SSE2,0)
|
|
insn(PMULUDQ, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF4, 0x00, P_686|P_SSE2,0)
|
|
ins (POR, por, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xEB, 0x00, P_586|P_MMX, 0)
|
|
insn(POR, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xEB, 0x00, P_686|P_SSE2,0)
|
|
ins (PSADBW, psadbw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF6, 0x00, P_686|P_SSE1,0)
|
|
insn(PSADBW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF6, 0x00, P_686|P_SSE2,0)
|
|
ins (PSHUFD, pshufd, OpCls( XMM, XMM_M128, I8_U ), F_660F, 1, no_WDS, 0x70, 0x00, P_686|P_SSE2,0)
|
|
ins (PSHUFW, pshufw, OpCls( MMX, MMX_M64, I8_U ), F_0F, 1, no_WDS, 0x70, 0x00, P_686|P_SSE1,0)
|
|
ins (PSHUFHW, pshufhw, OpCls( XMM, XMM_M128, I8_U ), F_F30F, 1, no_WDS, 0x70, 0x00, P_686|P_SSE2,0)
|
|
ins (PSHUFLW, pshuflw, OpCls( XMM, XMM_M128, I8_U ), F_F20F, 1, no_WDS, 0x70, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (PSLLW, psllw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF1, 0x00, P_586|P_MMX, 0)
|
|
insn(PSLLW, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x71, 0x30, P_586|P_MMX, 0)
|
|
insn(PSLLW, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF1, 0x00, P_686|P_SSE2,0)
|
|
insn(PSLLW, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x71, 0x30, P_686|P_SSE2,0)
|
|
ins (PSLLD, pslld, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF2, 0x00, P_586|P_MMX, 0)
|
|
insn(PSLLD, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x72, 0x30, P_586|P_MMX, 0)
|
|
insn(PSLLD, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF2, 0x00, P_686|P_SSE2,0)
|
|
insn(PSLLD, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x72, 0x30, P_686|P_SSE2,0)
|
|
ins (PSLLQ, psllq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF3, 0x00, P_586|P_MMX, 0)
|
|
insn(PSLLQ, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x73, 0x30, P_586|P_MMX, 0)
|
|
insn(PSLLQ, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF3, 0x00, P_686|P_SSE2,0)
|
|
insn(PSLLQ, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x73, 0x30, P_686|P_SSE2,0)
|
|
ins (PSRAW, psraw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE1, 0x00, P_586|P_MMX, 0)
|
|
insn(PSRAW, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x71, 0x20, P_586|P_MMX, 0)
|
|
insn(PSRAW, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE1, 0x00, P_586|P_SSE2,0)
|
|
insn(PSRAW, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x71, 0x20, P_686|P_SSE2,0)
|
|
ins (PSRAD, psrad, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE2, 0x00, P_586|P_MMX, 0)
|
|
insn(PSRAD, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x72, 0x20, P_586|P_MMX, 0)
|
|
insn(PSRAD, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE2, 0x00, P_686|P_SSE2,0)
|
|
insn(PSRAD, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x72, 0x20, P_686|P_SSE2,0)
|
|
ins (PSRLW, psrlw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD1, 0x00, P_586|P_MMX, 0)
|
|
insn(PSRLW, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x71, 0x10, P_586|P_MMX, 0)
|
|
insn(PSRLW, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD1, 0x00, P_686|P_SSE2,0)
|
|
insn(PSRLW, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x71, 0x10, P_686|P_SSE2,0)
|
|
ins (PSRLD, psrld, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD2, 0x00, P_586|P_MMX, 0)
|
|
insn(PSRLD, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x72, 0x10, P_586|P_MMX, 0)
|
|
insn(PSRLD, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD2, 0x00, P_686|P_SSE2,0)
|
|
insn(PSRLD, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x72, 0x10, P_686|P_SSE2,0)
|
|
ins (PSRLQ, psrlq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD3, 0x00, P_586|P_MMX, 0)
|
|
insn(PSRLQ, 1, OpCls( MMX, I8_U, NONE ), F_0F, 0, no_WDS, 0x73, 0x10, P_586|P_MMX, 0)
|
|
insn(PSRLQ, 2, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD3, 0x00, P_686|P_SSE2,0)
|
|
insn(PSRLQ, 3, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x73, 0x10, P_686|P_SSE2,0)
|
|
|
|
ins (PSLLDQ, pslldq, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x73, 0x38, P_686|P_SSE2,0)
|
|
ins (PSRLDQ, psrldq, OpCls( XMM, I8_U, NONE ), F_660F, 0, no_WDS, 0x73, 0x18, P_686|P_SSE2,0)
|
|
|
|
ins (PSUBB, psubb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF8, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF8, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBW, psubw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xF9, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xF9, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBD, psubd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xFA, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xFA, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBQ, psubq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xFB, 0x00, P_686|P_SSE2,0)
|
|
insn(PSUBQ, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xFB, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBSB, psubsb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE8, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBSB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE8, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBSW, psubsw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xE9, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE9, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBUSB, psubusb, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD8, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBUSB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD8, 0x00, P_686|P_SSE2,0)
|
|
ins (PSUBUSW, psubusw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xD9, 0x00, P_586|P_MMX, 0)
|
|
insn(PSUBUSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD9, 0x00, P_686|P_SSE2,0)
|
|
ins (PXOR, pxor, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0xEF, 0x00, P_586|P_MMX, 0)
|
|
insn(PXOR, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xEF, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKHBW, punpckhbw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x68, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKHBW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x68, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKHWD, punpckhwd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x69, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKHWD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x69, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKHDQ, punpckhdq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x6A, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKHDQ, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x6A, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKLBW, punpcklbw, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x60, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKLBW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x60, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKLWD, punpcklwd, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x61, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKLWD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x61, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKLDQ, punpckldq, OpCls( MMX, MMX_M64, NONE ), F_0F, 1, no_WDS, 0x62, 0x00, P_586|P_MMX, 0)
|
|
insn(PUNPCKLDQ, 1, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x62, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKHQDQ, punpckhqdq, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x6D, 0x00, P_686|P_SSE2,0)
|
|
ins (PUNPCKLQDQ, punpcklqdq, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x6C, 0x00, P_686|P_SSE2,0)
|
|
|
|
ins (RCPPS, rcpps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x53, 0x00, P_686|P_SSE1,0)
|
|
ins (RCPSS, rcpss, OpCls( XMM, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x53, 0x00, P_686|P_SSE1,0)
|
|
ins (RSQRTPS, rsqrtps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x52, 0x00, P_686|P_SSE1,0)
|
|
ins (RSQRTSS, rsqrtss, OpCls( XMM, XMM_M32, NONE ), F_F30F, 1, no_WDS, 0x52, 0x00, P_686|P_SSE1,0)
|
|
ins (SHUFPD, shufpd, OpCls( XMM, XMM_M128, I8_U ), F_660F, 1, no_WDS, 0xC6, 0x00, P_686|P_SSE2,0)
|
|
ins (SHUFPS, shufps, OpCls( XMM, XMM_M128, I8_U ), F_0F, 1, no_WDS, 0xC6, 0x00, P_686|P_SSE1,0)
|
|
ins (UCOMISD, ucomisd, OpCls( XMM, XMM_M64, NONE ), F_660F, 1, no_WDS, 0x2E, 0x00, P_686|P_SSE2,0)
|
|
ins (UCOMISS, ucomiss, OpCls( XMM, XMM_M32, NONE ), F_0F, 1, no_WDS, 0x2E, 0x00, P_686|P_SSE1,0)
|
|
ins (UNPCKHPD, unpckhpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x15, 0x00, P_686|P_SSE2,0)
|
|
ins (UNPCKHPS, unpckhps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x15, 0x00, P_686|P_SSE1,0)
|
|
ins (UNPCKLPD, unpcklpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x14, 0x00, P_686|P_SSE2,0)
|
|
ins (UNPCKLPS, unpcklps, OpCls( XMM, XMM_M128, NONE ), F_0F, 1, no_WDS, 0x14, 0x00, P_686|P_SSE1,0)
|
|
|
|
/* K3D instructions */
|
|
#if K3DSUPP
|
|
ins (FEMMS, femms, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x0E, 0x00, P_586|P_K3D, 0)
|
|
ins (PREFETCH, prefetch, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x0D, 0x00, P_586|P_K3D, 0)
|
|
ins (PREFETCHW, prefetchw, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0x0D, 0x08, P_586|P_K3D, 0)
|
|
ins (PAVGUSB, pavgusb, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xBF, 0x00, P_586|P_K3D, 0)
|
|
ins (PF2ID, pf2id, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x1D, 0x00, P_586|P_K3D, 0)
|
|
ins (PF2IW, pf2iw, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x1C, 0x00, P_586|P_K3D, 0)
|
|
ins (PFACC, pfacc, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xAE, 0x00, P_586|P_K3D, 0)
|
|
ins (PFADD, pfadd, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x9E, 0x00, P_586|P_K3D, 0)
|
|
ins (PFCMPEQ, pfcmpeq, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xB0, 0x00, P_586|P_K3D, 0)
|
|
ins (PFCMPGE, pfcmpge, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x90, 0x00, P_586|P_K3D, 0)
|
|
ins (PFCMPGT, pfcmpgt, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xA0, 0x00, P_586|P_K3D, 0)
|
|
ins (PFMAX, pfmax, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xA4, 0x00, P_586|P_K3D, 0)
|
|
ins (PFMIN, pfmin, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x94, 0x00, P_586|P_K3D, 0)
|
|
ins (PFMUL, pfmul, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xB4, 0x00, P_586|P_K3D, 0)
|
|
ins (PFNACC, pfnacc, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x8A, 0x00, P_586|P_K3D, 0)
|
|
ins (PFPNACC, pfpnacc, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x8E, 0x00, P_586|P_K3D, 0)
|
|
ins (PFRCP, pfrcp, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x96, 0x00, P_586|P_K3D, 0)
|
|
ins (PFRCPIT1, pfrcpit1, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xA6, 0x00, P_586|P_K3D, 0)
|
|
ins (PFRCPIT2, pfrcpit2, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xB6, 0x00, P_586|P_K3D, 0)
|
|
ins (PFRSQIT1, pfrsqit1, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xA7, 0x00, P_586|P_K3D, 0)
|
|
ins (PFRSQRT, pfrsqrt, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x97, 0x00, P_586|P_K3D, 0)
|
|
ins (PFSUB, pfsub, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x9A, 0x00, P_586|P_K3D, 0)
|
|
ins (PFSUBR, pfsubr, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xAA, 0x00, P_586|P_K3D, 0)
|
|
ins (PI2FD, pi2fd, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x0D, 0x00, P_586|P_K3D, 0)
|
|
ins (PI2FW, pi2fw, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0x0C, 0x00, P_586|P_K3D, 0)
|
|
ins (PMULHRW, pmulhrw, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xB7, 0x00, P_586|P_K3D, 0)
|
|
ins (PSWAPD, pswapd, OpCls( MMX, MMX_M64, NONE ), F_0F0F, 1, no_WDS, 0xBB, 0x00, P_586|P_K3D, 0)
|
|
#endif
|
|
|
|
#if SSE3SUPP
|
|
ins (ADDSUBPD, addsubpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xD0, 0x00, P_686|P_SSE3,0)
|
|
ins (ADDSUBPS, addsubps, OpCls( XMM, XMM_M128, NONE ), F_F20F, 1, no_WDS, 0xD0, 0x00, P_686|P_SSE3,0)
|
|
ins (FISTTP, fisttp, OpCls( M32, NONE, NONE ), 0, 0, no_WDS, 0xDB, 0x08, P_686|P_SSE3,0)
|
|
insn(FISTTP, 1, OpCls( M64, NONE, NONE ), 0, 0, no_WDS, 0xDD, 0x08, P_686|P_SSE3,0)
|
|
insn(FISTTP, 2, OpCls( M16, NONE, NONE ), 0, 0, no_WDS, 0xDF, 0x08, P_686|P_SSE3,0)
|
|
ins (HADDPD, haddpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x7C, 0x00, P_686|P_SSE3,0)
|
|
ins (HADDPS, haddps, OpCls( XMM, XMM_M128, NONE ), F_F20F, 1, no_WDS, 0x7C, 0x00, P_686|P_SSE3,0)
|
|
ins (HSUBPD, hsubpd, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x7D, 0x00, P_686|P_SSE3,0)
|
|
ins (HSUBPS, hsubps, OpCls( XMM, XMM_M128, NONE ), F_F20F, 1, no_WDS, 0x7D, 0x00, P_686|P_SSE3,0)
|
|
ins (LDDQU, lddqu, OpCls( XMM, M128, NONE ), F_F20F, 1, no_WDS, 0xF0, 0x00, P_686|P_SSE3,0)
|
|
ins (MONITOR, monitor, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC8, P_686|P_SSE3,0)
|
|
ins (MOVDDUP, movddup, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x12, 0x00, P_686|P_SSE3,0)
|
|
ins (MOVSHDUP, movshdup, OpCls( XMM, XMM_M128, NONE ), F_F30F, 1, no_WDS, 0x16, 0x00, P_686|P_SSE3,0)
|
|
ins (MOVSLDUP, movsldup, OpCls( XMM, XMM_M128, NONE ), F_F30F, 1, no_WDS, 0x12, 0x00, P_686|P_SSE3,0)
|
|
ins (MWAIT, mwait, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC9, P_686|P_SSE3,0)
|
|
#endif
|
|
|
|
#if SSSE3SUPP
|
|
ins (PABSB, pabsb, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x1C, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PABSB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x1C, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PABSD, pabsd, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x1E, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PABSD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x1E, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PABSW, pabsw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x1D, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PABSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x1D, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PALIGNR, palignr, OpCls( MMX, MMX_M64, I8_U ), F_0F3A, 1, no_WDS, 0x0F, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PALIGNR, 1, OpCls( XMM, XMM_M128, I8_U ), F_660F3A,1, no_WDS, 0x0F, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHADDD, phaddd, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x02, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHADDD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x02, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHADDSW, phaddsw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x03, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHADDSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x03, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHADDW, phaddw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x01, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHADDW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x01, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHSUBD, phsubd, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x06, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHSUBD, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x06, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHSUBSW, phsubsw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x07, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHSUBSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x07, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PHSUBW, phsubw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x05, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PHSUBW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x05, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PMADDUBSW, pmaddubsw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x04, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PMADDUBSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x04, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PMULHRSW, pmulhrsw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x0B, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PMULHRSW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0B, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PSHUFB, pshufb, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x00, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PSHUFB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x00, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PSIGNB, psignb, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x08, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PSIGNB, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x08, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PSIGND, psignd, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x0A, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PSIGND, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0A, 0x00, P_686|P_SSSE3, 0)
|
|
ins (PSIGNW, psignw, OpCls( MMX, MMX_M64, NONE ), F_0F38, 1, no_WDS, 0x09, 0x00, P_686|P_SSSE3, 0)
|
|
insn(PSIGNW, 1, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x09, 0x00, P_686|P_SSSE3, 0)
|
|
#endif
|
|
#if AMD64_SUPPORT
|
|
/* CDQE must be first in this group, see reswords.c */
|
|
insx(CDQE, cdqe, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0x98, 0x00, P_64, 0, RWF_X64)
|
|
insx(CQO, cqo, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0x99, 0x00, P_64, 0, RWF_X64)
|
|
insx(PUSHFQ,pushfq, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9C, 0x00, P_64, 0, RWF_X64)
|
|
insx(POPFQ, popfq, OpCls( NONE, NONE, NONE ), 0, 0, no_RM, 0x9D, 0x00, P_64, 0, RWF_X64)
|
|
insx(IRETQ, iretq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xCF, 0x00, P_64, 0, RWF_X64)
|
|
insx(CMPXCHG16B, cmpxchg16b, OpCls( M128, NONE, NONE ), F_480F, 0, 0, 0xC7, 0x08, P_64, AP_LOCK, RWF_X64)
|
|
insx(MOVSXD,movsxd, OpCls( R64, R32_M32, NONE ), 0, 1, 0, 0x63, 0x00, P_64, 0, RWF_X64)
|
|
|
|
insx(CMPSQ, cmpsq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xA7, 0x00, P_64, AP_REPxx, RWF_X64)
|
|
insn(CMPSQ, 1, OpCls( M64, M64, NONE ), F_48, 0, no_RM, 0xA7, 0x00, P_64, AP_REPxx)
|
|
insx(LODSQ, lodsq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xAD, 0x00, P_64, AP_REP, RWF_X64)
|
|
insn(LODSQ, 1, OpCls( M64, NONE, NONE ), F_48, 0, no_RM, 0xAD, 0x00, P_64, AP_REP )
|
|
insx(MOVSQ, movsq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xA5, 0x00, P_64, AP_REP, RWF_X64)
|
|
insn(MOVSQ, 1, OpCls( M64, M64, NONE ), F_48, 0, no_RM, 0xA5, 0x00, P_64, AP_REP )
|
|
insx(SCASQ, scasq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xAF, 0x00, P_64, AP_REPxx, RWF_X64)
|
|
insn(SCASQ, 1, OpCls( M64, NONE, NONE ), F_48, 0, no_RM, 0xAF, 0x00, P_64, AP_REPxx)
|
|
insx(STOSQ, stosq, OpCls( NONE, NONE, NONE ), F_48, 0, no_RM, 0xAB, 0x00, P_64, AP_REP, RWF_X64)
|
|
insn(STOSQ, 1, OpCls( M64, NONE, NONE ), F_48, 0, no_RM, 0xAB, 0x00, P_64, AP_REP )
|
|
#if SSE4SUPP
|
|
/* PEXTRQ/PINSRQ need a REX.W prefix if M64 is dst/src! */
|
|
insx(PEXTRQ, pextrq, OpCls( R64_M64, XMM, I8_U ), F_660F3A,0, no_WDS, 0x16, 0x00, P_64|P_SSE4,0, RWF_X64)
|
|
insx(PINSRQ, pinsrq, OpCls( XMM, R64_M64, I8_U ), F_660F3A,1, no_WDS, 0x22, 0x00, P_64|P_SSE4,0, RWF_X64)
|
|
#endif
|
|
insx(SWAPGS, swapgs, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xF8, P_64, 0, RWF_X64)
|
|
insx(SYSCALL_, syscall, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x05, 0x00, P_64, 0, RWF_X64)
|
|
insx(SYSRET, sysret, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x07, 0x00, P_64, 0, RWF_X64)
|
|
#if 0 /* v2.09: added, inactive ( not supported by ML64 v8,9,10 ) */
|
|
insx(FXRSTOR64, fxrstor64, OpCls( M_ANY, NONE, NONE ), F_480F, 0, no_WDS, 0xAE, 0x08, P_64, 0, RWF_X64)
|
|
insx(FXSAVE64, fxsave64, OpCls( M_ANY, NONE, NONE ), F_480F, 0, no_WDS, 0xAE, 0x00, P_64, 0, RWF_X64)
|
|
#if SSE4SUPP
|
|
insx(XRSTOR64, xrstor64, OpCls( M_ANY, NONE, NONE ), F_480F, 0, no_WDS, 0xAE, 0x28, P_64|P_SSE4,0, RWF_X64)
|
|
insx(XSAVE64, xsave64, OpCls( M_ANY, NONE, NONE ), F_480F, 0, no_WDS, 0xAE, 0x20, P_64|P_SSE4,0, RWF_X64)
|
|
insx(XSAVEOPT64, xsaveopt64, OpCls( M_ANY, NONE, NONE ), F_480F, 0, no_WDS, 0xAE, 0x30, P_64|P_SSE4,0, RWF_X64)
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#if SSE4SUPP
|
|
/* SSE4.1 */
|
|
ins (BLENDPD, blendpd, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x0D, 0x00, P_686|P_SSE4, 0)
|
|
ins (BLENDPS, blendps, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x0C, 0x00, P_686|P_SSE4, 0)
|
|
ins (BLENDVPD, blendvpd, OpCls( XMM, XMM_M128, XMM0 ), F_660F38, 1, no_WDS, 0x15, 0x00, P_686|P_SSE4, 0)
|
|
ins (BLENDVPS, blendvps, OpCls( XMM, XMM_M128, XMM0 ), F_660F38, 1, no_WDS, 0x14, 0x00, P_686|P_SSE4, 0)
|
|
ins (DPPD, dppd, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x41, 0x00, P_686|P_SSE4, 0)
|
|
ins (DPPS, dpps, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x40, 0x00, P_686|P_SSE4, 0)
|
|
ins (EXTRACTPS, extractps, OpCls( RGT16, XMM, I8_U ), F_660F3A, 0, no_WDS, 0x17, 0x00, P_686|P_SSE4, 0)
|
|
insn(EXTRACTPS, 1, OpCls( M32, XMM, I8_U ), F_660F3A, 0, no_WDS, 0x17, 0x00, P_686|P_SSE4, 0)
|
|
ins (INSERTPS, insertps, OpCls( XMM, XMM_M32, I8_U ), F_660F3A, 1, no_WDS, 0x21, 0x00, P_686|P_SSE4, 0)
|
|
ins (MOVNTDQA, movntdqa, OpCls( XMM, M128, NONE ), F_660F38, 1, no_WDS, 0x2A, 0x00, P_686|P_SSE4, 0)
|
|
ins (MPSADBW, mpsadbw, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x42, 0x00, P_686|P_SSE4, 0)
|
|
ins (PACKUSDW, packusdw, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x2B, 0x00, P_686|P_SSE4, 0)
|
|
ins (PBLENDVB, pblendvb, OpCls( XMM, XMM_M128, XMM0 ), F_660F38, 1, no_WDS, 0x10, 0x00, P_686|P_SSE4, 0)
|
|
ins (PBLENDW, pblendw, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x0E, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPEQQ, pcmpeqq, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x29, 0x00, P_686|P_SSE4, 0)
|
|
ins (PEXTRB, pextrb, OpCls( RGT16_M08,XMM, I8_U ), F_660F3A, 0, no_WDS, 0x14, 0x00, P_686|P_SSE4, 0)
|
|
ins (PEXTRD, pextrd, OpCls( R32_M32, XMM, I8_U ), F_660F3A, 0, no_WDS, 0x16, 0x00, P_686|P_SSE4, 0)
|
|
ins (PHMINPOSUW, phminposuw, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x41, 0x00, P_686|P_SSE4, 0)
|
|
ins (PINSRB, pinsrb, OpCls( XMM, R32_M08, I8_U ), F_660F3A, 1, no_WDS, 0x20, 0x00, P_686|P_SSE4, 0)
|
|
ins (PINSRD, pinsrd, OpCls( XMM, R32_M32, I8_U ), F_660F3A, 1, no_WDS, 0x22, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMAXSB, pmaxsb, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3C, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMAXSD, pmaxsd, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3D, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMAXUW, pmaxuw, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3E, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMAXUD, pmaxud, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3F, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMINSB, pminsb, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x38, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMINSD, pminsd, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x39, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMINUW, pminuw, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3A, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMINUD, pminud, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x3B, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXBW, pmovsxbw, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x20, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXBD, pmovsxbd, OpCls( XMM, XMM_M32, NONE ), F_660F38, 1, no_WDS, 0x21, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXBQ, pmovsxbq, OpCls( XMM, XMM_M16, NONE ), F_660F38, 1, no_WDS, 0x22, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXWD, pmovsxwd, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x23, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXWQ, pmovsxwq, OpCls( XMM, XMM_M32, NONE ), F_660F38, 1, no_WDS, 0x24, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVSXDQ, pmovsxdq, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x25, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXBW, pmovzxbw, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x30, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXBD, pmovzxbd, OpCls( XMM, XMM_M32, NONE ), F_660F38, 1, no_WDS, 0x31, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXBQ, pmovzxbq, OpCls( XMM, XMM_M16, NONE ), F_660F38, 1, no_WDS, 0x32, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXWD, pmovzxwd, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x33, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXWQ, pmovzxwq, OpCls( XMM, XMM_M32, NONE ), F_660F38, 1, no_WDS, 0x34, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMOVZXDQ, pmovzxdq, OpCls( XMM, XMM_M64, NONE ), F_660F38, 1, no_WDS, 0x35, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMULDQ, pmuldq, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x28, 0x00, P_686|P_SSE4, 0)
|
|
ins (PMULLD, pmulld, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x40, 0x00, P_686|P_SSE4, 0)
|
|
ins (PTEST, ptest, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x17, 0x00, P_686|P_SSE4, 0)
|
|
ins (ROUNDPS, roundps, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x08, 0x00, P_686|P_SSE4, 0)
|
|
ins (ROUNDPD, roundpd, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x09, 0x00, P_686|P_SSE4, 0)
|
|
ins (ROUNDSS, roundss, OpCls( XMM, XMM_M32 , I8_U ), F_660F3A, 1, no_WDS, 0x0A, 0x00, P_686|P_SSE4, 0)
|
|
ins (ROUNDSD, roundsd, OpCls( XMM, XMM_M64 , I8_U ), F_660F3A, 1, no_WDS, 0x0B, 0x00, P_686|P_SSE4, 0)
|
|
/* SSE4.2 */
|
|
ins (CRC32, crc32, OpCls( RGT16, R8_M08, NONE ), F_F20F38, 1, no_WDS, 0xF0, 0x00, P_686|P_SSE4, 0)
|
|
insn(CRC32, 1, OpCls( RGT16, RGT8_MS, NONE ), F_F20F38, 1, no_WDS, 0xF1, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPESTRM, pcmpestrm, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x60, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPESTRI, pcmpestri, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x61, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPISTRM, pcmpistrm, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x62, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPISTRI, pcmpistri, OpCls( XMM, XMM_M128, I8_U ), F_660F3A, 1, no_WDS, 0x63, 0x00, P_686|P_SSE4, 0)
|
|
ins (PCMPGTQ, pcmpgtq, OpCls( XMM, XMM_M128, NONE ), F_660F38, 1, no_WDS, 0x37, 0x00, P_686|P_SSE4, 0)
|
|
ins (POPCNT, popcnt, OpCls( RGT8, RGT8_MS, NONE ), F_F30F, 1, no_WDS ,0xB8, 0x00, P_686|P_SSE4, 0)
|
|
#if 0
|
|
/* SSE4A (AMD only). */
|
|
/* disabled because INSERTQ needs 4 arguments, which JWasm cannot support currently */
|
|
ins (EXTRQ, extrq, OpCls( XMM, I8_U, I8_U ), F_660F, 0, no_WDS ,0x78, 0x00, P_686|P_SSE4, 0)
|
|
ins (INSERTQ, insertq, OpCls( XMM, XMM, I8_U ), F_F20F, 0, no_WDS ,0x78, 0x00, P_686|P_SSE4, 0)
|
|
ins (LZCNT, lzcnt, OpCls( RGT8, RGT8_MS, NONE ), F_F30F, 1, no_WDS ,0xBD, 0x00, P_686|P_SSE4, 0)
|
|
ins (MOVNTSD, movntsd, OpCls( M64, XMM, NONE ), F_F20F, 0, no_WDS ,0x2B, 0x00, P_686|P_SSE4, 0)
|
|
ins (MOVNTSS, movntss, OpCls( M32, XMM, NONE ), F_F30F, 0, no_WDS ,0x2B, 0x00, P_686|P_SSE4, 0)
|
|
#endif
|
|
/* v2.06: added xrstor, xsave, xgetbv, xsetbv */
|
|
ins (XRSTOR, xrstor, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x28, P_686|P_SSE4,0)
|
|
ins (XSAVE, xsave, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x20, P_686|P_SSE4,0)
|
|
ins (XSAVEOPT, xsaveopt, OpCls( M_ANY, NONE, NONE ), F_0F, 0, no_WDS, 0xAE, 0x30, P_686|P_SSE4,0)
|
|
ins (XGETBV, xgetbv, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xD0, P_686|P_SSE4,0)
|
|
ins (XSETBV, xsetbv, OpCls( NONE, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xD1, P_686p|P_SSE4,0)
|
|
#endif
|
|
#if VMXSUPP
|
|
/* v2.09: added */
|
|
ins (VMCALL, vmcall, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC1, P_686, 0)
|
|
ins (VMLAUNCH,vmlaunch, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC2, P_686p,0)
|
|
ins (VMRESUME,vmresume, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC3, P_686p,0)
|
|
ins (VMXOFF, vmxoff, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xC4, P_686p,0)
|
|
ins (VMPTRLD, vmptrld, OpCls( M64, NONE, NONE ), F_0F, 0, no_WDS, 0xC7, 0x30, P_686p,0)
|
|
ins (VMPTRST, vmptrst, OpCls( M64, NONE, NONE ), F_0F, 0, no_WDS, 0xC7, 0x38, P_686p,0)
|
|
ins (VMCLEAR, vmclear, OpCls( M64, NONE, NONE ), F_660F, 0, no_WDS, 0xC7, 0x30, P_686p,0)
|
|
ins (VMXON, vmxon, OpCls( M64, NONE, NONE ), F_F30F, 0, no_WDS, 0xC7, 0x30, P_686p,0)
|
|
ins (VMREAD, vmread, OpCls( R32_M32, R32, NONE ), F_0F, 0, no_WDS, 0x78, 0x00, P_686p,0)
|
|
ins (VMWRITE, vmwrite, OpCls( R32, R32_M32, NONE ), F_0F, 1, no_WDS, 0x79, 0x00, P_686p,0)
|
|
ins (INVEPT, invept, OpCls( RGT16, M128, NONE ), F_660F38,1, no_WDS, 0x80, 0x00, P_686p,0)
|
|
ins (INVVPID, invvpid, OpCls( RGT16, M128, NONE ), F_660F38,1, no_WDS, 0x81, 0x00, P_686p,0)
|
|
#endif
|
|
#if SVMSUPP
|
|
/* v2.09: added, but inactive */
|
|
ins (VMRUN, vmrun, OpCls( A, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xD8, P_686p,0)
|
|
ins (VMMCALL, vmmcall, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xD9, P_686, 0)
|
|
ins (VMLOAD, vmload, OpCls( A, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xDA, P_686p,0)
|
|
ins (VMSAVE, vmsave, OpCls( A, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xDB, P_686p,0)
|
|
ins (STGI, stgi, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xDC, P_686p,0)
|
|
ins (CLGI, clgi, OpCls( NONE, NONE, NONE ), F_0F, 0, 0, 0x01, 0xDD, P_686p,0)
|
|
ins (SKINIT, skinit, OpCls( A, NONE, NONE ), F_0F, 0, no_WDS, 0x01, 0xDE, P_686p,0)
|
|
ins (INVLPGA, invlpga, OpCls( A, R32, NONE ), F_0F, 0, no_WDS, 0x01, 0xDF, P_686p,0)
|
|
#endif
|
|
#if AVXSUPP
|
|
/* VBROADCASTSS is first VEX encoded instruction (VEX_START in parser.h).
|
|
* Important: currently vex_flags[] in reswords.c must match the order here!
|
|
* (this is to be improved).
|
|
* Most AVX instructions that also have a "legacy" encoding are not listed
|
|
* here but are contained in instravx.h!. Exceptions:
|
|
* - VBLENDVPD, VBLENDVPS, VPBLENDVB ( they use a different opcode in VEX )
|
|
* - VCVT[T]PD* ( they expect a mix of xmm and ymm/m256 arguments )
|
|
*/
|
|
insx(VBROADCASTSS, vbroadcastss, OpCls( XMM, M32, NONE ), F_660F38,1, no_WDS, 0x18, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VBROADCASTSS, 1, OpCls( YMM, M32, NONE ), F_660F38,1, no_WDS, 0x18, 0x00, P_686|P_AVX, 0)
|
|
insx(VBROADCASTSD, vbroadcastsd, OpCls( YMM, M64, NONE ), F_660F38,1, no_WDS, 0x19, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VBROADCASTF128, vbroadcastf128, OpCls( YMM, M128, NONE ), F_660F38,1, no_WDS, 0x1A, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VBLENDVPD, vblendvpd, OpCls( XMM, XMM_M128, XMM ), F_660F3A,1, no_WDS, 0x4B, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VBLENDVPS, vblendvps, OpCls( XMM, XMM_M128, XMM ), F_660F3A,1, no_WDS, 0x4A, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VINSERTF128, vinsertf128, OpCls( YMM, XMM_M128, I8_U ), F_660F3A,1, no_WDS, 0x18, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VEXTRACTF128, vextractf128, OpCls( XMM, YMM, I8_U ), F_660F3A,0, no_WDS, 0x19, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VEXTRACTF128, 1, OpCls( M128, YMM, I8_U ), F_660F3A,0, no_WDS, 0x19, 0x00, P_686|P_AVX, 0)
|
|
insx(VMASKMOVPS, vmaskmovps, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x2C, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VMASKMOVPS, 1, OpCls( M128, XMM, NONE ), F_660F38,0, no_WDS, 0x2E, 0x00, P_686|P_AVX, 0)
|
|
insx(VMASKMOVPD, vmaskmovpd, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x2D, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VMASKMOVPD, 1, OpCls( M128, XMM, NONE ), F_660F38,0, no_WDS, 0x2F, 0x00, P_686|P_AVX, 0)
|
|
insx(VPBLENDVB, vpblendvb, OpCls( XMM, XMM_M128, XMM ), F_660F3A,1, no_WDS, 0x4C, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VPERMILPD, vpermilpd, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0D, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VPERMILPD, 1, OpCls( XMM, XMM_M128, I8_U ), F_660F3A,1, no_WDS, 0x0D, 0x00, P_686|P_AVX, 0)
|
|
insx(VPERMILPS, vpermilps, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0C, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VPERMILPS, 1, OpCls( XMM, XMM_M128, I8_U ), F_660F3A,1, no_WDS, 0x0C, 0x00, P_686|P_AVX, 0)
|
|
/* the VPERMIL2xx instructions were dropped */
|
|
//insx(VPERMIL2PD, vpermil2pd, OpCls( XMM, XMM_M128, XMM ), F_660F3A,1, no_WDS, 0x49, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
//insx(VPERMIL2PS, vpermil2ps, OpCls( XMM, XMM_M128, XMM ), F_660F3A,1, no_WDS, 0x48, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VPERM2F128, vperm2f128, OpCls( YMM, YMM_M256, I8_U ), F_660F3A,1, no_WDS, 0x06, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VTESTPS, vtestps, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0E, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VTESTPD, vtestpd, OpCls( XMM, XMM_M128, NONE ), F_660F38,1, no_WDS, 0x0F, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VZEROALL, vzeroall, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x77, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VZEROUPPER, vzeroupper, OpCls( NONE, NONE, NONE ), F_0F, 0, no_RM, 0x77, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insx(VCVTPD2DQ, vcvtpd2dq, OpCls( XMM, XMM_M128, NONE ), F_F20F, 1, no_WDS, 0xE6, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VCVTPD2DQ, 1, OpCls( XMM, YMM_M256, NONE ), F_F20F, 1, no_WDS, 0xE6, 0x00, P_686|P_AVX, 0)
|
|
insx(VCVTTPD2DQ, vcvttpd2dq, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0xE6, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VCVTTPD2DQ, 1, OpCls( XMM, YMM_M256, NONE ), F_660F, 1, no_WDS, 0xE6, 0x00, P_686|P_AVX, 0)
|
|
insx(VCVTPD2PS, vcvtpd2ps, OpCls( XMM, XMM_M128, NONE ), F_660F, 1, no_WDS, 0x5A, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VCVTPD2PS, 1, OpCls( XMM, YMM_M256, NONE ), F_660F, 1, no_WDS, 0x5A, 0x00, P_686|P_AVX, 0)
|
|
insx(VMOVDDUP, vmovddup, OpCls( XMM, XMM_M64, NONE ), F_F20F, 1, no_WDS, 0x12, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VMOVDDUP, 1, OpCls( YMM, YMM_M256, NONE ), F_F20F, 1, no_WDS, 0x12, 0x00, P_686|P_AVX, 0)
|
|
/* v2.11: added here, removed in instravx.h */
|
|
insx(VMOVMSKPD, vmovmskpd, OpCls( RGT16, XMM, NONE ), F_660F, 1, no_WDS, 0x50, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VMOVMSKPD, 1, OpCls( RGT16, YMM, NONE ), F_660F, 1, no_WDS, 0x50, 0x00, P_686|P_AVX, 0)
|
|
insx(VMOVMSKPS, vmovmskps, OpCls( RGT16, XMM, NONE ), F_0F, 1, no_WDS, 0x50, 0x00, P_686|P_AVX, 0, RWF_VEX )
|
|
insn(VMOVMSKPS, 1, OpCls( RGT16, YMM, NONE ), F_0F, 1, no_WDS, 0x50, 0x00, P_686|P_AVX, 0)
|
|
#endif
|