text: /* 
  SPDX-License-Identifier: MIT
  Copyright (C) 2018-present iced project and contributors
   */
  
  // ⚠️This file was generated by GENERATOR!🦹‍♂️
  
  #pragma once
  
  #if defined(INSTR_INFO)
  #include <array>
  #include <stdexcept>
  #include <string>
  #include "ToString.h"
  #include "Internal/StringHelpers.h"
  namespace Iced::Intel {
  	enum class CpuidFeature {
  		/// <summary>8086 or later</summary>
  		INTEL8086  = 0,
  		/// <summary>8086 only</summary>
  		INTEL8086_ONLY  = 1,
  		/// <summary>80186 or later</summary>
  		INTEL186  = 2,
  		/// <summary>80286 or later</summary>
  		INTEL286  = 3,
  		/// <summary>80286 only</summary>
  		INTEL286_ONLY  = 4,
  		/// <summary>80386 or later</summary>
  		INTEL386  = 5,
  		/// <summary>80386 only</summary>
  		INTEL386_ONLY  = 6,
  		/// <summary>80386 A0-B0 stepping only (<c>XBTS</c>, <c>IBTS</c> instructions)</summary>
  		INTEL386_A0_ONLY  = 7,
  		/// <summary>Intel486 or later</summary>
  		INTEL486  = 8,
  		/// <summary>Intel486 A stepping only (<c>CMPXCHG</c>)</summary>
  		INTEL486_A_ONLY  = 9,
  		/// <summary>UMOV (80386 and Intel486)</summary>
  		UMOV  = 10,
  		/// <summary>IA-64</summary>
  		IA64  = 11,
  		/// <summary>CPUID.80000001H:EDX.LM[bit 29]</summary>
  		X64  = 12,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.ADX[bit 19]</summary>
  		ADX  = 13,
  		/// <summary>CPUID.01H:ECX.AES[bit 25]</summary>
  		AES  = 14,
  		/// <summary>CPUID.01H:ECX.AVX[bit 28]</summary>
  		AVX  = 15,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX2[bit 5]</summary>
  		AVX2  = 16,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AVX512_4FMAPS[bit 3]</summary>
  		AVX512_4FMAPS  = 17,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AVX512_4VNNIW[bit 2]</summary>
  		AVX512_4VNNIW  = 18,
  		/// <summary>CPUID.(EAX=07H, ECX=1H):EAX.AVX512_BF16[bit 5]</summary>
  		AVX512_BF16  = 19,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.AVX512_BITALG[bit 12]</summary>
  		AVX512_BITALG  = 20,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512_IFMA[bit 21]</summary>
  		AVX512_IFMA  = 21,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.AVX512_VBMI[bit 1]</summary>
  		AVX512_VBMI  = 22,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.AVX512_VBMI2[bit 6]</summary>
  		AVX512_VBMI2  = 23,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.AVX512_VNNI[bit 11]</summary>
  		AVX512_VNNI  = 24,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AVX512_VP2INTERSECT[bit 08]</summary>
  		AVX512_VP2INTERSECT  = 25,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.AVX512_VPOPCNTDQ[bit 14]</summary>
  		AVX512_VPOPCNTDQ  = 26,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512BW[bit 30]</summary>
  		AVX512BW  = 27,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512CD[bit 28]</summary>
  		AVX512CD  = 28,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512DQ[bit 17]</summary>
  		AVX512DQ  = 29,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512ER[bit 27]</summary>
  		AVX512ER  = 30,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512F[bit 16]</summary>
  		AVX512F  = 31,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512PF[bit 26]</summary>
  		AVX512PF  = 32,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.AVX512VL[bit 31]</summary>
  		AVX512VL  = 33,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.BMI1[bit 3]</summary>
  		BMI1  = 34,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.BMI2[bit 8]</summary>
  		BMI2  = 35,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.CET_IBT[bit 20]</summary>
  		CET_IBT  = 36,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.CET_SS[bit 7]</summary>
  		CET_SS  = 37,
  		/// <summary><c>CL1INVMB</c> instruction (Intel SCC = Single-Chip Computer)</summary>
  		CL1INVMB  = 38,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.CLDEMOTE[bit 25]</summary>
  		CLDEMOTE  = 39,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.CLFLUSHOPT[bit 23]</summary>
  		CLFLUSHOPT  = 40,
  		/// <summary>CPUID.01H:EDX.CLFSH[bit 19]</summary>
  		CLFSH  = 41,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.CLWB[bit 24]</summary>
  		CLWB  = 42,
  		/// <summary>CPUID.80000008H:EBX.CLZERO[bit 0]</summary>
  		CLZERO  = 43,
  		/// <summary>CPUID.01H:EDX.CMOV[bit 15]</summary>
  		CMOV  = 44,
  		/// <summary>CPUID.01H:ECX.CMPXCHG16B[bit 13]</summary>
  		CMPXCHG16B  = 45,
  		/// <summary><c>RFLAGS.ID</c> can be toggled</summary>
  		CPUID  = 46,
  		/// <summary>CPUID.01H:EDX.CX8[bit 8]</summary>
  		CX8  = 47,
  		/// <summary>CPUID.80000001H:EDX.3DNOW[bit 31]</summary>
  		D3NOW  = 48,
  		/// <summary>CPUID.80000001H:EDX.3DNOWEXT[bit 30]</summary>
  		D3NOWEXT  = 49,
  		/// <summary>CPUID.(EAX=12H, ECX=0H):EAX.OSS[bit 5]</summary>
  		OSS  = 50,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.ENQCMD[bit 29]</summary>
  		ENQCMD  = 51,
  		/// <summary>CPUID.01H:ECX.F16C[bit 29]</summary>
  		F16C  = 52,
  		/// <summary>CPUID.01H:ECX.FMA[bit 12]</summary>
  		FMA  = 53,
  		/// <summary>CPUID.80000001H:ECX.FMA4[bit 16]</summary>
  		FMA4  = 54,
  		/// <summary>8087 or later (CPUID.01H:EDX.FPU[bit 0])</summary>
  		FPU  = 55,
  		/// <summary>80287 or later</summary>
  		FPU287  = 56,
  		/// <summary>80287XL only</summary>
  		FPU287XL_ONLY  = 57,
  		/// <summary>80387 or later</summary>
  		FPU387  = 58,
  		/// <summary>80387SL only</summary>
  		FPU387SL_ONLY  = 59,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.FSGSBASE[bit 0]</summary>
  		FSGSBASE  = 60,
  		/// <summary>CPUID.01H:EDX.FXSR[bit 24]</summary>
  		FXSR  = 61,
  		/// <summary>Cyrix (AMD Geode GX/LX) 3DNow! instructions</summary>
  		CYRIX_D3NOW  = 62,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.GFNI[bit 8]</summary>
  		GFNI  = 63,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.HLE[bit 4]</summary>
  		HLE  = 64,
  		/// <summary><see cref="HLE"/> or <see cref="RTM"/></summary>
  		HLE_or_RTM  = 65,
  		/// <summary>IA32_VMX_EPT_VPID_CAP[bit 20]</summary>
  		INVEPT  = 66,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.INVPCID[bit 10]</summary>
  		INVPCID  = 67,
  		/// <summary>IA32_VMX_EPT_VPID_CAP[bit 32]</summary>
  		INVVPID  = 68,
  		/// <summary>CPUID.80000001H:ECX.LWP[bit 15]</summary>
  		LWP  = 69,
  		/// <summary>CPUID.80000001H:ECX.LZCNT[bit 5]</summary>
  		LZCNT  = 70,
  		/// <summary>CPUID.80000008H:EBX.MCOMMIT[bit 8]</summary>
  		MCOMMIT  = 71,
  		/// <summary>CPUID.01H:EDX.MMX[bit 23]</summary>
  		MMX  = 72,
  		/// <summary>CPUID.01H:ECX.MONITOR[bit 3]</summary>
  		MONITOR  = 73,
  		/// <summary>CPUID.80000001H:ECX.MONITORX[bit 29]</summary>
  		MONITORX  = 74,
  		/// <summary>CPUID.01H:ECX.MOVBE[bit 22]</summary>
  		MOVBE  = 75,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.MOVDIR64B[bit 28]</summary>
  		MOVDIR64B  = 76,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.MOVDIRI[bit 27]</summary>
  		MOVDIRI  = 77,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.MPX[bit 14]</summary>
  		MPX  = 78,
  		/// <summary>CPUID.01H:EDX.MSR[bit 5]</summary>
  		MSR  = 79,
  		/// <summary>Multi-byte nops (<c>0F1F /0</c>): CPUID.01H.EAX[Bits 11:8] = 0110B or 1111B</summary>
  		MULTIBYTENOP  = 80,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.ACE[Bits 7:6] = 11B ([6] = exists, [7] = enabled)</summary>
  		PADLOCK_ACE  = 81,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.PHE[Bits 11:10] = 11B ([10] = exists, [11] = enabled)</summary>
  		PADLOCK_PHE  = 82,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.PMM[Bits 13:12] = 11B ([12] = exists, [13] = enabled)</summary>
  		PADLOCK_PMM  = 83,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.RNG[Bits 3:2] = 11B ([2] = exists, [3] = enabled)</summary>
  		PADLOCK_RNG  = 84,
  		/// <summary><c>PAUSE</c> instruction (Pentium 4 or later)</summary>
  		PAUSE  = 85,
  		/// <summary>CPUID.01H:ECX.PCLMULQDQ[bit 1]</summary>
  		PCLMULQDQ  = 86,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.PCOMMIT[bit 22]</summary>
  		PCOMMIT  = 87,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.PCONFIG[bit 18]</summary>
  		PCONFIG  = 88,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.PKU[bit 3]</summary>
  		PKU  = 89,
  		/// <summary>CPUID.01H:ECX.POPCNT[bit 23]</summary>
  		POPCNT  = 90,
  		/// <summary>CPUID.80000001H:ECX.PREFETCHW[bit 8]</summary>
  		PREFETCHW  = 91,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.PREFETCHWT1[bit 0]</summary>
  		PREFETCHWT1  = 92,
  		/// <summary>CPUID.(EAX=14H, ECX=0H):EBX.PTWRITE[bit 4]</summary>
  		PTWRITE  = 93,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.RDPID[bit 22]</summary>
  		RDPID  = 94,
  		/// <summary><c>RDPMC</c> instruction (Pentium MMX or later, or Pentium Pro or later)</summary>
  		RDPMC  = 95,
  		/// <summary>CPUID.80000008H:EBX.RDPRU[bit 4]</summary>
  		RDPRU  = 96,
  		/// <summary>CPUID.01H:ECX.RDRAND[bit 30]</summary>
  		RDRAND  = 97,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18]</summary>
  		RDSEED  = 98,
  		/// <summary>CPUID.80000001H:EDX.RDTSCP[bit 27]</summary>
  		RDTSCP  = 99,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.RTM[bit 11]</summary>
  		RTM  = 100,
  		/// <summary>CPUID.01H:EDX.SEP[bit 11]</summary>
  		SEP  = 101,
  		/// <summary>CPUID.(EAX=12H, ECX=0H):EAX.SGX1[bit 0]</summary>
  		SGX1  = 102,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.SHA[bit 29]</summary>
  		SHA  = 103,
  		/// <summary>CPUID.80000001H:ECX.SKINIT[bit 12]</summary>
  		SKINIT  = 104,
  		/// <summary><see cref="SKINIT"/> or <see cref="SVM"/></summary>
  		SKINIT_or_SVM  = 105,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EBX.SMAP[bit 20]</summary>
  		SMAP  = 106,
  		/// <summary>CPUID.01H:ECX.SMX[bit 6]</summary>
  		SMX  = 107,
  		/// <summary>CPUID.01H:EDX.SSE[bit 25]</summary>
  		SSE  = 108,
  		/// <summary>CPUID.01H:EDX.SSE2[bit 26]</summary>
  		SSE2  = 109,
  		/// <summary>CPUID.01H:ECX.SSE3[bit 0]</summary>
  		SSE3  = 110,
  		/// <summary>CPUID.01H:ECX.SSE4_1[bit 19]</summary>
  		SSE4_1  = 111,
  		/// <summary>CPUID.01H:ECX.SSE4_2[bit 20]</summary>
  		SSE4_2  = 112,
  		/// <summary>CPUID.80000001H:ECX.SSE4A[bit 6]</summary>
  		SSE4A  = 113,
  		/// <summary>CPUID.01H:ECX.SSSE3[bit 9]</summary>
  		SSSE3  = 114,
  		/// <summary>CPUID.80000001H:ECX.SVM[bit 2]</summary>
  		SVM  = 115,
  		/// <summary>CPUID.8000001FH:EAX.SEV-ES[bit 3]</summary>
  		SEV_ES  = 116,
  		/// <summary>CPUID.80000001H:EDX.SYSCALL[bit 11]</summary>
  		SYSCALL  = 117,
  		/// <summary>CPUID.80000001H:ECX.TBM[bit 21]</summary>
  		TBM  = 118,
  		/// <summary>CPUID.01H:EDX.TSC[bit 4]</summary>
  		TSC  = 119,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.VAES[bit 9]</summary>
  		VAES  = 120,
  		/// <summary>CPUID.01H:ECX.VMX[bit 5]</summary>
  		VMX  = 121,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.VPCLMULQDQ[bit 10]</summary>
  		VPCLMULQDQ  = 122,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.WAITPKG[bit 5]</summary>
  		WAITPKG  = 123,
  		/// <summary>CPUID.(EAX=80000008H, ECX=0H):EBX.WBNOINVD[bit 9]</summary>
  		WBNOINVD  = 124,
  		/// <summary>CPUID.80000001H:ECX.XOP[bit 11]</summary>
  		XOP  = 125,
  		/// <summary>CPUID.01H:ECX.XSAVE[bit 26]</summary>
  		XSAVE  = 126,
  		/// <summary>CPUID.(EAX=0DH, ECX=1H):EAX.XSAVEC[bit 1]</summary>
  		XSAVEC  = 127,
  		/// <summary>CPUID.(EAX=0DH, ECX=1H):EAX.XSAVEOPT[bit 0]</summary>
  		XSAVEOPT  = 128,
  		/// <summary>CPUID.(EAX=0DH, ECX=1H):EAX.XSAVES[bit 3]</summary>
  		XSAVES  = 129,
  		/// <summary>CPUID.8000001FH:EAX.SEV-SNP[bit 4]</summary>
  		SEV_SNP  = 130,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.SERIALIZE[bit 14]</summary>
  		SERIALIZE  = 131,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.TSXLDTRK[bit 16]</summary>
  		TSXLDTRK  = 132,
  		/// <summary>CPUID.80000008H:EBX.INVLPGB[bit 3]</summary>
  		INVLPGB  = 133,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AMX-BF16[bit 22]</summary>
  		AMX_BF16  = 134,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AMX-TILE[bit 24]</summary>
  		AMX_TILE  = 135,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AMX-INT8[bit 25]</summary>
  		AMX_INT8  = 136,
  		/// <summary>Cyrix FPU instructions (Cyrix, AMD Geode GX/LX)</summary>
  		CYRIX_FPU  = 137,
  		/// <summary>Cyrix SMM instructions: <c>SVDC</c>, <c>RSDC</c>, <c>SVLDT</c>, <c>RSLDT</c>, <c>SVTS</c>, <c>RSTS</c> (Cyrix, AMD Geode GX/LX)</summary>
  		CYRIX_SMM  = 138,
  		/// <summary>Cyrix <c>SMINT 0F38</c> (6x86MX and later, AMD Geode GX/LX)</summary>
  		CYRIX_SMINT  = 139,
  		/// <summary>Cyrix <c>SMINT 0F7E</c> (6x86 or earlier)</summary>
  		CYRIX_SMINT_0F7E  = 140,
  		/// <summary>Cyrix SMM instructions: <c>RDSHR</c>, <c>WRSHR</c> (6x86MX, M II, Cyrix III)</summary>
  		CYRIX_SHR  = 141,
  		/// <summary>Cyrix DDI instructions: <c>BB0_Reset</c>, <c>BB1_Reset</c>, <c>CPU_READ</c>, <c>CPU_WRITE</c> (MediaGX, GXm, GXLV, GX1)</summary>
  		CYRIX_DDI  = 142,
  		/// <summary>Cyrix AND CPUID.80000001H:EDX.EMMI[bit 24]</summary>
  		CYRIX_EMMI  = 143,
  		/// <summary>Cyrix DMI instructions: <c>DMINT</c>, <c>RDM</c> (AMD Geode GX/LX)</summary>
  		CYRIX_DMI  = 144,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.AIS[Bits 1:0] = 11B ([0] = exists, [1] = enabled)</summary>
  		CENTAUR_AIS  = 145,
  		/// <summary>MOV to/from TR (80386, Intel486, Cyrix, Geode)</summary>
  		MOV_TR  = 146,
  		/// <summary><c>RSM</c> instruction (some 386s, some 486s, Pentium and later)</summary>
  		SMM  = 147,
  		/// <summary>CPUID.(EAX=??H, ECX=?H):???.????[bit ??]</summary>
  		TDX  = 148,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):ECX.KL[bit 23]</summary>
  		KL  = 149,
  		/// <summary>CPUID.19H:EBX.AESKLE[bit 0]</summary>
  		AESKLE  = 150,
  		/// <summary>CPUID.19H:EBX.WIDE_KL[bit 2]</summary>
  		WIDE_KL  = 151,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.UINTR[bit 5]</summary>
  		UINTR  = 152,
  		/// <summary>CPUID.(EAX=07H, ECX=01H):EAX.HRESET[bit 22]</summary>
  		HRESET  = 153,
  		/// <summary>CPUID.(EAX=07H, ECX=01H):EAX.AVX-VNNI[bit 4]</summary>
  		AVX_VNNI  = 154,
  		/// <summary>CPUID.0C0000000H:EAX &gt;= 0C0000001H AND CPUID.0C0000001H:EDX.GMI[Bits 5:4] = 11B ([4] = exists, [5] = enabled)</summary>
  		PADLOCK_GMI  = 155,
  		/// <summary>CPUID.(EAX=07H, ECX=01H):EAX.FRED[bit 17]</summary>
  		FRED  = 156,
  		/// <summary>CPUID.(EAX=07H, ECX=01H):EAX.LKGS[bit 18]</summary>
  		LKGS  = 157,
  		/// <summary>CPUID.(EAX=07H, ECX=0H):EDX.AVX512-FP16[bit 23]</summary>
  		AVX512_FP16  = 158,
  		/// <summary>Undocumented Intel <c>RDUDBG</c> and <c>WRUDBG</c> instructions</summary>
  		UDBG  = 159,
  		/// <summary>Intel Knights Corner</summary>
  		KNC  = 160,
  	};
  	constexpr int operator+(const CpuidFeature& a, const CpuidFeature& b) { return ((int)a + (int)b); }
  	constexpr int operator+(const CpuidFeature& a, const int& b) { return ((int)a + b); }
  	constexpr int operator+(const int& a, const CpuidFeature& b) { return (a + (int)b); }
  	constexpr int operator-(const CpuidFeature& a, const CpuidFeature& b) { return ((int)a - (int)b); }
  	constexpr int operator-(const CpuidFeature& a, const int& b) { return ((int)a - b); }
  	constexpr int operator-(const int& a, const CpuidFeature& b) { return (a - (int)b); }
  	constexpr CpuidFeature operator++(CpuidFeature& a, int) { auto temp = a; a = CpuidFeature(a + 1); return temp; }
  	constexpr CpuidFeature& operator++(CpuidFeature& a) { return a = CpuidFeature(a + 1); }
  	constexpr CpuidFeature operator--(CpuidFeature& a, int) { auto temp = a; a = CpuidFeature(a - 1); return temp; }
  	constexpr CpuidFeature& operator--(CpuidFeature& a) { return a = CpuidFeature(a - 1); }
  	constexpr bool operator==(const CpuidFeature& a, const int& b) { return ((int)a == b); }
  	constexpr bool operator==(const int& a, const CpuidFeature& b) { return (a == (int)b); }
  	constexpr bool operator>=(const CpuidFeature& a, const int& b) { return ((int)a >= b); }
  	constexpr bool operator>=(const int& a, const CpuidFeature& b) { return (a >= (int)b); }
  	constexpr bool operator<=(const CpuidFeature& a, const int& b) { return ((int)a <= b); }
  	constexpr bool operator<=(const int& a, const CpuidFeature& b) { return (a <= (int)b); }
  	constexpr bool operator>(const CpuidFeature& a, const int& b) { return ((int)a > b); }
  	constexpr bool operator>(const int& a, const CpuidFeature& b) { return (a > (int)b); }
  	constexpr bool operator<(const CpuidFeature& a, const int& b) { return ((int)a < b); }
  	constexpr bool operator<(const int& a, const CpuidFeature& b) { return (a < (int)b); }
  	constexpr bool operator!=(const CpuidFeature& a, const int& b) { return ((int)a != b); }
  	constexpr bool operator!=(const int& a, const CpuidFeature& b) { return (a != (int)b); }
  }
  template <>
  constexpr std::string Iced::Intel::ToString(const Iced::Intel::CpuidFeature& e) {
  	switch (e) {
  		case Iced::Intel::CpuidFeature::INTEL8086: return "INTEL8086";
  		case Iced::Intel::CpuidFeature::INTEL8086_ONLY: return "INTEL8086_ONLY";
  		case Iced::Intel::CpuidFeature::INTEL186: return "INTEL186";
  		case Iced::Intel::CpuidFeature::INTEL286: return "INTEL286";
  		case Iced::Intel::CpuidFeature::INTEL286_ONLY: return "INTEL286_ONLY";
  		case Iced::Intel::CpuidFeature::INTEL386: return "INTEL386";
  		case Iced::Intel::CpuidFeature::INTEL386_ONLY: return "INTEL386_ONLY";
  		case Iced::Intel::CpuidFeature::INTEL386_A0_ONLY: return "INTEL386_A0_ONLY";
  		case Iced::Intel::CpuidFeature::INTEL486: return "INTEL486";
  		case Iced::Intel::CpuidFeature::INTEL486_A_ONLY: return "INTEL486_A_ONLY";
  		case Iced::Intel::CpuidFeature::UMOV: return "UMOV";
  		case Iced::Intel::CpuidFeature::IA64: return "IA64";
  		case Iced::Intel::CpuidFeature::X64: return "X64";
  		case Iced::Intel::CpuidFeature::ADX: return "ADX";
  		case Iced::Intel::CpuidFeature::AES: return "AES";
  		case Iced::Intel::CpuidFeature::AVX: return "AVX";
  		case Iced::Intel::CpuidFeature::AVX2: return "AVX2";
  		case Iced::Intel::CpuidFeature::AVX512_4FMAPS: return "AVX512_4FMAPS";
  		case Iced::Intel::CpuidFeature::AVX512_4VNNIW: return "AVX512_4VNNIW";
  		case Iced::Intel::CpuidFeature::AVX512_BF16: return "AVX512_BF16";
  		case Iced::Intel::CpuidFeature::AVX512_BITALG: return "AVX512_BITALG";
  		case Iced::Intel::CpuidFeature::AVX512_IFMA: return "AVX512_IFMA";
  		case Iced::Intel::CpuidFeature::AVX512_VBMI: return "AVX512_VBMI";
  		case Iced::Intel::CpuidFeature::AVX512_VBMI2: return "AVX512_VBMI2";
  		case Iced::Intel::CpuidFeature::AVX512_VNNI: return "AVX512_VNNI";
  		case Iced::Intel::CpuidFeature::AVX512_VP2INTERSECT: return "AVX512_VP2INTERSECT";
  		case Iced::Intel::CpuidFeature::AVX512_VPOPCNTDQ: return "AVX512_VPOPCNTDQ";
  		case Iced::Intel::CpuidFeature::AVX512BW: return "AVX512BW";
  		case Iced::Intel::CpuidFeature::AVX512CD: return "AVX512CD";
  		case Iced::Intel::CpuidFeature::AVX512DQ: return "AVX512DQ";
  		case Iced::Intel::CpuidFeature::AVX512ER: return "AVX512ER";
  		case Iced::Intel::CpuidFeature::AVX512F: return "AVX512F";
  		case Iced::Intel::CpuidFeature::AVX512PF: return "AVX512PF";
  		case Iced::Intel::CpuidFeature::AVX512VL: return "AVX512VL";
  		case Iced::Intel::CpuidFeature::BMI1: return "BMI1";
  		case Iced::Intel::CpuidFeature::BMI2: return "BMI2";
  		case Iced::Intel::CpuidFeature::CET_IBT: return "CET_IBT";
  		case Iced::Intel::CpuidFeature::CET_SS: return "CET_SS";
  		case Iced::Intel::CpuidFeature::CL1INVMB: return "CL1INVMB";
  		case Iced::Intel::CpuidFeature::CLDEMOTE: return "CLDEMOTE";
  		case Iced::Intel::CpuidFeature::CLFLUSHOPT: return "CLFLUSHOPT";
  		case Iced::Intel::CpuidFeature::CLFSH: return "CLFSH";
  		case Iced::Intel::CpuidFeature::CLWB: return "CLWB";
  		case Iced::Intel::CpuidFeature::CLZERO: return "CLZERO";
  		case Iced::Intel::CpuidFeature::CMOV: return "CMOV";
  		case Iced::Intel::CpuidFeature::CMPXCHG16B: return "CMPXCHG16B";
  		case Iced::Intel::CpuidFeature::CPUID: return "CPUID";
  		case Iced::Intel::CpuidFeature::CX8: return "CX8";
  		case Iced::Intel::CpuidFeature::D3NOW: return "D3NOW";
  		case Iced::Intel::CpuidFeature::D3NOWEXT: return "D3NOWEXT";
  		case Iced::Intel::CpuidFeature::OSS: return "OSS";
  		case Iced::Intel::CpuidFeature::ENQCMD: return "ENQCMD";
  		case Iced::Intel::CpuidFeature::F16C: return "F16C";
  		case Iced::Intel::CpuidFeature::FMA: return "FMA";
  		case Iced::Intel::CpuidFeature::FMA4: return "FMA4";
  		case Iced::Intel::CpuidFeature::FPU: return "FPU";
  		case Iced::Intel::CpuidFeature::FPU287: return "FPU287";
  		case Iced::Intel::CpuidFeature::FPU287XL_ONLY: return "FPU287XL_ONLY";
  		case Iced::Intel::CpuidFeature::FPU387: return "FPU387";
  		case Iced::Intel::CpuidFeature::FPU387SL_ONLY: return "FPU387SL_ONLY";
  		case Iced::Intel::CpuidFeature::FSGSBASE: return "FSGSBASE";
  		case Iced::Intel::CpuidFeature::FXSR: return "FXSR";
  		case Iced::Intel::CpuidFeature::CYRIX_D3NOW: return "CYRIX_D3NOW";
  		case Iced::Intel::CpuidFeature::GFNI: return "GFNI";
  		case Iced::Intel::CpuidFeature::HLE: return "HLE";
  		case Iced::Intel::CpuidFeature::HLE_or_RTM: return "HLE_or_RTM";
  		case Iced::Intel::CpuidFeature::INVEPT: return "INVEPT";
  		case Iced::Intel::CpuidFeature::INVPCID: return "INVPCID";
  		case Iced::Intel::CpuidFeature::INVVPID: return "INVVPID";
  		case Iced::Intel::CpuidFeature::LWP: return "LWP";
  		case Iced::Intel::CpuidFeature::LZCNT: return "LZCNT";
  		case Iced::Intel::CpuidFeature::MCOMMIT: return "MCOMMIT";
  		case Iced::Intel::CpuidFeature::MMX: return "MMX";
  		case Iced::Intel::CpuidFeature::MONITOR: return "MONITOR";
  		case Iced::Intel::CpuidFeature::MONITORX: return "MONITORX";
  		case Iced::Intel::CpuidFeature::MOVBE: return "MOVBE";
  		case Iced::Intel::CpuidFeature::MOVDIR64B: return "MOVDIR64B";
  		case Iced::Intel::CpuidFeature::MOVDIRI: return "MOVDIRI";
  		case Iced::Intel::CpuidFeature::MPX: return "MPX";
  		case Iced::Intel::CpuidFeature::MSR: return "MSR";
  		case Iced::Intel::CpuidFeature::MULTIBYTENOP: return "MULTIBYTENOP";
  		case Iced::Intel::CpuidFeature::PADLOCK_ACE: return "PADLOCK_ACE";
  		case Iced::Intel::CpuidFeature::PADLOCK_PHE: return "PADLOCK_PHE";
  		case Iced::Intel::CpuidFeature::PADLOCK_PMM: return "PADLOCK_PMM";
  		case Iced::Intel::CpuidFeature::PADLOCK_RNG: return "PADLOCK_RNG";
  		case Iced::Intel::CpuidFeature::PAUSE: return "PAUSE";
  		case Iced::Intel::CpuidFeature::PCLMULQDQ: return "PCLMULQDQ";
  		case Iced::Intel::CpuidFeature::PCOMMIT: return "PCOMMIT";
  		case Iced::Intel::CpuidFeature::PCONFIG: return "PCONFIG";
  		case Iced::Intel::CpuidFeature::PKU: return "PKU";
  		case Iced::Intel::CpuidFeature::POPCNT: return "POPCNT";
  		case Iced::Intel::CpuidFeature::PREFETCHW: return "PREFETCHW";
  		case Iced::Intel::CpuidFeature::PREFETCHWT1: return "PREFETCHWT1";
  		case Iced::Intel::CpuidFeature::PTWRITE: return "PTWRITE";
  		case Iced::Intel::CpuidFeature::RDPID: return "RDPID";
  		case Iced::Intel::CpuidFeature::RDPMC: return "RDPMC";
  		case Iced::Intel::CpuidFeature::RDPRU: return "RDPRU";
  		case Iced::Intel::CpuidFeature::RDRAND: return "RDRAND";
  		case Iced::Intel::CpuidFeature::RDSEED: return "RDSEED";
  		case Iced::Intel::CpuidFeature::RDTSCP: return "RDTSCP";
  		case Iced::Intel::CpuidFeature::RTM: return "RTM";
  		case Iced::Intel::CpuidFeature::SEP: return "SEP";
  		case Iced::Intel::CpuidFeature::SGX1: return "SGX1";
  		case Iced::Intel::CpuidFeature::SHA: return "SHA";
  		case Iced::Intel::CpuidFeature::SKINIT: return "SKINIT";
  		case Iced::Intel::CpuidFeature::SKINIT_or_SVM: return "SKINIT_or_SVM";
  		case Iced::Intel::CpuidFeature::SMAP: return "SMAP";
  		case Iced::Intel::CpuidFeature::SMX: return "SMX";
  		case Iced::Intel::CpuidFeature::SSE: return "SSE";
  		case Iced::Intel::CpuidFeature::SSE2: return "SSE2";
  		case Iced::Intel::CpuidFeature::SSE3: return "SSE3";
  		case Iced::Intel::CpuidFeature::SSE4_1: return "SSE4_1";
  		case Iced::Intel::CpuidFeature::SSE4_2: return "SSE4_2";
  		case Iced::Intel::CpuidFeature::SSE4A: return "SSE4A";
  		case Iced::Intel::CpuidFeature::SSSE3: return "SSSE3";
  		case Iced::Intel::CpuidFeature::SVM: return "SVM";
  		case Iced::Intel::CpuidFeature::SEV_ES: return "SEV_ES";
  		case Iced::Intel::CpuidFeature::SYSCALL: return "SYSCALL";
  		case Iced::Intel::CpuidFeature::TBM: return "TBM";
  		case Iced::Intel::CpuidFeature::TSC: return "TSC";
  		case Iced::Intel::CpuidFeature::VAES: return "VAES";
  		case Iced::Intel::CpuidFeature::VMX: return "VMX";
  		case Iced::Intel::CpuidFeature::VPCLMULQDQ: return "VPCLMULQDQ";
  		case Iced::Intel::CpuidFeature::WAITPKG: return "WAITPKG";
  		case Iced::Intel::CpuidFeature::WBNOINVD: return "WBNOINVD";
  		case Iced::Intel::CpuidFeature::XOP: return "XOP";
  		case Iced::Intel::CpuidFeature::XSAVE: return "XSAVE";
  		case Iced::Intel::CpuidFeature::XSAVEC: return "XSAVEC";
  		case Iced::Intel::CpuidFeature::XSAVEOPT: return "XSAVEOPT";
  		case Iced::Intel::CpuidFeature::XSAVES: return "XSAVES";
  		case Iced::Intel::CpuidFeature::SEV_SNP: return "SEV_SNP";
  		case Iced::Intel::CpuidFeature::SERIALIZE: return "SERIALIZE";
  		case Iced::Intel::CpuidFeature::TSXLDTRK: return "TSXLDTRK";
  		case Iced::Intel::CpuidFeature::INVLPGB: return "INVLPGB";
  		case Iced::Intel::CpuidFeature::AMX_BF16: return "AMX_BF16";
  		case Iced::Intel::CpuidFeature::AMX_TILE: return "AMX_TILE";
  		case Iced::Intel::CpuidFeature::AMX_INT8: return "AMX_INT8";
  		case Iced::Intel::CpuidFeature::CYRIX_FPU: return "CYRIX_FPU";
  		case Iced::Intel::CpuidFeature::CYRIX_SMM: return "CYRIX_SMM";
  		case Iced::Intel::CpuidFeature::CYRIX_SMINT: return "CYRIX_SMINT";
  		case Iced::Intel::CpuidFeature::CYRIX_SMINT_0F7E: return "CYRIX_SMINT_0F7E";
  		case Iced::Intel::CpuidFeature::CYRIX_SHR: return "CYRIX_SHR";
  		case Iced::Intel::CpuidFeature::CYRIX_DDI: return "CYRIX_DDI";
  		case Iced::Intel::CpuidFeature::CYRIX_EMMI: return "CYRIX_EMMI";
  		case Iced::Intel::CpuidFeature::CYRIX_DMI: return "CYRIX_DMI";
  		case Iced::Intel::CpuidFeature::CENTAUR_AIS: return "CENTAUR_AIS";
  		case Iced::Intel::CpuidFeature::MOV_TR: return "MOV_TR";
  		case Iced::Intel::CpuidFeature::SMM: return "SMM";
  		case Iced::Intel::CpuidFeature::TDX: return "TDX";
  		case Iced::Intel::CpuidFeature::KL: return "KL";
  		case Iced::Intel::CpuidFeature::AESKLE: return "AESKLE";
  		case Iced::Intel::CpuidFeature::WIDE_KL: return "WIDE_KL";
  		case Iced::Intel::CpuidFeature::UINTR: return "UINTR";
  		case Iced::Intel::CpuidFeature::HRESET: return "HRESET";
  		case Iced::Intel::CpuidFeature::AVX_VNNI: return "AVX_VNNI";
  		case Iced::Intel::CpuidFeature::PADLOCK_GMI: return "PADLOCK_GMI";
  		case Iced::Intel::CpuidFeature::FRED: return "FRED";
  		case Iced::Intel::CpuidFeature::LKGS: return "LKGS";
  		case Iced::Intel::CpuidFeature::AVX512_FP16: return "AVX512_FP16";
  		case Iced::Intel::CpuidFeature::UDBG: return "UDBG";
  		case Iced::Intel::CpuidFeature::KNC: return "KNC";
  		default: return Internal::StringHelpers::ToDec((int)e);
  	}
  }
  #endif
  