using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lomont.Binary.X86
{
        /// <summary>
        /// The list of Intel X86 opcodes
        /// </summary>
    public enum X86Mnemonic
    {
        UNKNOWN, // default at 0 is unknown

            // todo - check these, add descriptions?
            // todo - this is sort of a mess, needs parsed from file better?

            AAA, AAD, AAM, AAS, ADC, ADD, ADDPD, ADDPS, ADDSD, ADDSS, ADDSUBPD,
            ADDSUBPS, ADX, ALTER, AMX, AND, ANDNPD, ANDNPS, ANDPD, ANDPS, ARPL,
            BLENDPD, BLENDPS, BLENDVPD, BLENDVPS, BOUND, BSF, BSR, BSWAP, BT,
            BTC, BTR, BTS, CALL, CALLF, CBW, CDQ, CDQE, CLC, CLD, CLFLUSH, CLI,
            CLTS, CMC, CMOVA, CMOVC, CMOVE, CMOVG, CMOVGE, CMOVNA, CMOVNC,
            CMOVNE, CMOVNG, CMOVNGE, CMOVNO, CMOVNS, CMOVO, CMOVPE, CMOVPO,
            CMOVS, CMP, CMPPD, CMPPS, CMPSB, CMPSD, CMPSQ, CMPSS, CMPSW, CMPXCHG,
            CMPXCHG16B, CMPXCHG8B, COMISD, COMISS, CPUID, CQO, CRC32, CS,
            CVTDQ2PD, CVTDQ2PS, CVTPD2DQ, CVTPD2PI, CVTPD2PS, CVTPI2PD, CVTPI2PS,
            CVTPS2DQ, CVTPS2PD, CVTPS2PI, CVTSD2SI, CVTSD2SS, CVTSI2SD, CVTSI2SS,
            CVTSS2SD, CVTSS2SI, CVTTPD2DQ, CVTTPD2PI, CVTTPS2DQ, CVTTPS2PI,
            CVTTSD2SI, CVTTSS2SI, CWD, CWDE, DAA, DAS, DDSB, DEC, DIV, DIVPD,
            DIVPS, DIVSD, DIVSS, DPPD, DPPS, DS, EMMS, ENTER, ES, EXTRACTPS,
            F2XM1, FABS, FADD, FADDP, FBLD, FBSTP, FCHS, FCLEX, FCMOVB, FCMOVBE,
            FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU, FCOM, FCOM2,
            FCOMI, FCOMIP, FCOMP, FCOMP3, FCOMP5, FCOMPP, FCOS, FDECSTP, FDISI,
            FDIV, FDIVP, FDIVR, FDIVRP, FENI, FFREE, FFREEP, FIADD, FICOM,
            FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FINCSTP, FINIT, FIST, FISTP,
            FISTTP, FISUB, FISUBR, FLD, FLD1, FLDCW, FLDENV, FLDL2E, FLDL2T,
            FLDLG2, FLDLN2, FLDPI, FLDZ, FMUL, FMULP, FNCLEX, FNDISI, FNENI,
            FNINIT, FNOP, FNSAVE, FNSETPM, FNSTCW, FNSTENV, FNSTSW, FPATAN,
            FPREM, FPREM1, FPTAN, FRNDINT, FRSTOR, FS, FSAVE, FSCALE, FSETPM,
            FSIN, FSINCOS, FSQRT, FST, FSTCW, FSTENV, FSTP, FSTP1, FSTP8, FSTP9,
            FSTSW, FSUB, FSUBP, FSUBR, FSUBRP, FTST, FUCOM, FUCOMI, FUCOMIP,
            FUCOMP, FUCOMPP, FXAM, FXCH, FXCH4, FXCH7, FXRSTOR, FXSAVE, FXTRACT,
            FYL2X, FYL2XP1, GETSEC, GS, HADDPD, HADDPS, HLT, HSUBPD, HSUBPS,
            ICEBP, IDIV, IMUL, IN, INC, INSB, INSD, INSERTPS, INSW, INT, INTO,
            INVD, INVEPT, INVLPG, INVVPID, IRET, IRETD, IRETQ, JA, JC, JE, JECXZ,
            JG, JGE, JMP, JMPE, JMPF, JNA, JNC, JNE, JNG, JNGE, JNO, JNS, JO,
            JPE, JPO, JRCXZ, JS, LAHF, LAR, LDDQU, LDMXCSR, LDS, LEA, LEAVE, LES,
            LFENCE, LFS, LGDT, LGS, LIDT, LLDT, LMSW, LOADALL, LOCK, LODSB,
            LODSD, LODSQ, LODSW, LOOP, LOOPE, LOOPNE, LSL, LSS, LTR, MASKMOVDQU,
            MASKMOVQ, MAXPD, MAXPS, MAXSD, MAXSS, MFENCE, MINPD, MINPS, MINSD,
            MINSS, MONITOR, MOV, MOVAPD, MOVAPS, MOVBE, MOVD, MOVDDUP, MOVDQ2Q,
            MOVDQA, MOVDQU, MOVHLPS, MOVHPD, MOVHPS, MOVLHPS, MOVLPD, MOVLPS,
            MOVMSKPD, MOVMSKPS, MOVNTDQ, MOVNTDQA, MOVNTI, MOVNTPD, MOVNTPS,
            MOVNTQ, MOVQ, MOVQ2DQ, MOVSB, MOVSD, MOVSHDUP, MOVSLDUP, MOVSQ,
            MOVSS, MOVSW, MOVSX, MOVSXD, MOVUPD, MOVUPS, MOVZX, MPSADBW, MUL,
            MULPD, MULPS, MULSD, MULSS, MWAIT, NEG, NOP, NOT, NTAKEN, Null, OR,
            ORPD, ORPS, OUT, OUTSB, OUTSD, OUTSW, PABSB, PABSD, PABSW, PACKSSDW,
            PACKSSWB, PACKUSDW, PACKUSWB, PADDB, PADDD, PADDQ, PADDSB, PADDSW,
            PADDUSB, PADDUSW, PADDW, PALIGNR, PAND, PANDN, PAUSE, PAVGB, PAVGW,
            PBLENDVB, PBLENDW, PCMPEQB, PCMPEQD, PCMPEQQ, PCMPEQW, PCMPESTRI,
            PCMPESTRM, PCMPGTB, PCMPGTD, PCMPGTQ, PCMPGTW, PCMPISTRI, PCMPISTRM,
            PEXTRB, PEXTRQ, PEXTRW, PHADDD, PHADDSW, PHADDW, PHMINPOSUW, PHSUBD,
            PHSUBSW, PHSUBW, PINSRB, PINSRQ, PINSRW, PMADDUBSW, PMADDWD, PMAXSB,
            PMAXSD, PMAXSW, PMAXUB, PMAXUD, PMAXUW, PMINSB, PMINSD, PMINSW,
            PMINUB, PMINUD, PMINUW, PMOVMSKB, PMOVSXBD, PMOVSXBQ, PMOVSXBW,
            PMOVSXDQ, PMOVSXWD, PMOVSXWQ, PMOVZXBD, PMOVZXBQ, PMOVZXBW, PMOVZXDQ,
            PMOVZXWD, PMOVZXWQ, PMULDQ, PMULHRSW, PMULHUW, PMULHW, PMULLD,
            PMULLW, PMULUDQ, POP, POPA, POPAD, POPCNT, POPF, POPFD, POPFQ, POR,
            PREFETCHNTA, PREFETCHT0, PREFETCHT1, PREFETCHT2, PSADBW, PSHUFB,
            PSHUFD, PSHUFHW, PSHUFLW, PSHUFW, PSIGNB, PSIGND, PSIGNW, PSLLD,
            PSLLDQ, PSLLQ, PSLLW, PSRAD, PSRAW, PSRLD, PSRLDQ, PSRLQ, PSRLW,
            PSUBB, PSUBD, PSUBQ, PSUBSB, PSUBSW, PSUBUSB, PSUBUSW, PSUBW, PTEST,
            PUNPCKHBW, PUNPCKHDQ, PUNPCKHQDQ, PUNPCKHWD, PUNPCKLBW, PUNPCKLDQ,
            PUNPCKLQDQ, PUNPCKLWD, PUSH, PUSHA, PUSHAD, PUSHF, PUSHFD, PUSHFQ,
            PXOR, RCL, RCPPS, RCPSS, RCR, RDMSR, RDPMC, RDTSC, RDTSCP, REP, REPE,
            REPNE, RETF, RETN, REX, ROL, ROR, ROUNDPD, ROUNDPS, ROUNDSD, ROUNDSS,
            RSM, RSQRTPS, RSQRTSS, SAHF, SAL, SAR, SBB, SCASB, SCASD, SCASQ,
            SCASW, SETA, SETALC, SETC, SETE, SETG, SETGE, SETNA, SETNC, SETNE,
            SETNG, SETNGE, SETNO, SETNS, SETO, SETPE, SETPO, SETS, SFENCE, SGDT,
            SHL, SHLD, SHR, SHRD, SHUFPD, SHUFPS, SIDT, SLDT, SMSW, SQRTPD,
            SQRTPS, SQRTSD, SQRTSS, SS, STC, STD, STI, STMXCSR, STOSB, STOSD,
            STOSQ, STOSW, STR, SUB, SUBPD, SUBPS, SUBSD, SUBSS, SWAPGS, SYSCALL,
            SYSENTER, SYSEXIT, SYSRET, TAKEN, TEST, UCOMISD, UCOMISS, UD1, UD2,
            UNPCKHPD, UNPCKHPS, UNPCKLPD, UNPCKLPS, VERR, VERW, VMCALL, VMCLEAR,
            VMLAUNCH, VMPTRLD, VMPTRST, VMREAD, VMRESUME, VMWRITE, VMXOFF, VMXON,
            WAIT, WBINVD, WRMSR, XADD, XCHG, XGETBV, XLATB, XOR, XORPD, XORPS,
            XRSTOR, XSAVE, XSETBV,
            // REX.B, REX.R, REX.RB, REX.RX, REX.RXB, REX.W,  
            // REX.WB, REX.WR, REX.WRB, REX.WRX, REX.WRXB, REX.WX, REX.WXB, REX.X,  
            // REX.XB, 
            HINT_NOP
        }
}
