public InstructionGroups(GenTypes genTypes) { this.genTypes = genTypes; var encoderTypes = genTypes.GetObject <EncoderTypes>(TypeIds.EncoderTypes); legacyToOpKind = encoderTypes.LegacyOpHandlers.ToDictionary(a => (LegacyOpKind)a.legacyOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value); vexToOpKind = encoderTypes.VexOpHandlers.ToDictionary(a => (VexOpKind)a.vexOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value); xopToOpKind = encoderTypes.XopOpHandlers.ToDictionary(a => (XopOpKind)a.xopOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value); evexToOpKind = encoderTypes.EvexOpHandlers.ToDictionary(a => (EvexOpKind)a.evexOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value); d3nowOps = new OpCodeOperandKind[] { OpCodeOperandKind.mm_reg, OpCodeOperandKind.mm_or_mem, }; ignoredCodes = genTypes.GetKeptCodeValues(new[] { Code.INVALID, Code.DeclareByte, Code.DeclareWord, Code.DeclareDword, Code.DeclareQword, Code.Jo_rel8_16, Code.Jo_rel8_32, Code.Jo_rel8_64, Code.Jno_rel8_16, Code.Jno_rel8_32, Code.Jno_rel8_64, Code.Jb_rel8_16, Code.Jb_rel8_32, Code.Jb_rel8_64, Code.Jae_rel8_16, Code.Jae_rel8_32, Code.Jae_rel8_64, Code.Je_rel8_16, Code.Je_rel8_32, Code.Je_rel8_64, Code.Jne_rel8_16, Code.Jne_rel8_32, Code.Jne_rel8_64, Code.Jbe_rel8_16, Code.Jbe_rel8_32, Code.Jbe_rel8_64, Code.Ja_rel8_16, Code.Ja_rel8_32, Code.Ja_rel8_64, Code.Js_rel8_16, Code.Js_rel8_32, Code.Js_rel8_64, Code.Jns_rel8_16, Code.Jns_rel8_32, Code.Jns_rel8_64, Code.Jp_rel8_16, Code.Jp_rel8_32, Code.Jp_rel8_64, Code.Jnp_rel8_16, Code.Jnp_rel8_32, Code.Jnp_rel8_64, Code.Jl_rel8_16, Code.Jl_rel8_32, Code.Jl_rel8_64, Code.Jge_rel8_16, Code.Jge_rel8_32, Code.Jge_rel8_64, Code.Jle_rel8_16, Code.Jle_rel8_32, Code.Jle_rel8_64, Code.Jg_rel8_16, Code.Jg_rel8_32, Code.Jg_rel8_64, Code.Jo_rel16, Code.Jo_rel32_32, Code.Jo_rel32_64, Code.Jno_rel16, Code.Jno_rel32_32, Code.Jno_rel32_64, Code.Jb_rel16, Code.Jb_rel32_32, Code.Jb_rel32_64, Code.Jae_rel16, Code.Jae_rel32_32, Code.Jae_rel32_64, Code.Je_rel16, Code.Je_rel32_32, Code.Je_rel32_64, Code.Jne_rel16, Code.Jne_rel32_32, Code.Jne_rel32_64, Code.Jbe_rel16, Code.Jbe_rel32_32, Code.Jbe_rel32_64, Code.Ja_rel16, Code.Ja_rel32_32, Code.Ja_rel32_64, Code.Js_rel16, Code.Js_rel32_32, Code.Js_rel32_64, Code.Jns_rel16, Code.Jns_rel32_32, Code.Jns_rel32_64, Code.Jp_rel16, Code.Jp_rel32_32, Code.Jp_rel32_64, Code.Jnp_rel16, Code.Jnp_rel32_32, Code.Jnp_rel32_64, Code.Jl_rel16, Code.Jl_rel32_32, Code.Jl_rel32_64, Code.Jge_rel16, Code.Jge_rel32_32, Code.Jge_rel32_64, Code.Jle_rel16, Code.Jle_rel32_32, Code.Jle_rel32_64, Code.Jg_rel16, Code.Jg_rel32_32, Code.Jg_rel32_64, Code.Loopne_rel8_16_CX, Code.Loopne_rel8_32_CX, Code.Loopne_rel8_16_ECX, Code.Loopne_rel8_32_ECX, Code.Loopne_rel8_64_ECX, Code.Loopne_rel8_16_RCX, Code.Loopne_rel8_64_RCX, Code.Loope_rel8_16_CX, Code.Loope_rel8_32_CX, Code.Loope_rel8_16_ECX, Code.Loope_rel8_32_ECX, Code.Loope_rel8_64_ECX, Code.Loope_rel8_16_RCX, Code.Loope_rel8_64_RCX, Code.Loop_rel8_16_CX, Code.Loop_rel8_32_CX, Code.Loop_rel8_16_ECX, Code.Loop_rel8_32_ECX, Code.Loop_rel8_64_ECX, Code.Loop_rel8_16_RCX, Code.Loop_rel8_64_RCX, Code.Jcxz_rel8_16, Code.Jcxz_rel8_32, Code.Jecxz_rel8_16, Code.Jecxz_rel8_32, Code.Jecxz_rel8_64, Code.Jrcxz_rel8_16, Code.Jrcxz_rel8_64, Code.Call_rel16, Code.Call_rel32_32, Code.Call_rel32_64, Code.Jmp_rel16, Code.Jmp_rel32_32, Code.Jmp_rel32_64, Code.Jmp_rel8_16, Code.Jmp_rel8_32, Code.Jmp_rel8_64, Code.Jmpe_disp16, Code.Jmpe_disp32, Code.Call_ptr1616, Code.Call_ptr1632, Code.Jmp_ptr1616, Code.Jmp_ptr1632, Code.Xbegin_rel16, Code.Xbegin_rel32, Code.Insb_m8_DX, Code.Insw_m16_DX, Code.Insd_m32_DX, Code.Outsb_DX_m8, Code.Outsw_DX_m16, Code.Outsd_DX_m32, Code.Stosb_m8_AL, Code.Stosw_m16_AX, Code.Stosd_m32_EAX, Code.Stosq_m64_RAX, Code.Lodsb_AL_m8, Code.Lodsw_AX_m16, Code.Lodsd_EAX_m32, Code.Lodsq_RAX_m64, Code.Scasb_AL_m8, Code.Scasw_AX_m16, Code.Scasd_EAX_m32, Code.Scasq_RAX_m64, Code.Movsb_m8_m8, Code.Movsw_m16_m16, Code.Movsd_m32_m32, Code.Movsq_m64_m64, Code.Cmpsb_m8_m8, Code.Cmpsw_m16_m16, Code.Cmpsd_m32_m32, Code.Cmpsq_m64_m64, Code.Maskmovq_rDI_mm_mm, Code.Maskmovdqu_rDI_xmm_xmm, Code.VEX_Vmaskmovdqu_rDI_xmm_xmm, }).ToHashSet(); }