glibc (2.38)

(root)/
include/
bits/
platform/
x86.h
       1  /* Constants and data structures for x86 CPU features.
       2     This file is part of the GNU C Library.
       3     Copyright (C) 2008-2023 Free Software Foundation, Inc.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _SYS_PLATFORM_X86_H
      20  # error "Never include <bits/platform/x86.h> directly; use <sys/platform/x86.h> instead."
      21  #endif
      22  
      23  enum
      24  {
      25    CPUID_INDEX_1 = 0,
      26    CPUID_INDEX_7,
      27    CPUID_INDEX_80000001,
      28    CPUID_INDEX_D_ECX_1,
      29    CPUID_INDEX_80000007,
      30    CPUID_INDEX_80000008,
      31    CPUID_INDEX_7_ECX_1,
      32    CPUID_INDEX_19,
      33    CPUID_INDEX_14_ECX_0
      34  };
      35  
      36  struct cpuid_feature
      37  {
      38    unsigned int cpuid_array[4];
      39    unsigned int active_array[4];
      40  };
      41  
      42  enum cpuid_register_index
      43  {
      44    cpuid_register_index_eax = 0,
      45    cpuid_register_index_ebx,
      46    cpuid_register_index_ecx,
      47    cpuid_register_index_edx
      48  };
      49  
      50  /* CPU features.  */
      51  
      52  enum
      53  {
      54    x86_cpu_index_1_ecx
      55      = (CPUID_INDEX_1 * 8 * 4 * sizeof (unsigned int)
      56         + cpuid_register_index_ecx * 8 * sizeof (unsigned int)),
      57  
      58    x86_cpu_SSE3			= x86_cpu_index_1_ecx,
      59    x86_cpu_PCLMULQDQ		= x86_cpu_index_1_ecx + 1,
      60    x86_cpu_DTES64		= x86_cpu_index_1_ecx + 2,
      61    x86_cpu_MONITOR		= x86_cpu_index_1_ecx + 3,
      62    x86_cpu_DS_CPL		= x86_cpu_index_1_ecx + 4,
      63    x86_cpu_VMX			= x86_cpu_index_1_ecx + 5,
      64    x86_cpu_SMX			= x86_cpu_index_1_ecx + 6,
      65    x86_cpu_EIST			= x86_cpu_index_1_ecx + 7,
      66    x86_cpu_TM2			= x86_cpu_index_1_ecx + 8,
      67    x86_cpu_SSSE3			= x86_cpu_index_1_ecx + 9,
      68    x86_cpu_CNXT_ID		= x86_cpu_index_1_ecx + 10,
      69    x86_cpu_SDBG			= x86_cpu_index_1_ecx + 11,
      70    x86_cpu_FMA			= x86_cpu_index_1_ecx + 12,
      71    x86_cpu_CMPXCHG16B		= x86_cpu_index_1_ecx + 13,
      72    x86_cpu_XTPRUPDCTRL		= x86_cpu_index_1_ecx + 14,
      73    x86_cpu_PDCM			= x86_cpu_index_1_ecx + 15,
      74    x86_cpu_INDEX_1_ECX_16	= x86_cpu_index_1_ecx + 16,
      75    x86_cpu_PCID			= x86_cpu_index_1_ecx + 17,
      76    x86_cpu_DCA			= x86_cpu_index_1_ecx + 18,
      77    x86_cpu_SSE4_1		= x86_cpu_index_1_ecx + 19,
      78    x86_cpu_SSE4_2		= x86_cpu_index_1_ecx + 20,
      79    x86_cpu_X2APIC		= x86_cpu_index_1_ecx + 21,
      80    x86_cpu_MOVBE			= x86_cpu_index_1_ecx + 22,
      81    x86_cpu_POPCNT		= x86_cpu_index_1_ecx + 23,
      82    x86_cpu_TSC_DEADLINE		= x86_cpu_index_1_ecx + 24,
      83    x86_cpu_AES			= x86_cpu_index_1_ecx + 25,
      84    x86_cpu_XSAVE			= x86_cpu_index_1_ecx + 26,
      85    x86_cpu_OSXSAVE		= x86_cpu_index_1_ecx + 27,
      86    x86_cpu_AVX			= x86_cpu_index_1_ecx + 28,
      87    x86_cpu_F16C			= x86_cpu_index_1_ecx + 29,
      88    x86_cpu_RDRAND		= x86_cpu_index_1_ecx + 30,
      89    x86_cpu_INDEX_1_ECX_31	= x86_cpu_index_1_ecx + 31,
      90  
      91    x86_cpu_index_1_edx
      92      = (CPUID_INDEX_1 * 8 * 4 * sizeof (unsigned int)
      93         + cpuid_register_index_edx * 8 * sizeof (unsigned int)),
      94  
      95    x86_cpu_FPU			= x86_cpu_index_1_edx,
      96    x86_cpu_VME			= x86_cpu_index_1_edx + 1,
      97    x86_cpu_DE			= x86_cpu_index_1_edx + 2,
      98    x86_cpu_PSE			= x86_cpu_index_1_edx + 3,
      99    x86_cpu_TSC			= x86_cpu_index_1_edx + 4,
     100    x86_cpu_MSR			= x86_cpu_index_1_edx + 5,
     101    x86_cpu_PAE			= x86_cpu_index_1_edx + 6,
     102    x86_cpu_MCE			= x86_cpu_index_1_edx + 7,
     103    x86_cpu_CX8			= x86_cpu_index_1_edx + 8,
     104    x86_cpu_APIC			= x86_cpu_index_1_edx + 9,
     105    x86_cpu_INDEX_1_EDX_10	= x86_cpu_index_1_edx + 10,
     106    x86_cpu_SEP			= x86_cpu_index_1_edx + 11,
     107    x86_cpu_MTRR			= x86_cpu_index_1_edx + 12,
     108    x86_cpu_PGE			= x86_cpu_index_1_edx + 13,
     109    x86_cpu_MCA			= x86_cpu_index_1_edx + 14,
     110    x86_cpu_CMOV			= x86_cpu_index_1_edx + 15,
     111    x86_cpu_PAT			= x86_cpu_index_1_edx + 16,
     112    x86_cpu_PSE_36		= x86_cpu_index_1_edx + 17,
     113    x86_cpu_PSN			= x86_cpu_index_1_edx + 18,
     114    x86_cpu_CLFSH			= x86_cpu_index_1_edx + 19,
     115    x86_cpu_INDEX_1_EDX_20	= x86_cpu_index_1_edx + 20,
     116    x86_cpu_DS			= x86_cpu_index_1_edx + 21,
     117    x86_cpu_ACPI			= x86_cpu_index_1_edx + 22,
     118    x86_cpu_MMX			= x86_cpu_index_1_edx + 23,
     119    x86_cpu_FXSR			= x86_cpu_index_1_edx + 24,
     120    x86_cpu_SSE			= x86_cpu_index_1_edx + 25,
     121    x86_cpu_SSE2			= x86_cpu_index_1_edx + 26,
     122    x86_cpu_SS			= x86_cpu_index_1_edx + 27,
     123    x86_cpu_HTT			= x86_cpu_index_1_edx + 28,
     124    x86_cpu_TM			= x86_cpu_index_1_edx + 29,
     125    x86_cpu_INDEX_1_EDX_30	= x86_cpu_index_1_edx + 30,
     126    x86_cpu_PBE			= x86_cpu_index_1_edx + 31,
     127  
     128    x86_cpu_index_7_ebx
     129      = (CPUID_INDEX_7 * 8 * 4 * sizeof (unsigned int)
     130         + cpuid_register_index_ebx * 8 * sizeof (unsigned int)),
     131  
     132    x86_cpu_FSGSBASE		= x86_cpu_index_7_ebx,
     133    x86_cpu_TSC_ADJUST		= x86_cpu_index_7_ebx + 1,
     134    x86_cpu_SGX			= x86_cpu_index_7_ebx + 2,
     135    x86_cpu_BMI1			= x86_cpu_index_7_ebx + 3,
     136    x86_cpu_HLE			= x86_cpu_index_7_ebx + 4,
     137    x86_cpu_AVX2			= x86_cpu_index_7_ebx + 5,
     138    x86_cpu_INDEX_7_EBX_6		= x86_cpu_index_7_ebx + 6,
     139    x86_cpu_SMEP			= x86_cpu_index_7_ebx + 7,
     140    x86_cpu_BMI2			= x86_cpu_index_7_ebx + 8,
     141    x86_cpu_ERMS			= x86_cpu_index_7_ebx + 9,
     142    x86_cpu_INVPCID		= x86_cpu_index_7_ebx + 10,
     143    x86_cpu_RTM			= x86_cpu_index_7_ebx + 11,
     144    x86_cpu_RDT_M			= x86_cpu_index_7_ebx + 12,
     145    x86_cpu_DEPR_FPU_CS_DS	= x86_cpu_index_7_ebx + 13,
     146    x86_cpu_MPX			= x86_cpu_index_7_ebx + 14,
     147    x86_cpu_RDT_A			= x86_cpu_index_7_ebx + 15,
     148    x86_cpu_AVX512F		= x86_cpu_index_7_ebx + 16,
     149    x86_cpu_AVX512DQ		= x86_cpu_index_7_ebx + 17,
     150    x86_cpu_RDSEED		= x86_cpu_index_7_ebx + 18,
     151    x86_cpu_ADX			= x86_cpu_index_7_ebx + 19,
     152    x86_cpu_SMAP			= x86_cpu_index_7_ebx + 20,
     153    x86_cpu_AVX512_IFMA		= x86_cpu_index_7_ebx + 21,
     154    x86_cpu_INDEX_7_EBX_22	= x86_cpu_index_7_ebx + 22,
     155    x86_cpu_CLFLUSHOPT		= x86_cpu_index_7_ebx + 23,
     156    x86_cpu_CLWB			= x86_cpu_index_7_ebx + 24,
     157    x86_cpu_TRACE			= x86_cpu_index_7_ebx + 25,
     158    x86_cpu_AVX512PF		= x86_cpu_index_7_ebx + 26,
     159    x86_cpu_AVX512ER		= x86_cpu_index_7_ebx + 27,
     160    x86_cpu_AVX512CD		= x86_cpu_index_7_ebx + 28,
     161    x86_cpu_SHA			= x86_cpu_index_7_ebx + 29,
     162    x86_cpu_AVX512BW		= x86_cpu_index_7_ebx + 30,
     163    x86_cpu_AVX512VL		= x86_cpu_index_7_ebx + 31,
     164  
     165    x86_cpu_index_7_ecx
     166      = (CPUID_INDEX_7 * 8 * 4 * sizeof (unsigned int)
     167         + cpuid_register_index_ecx * 8 * sizeof (unsigned int)),
     168  
     169    x86_cpu_PREFETCHWT1		= x86_cpu_index_7_ecx,
     170    x86_cpu_AVX512_VBMI		= x86_cpu_index_7_ecx + 1,
     171    x86_cpu_UMIP			= x86_cpu_index_7_ecx + 2,
     172    x86_cpu_PKU			= x86_cpu_index_7_ecx + 3,
     173    x86_cpu_OSPKE			= x86_cpu_index_7_ecx + 4,
     174    x86_cpu_WAITPKG		= x86_cpu_index_7_ecx + 5,
     175    x86_cpu_AVX512_VBMI2		= x86_cpu_index_7_ecx + 6,
     176    x86_cpu_SHSTK			= x86_cpu_index_7_ecx + 7,
     177    x86_cpu_GFNI			= x86_cpu_index_7_ecx + 8,
     178    x86_cpu_VAES			= x86_cpu_index_7_ecx + 9,
     179    x86_cpu_VPCLMULQDQ		= x86_cpu_index_7_ecx + 10,
     180    x86_cpu_AVX512_VNNI		= x86_cpu_index_7_ecx + 11,
     181    x86_cpu_AVX512_BITALG		= x86_cpu_index_7_ecx + 12,
     182    x86_cpu_INDEX_7_ECX_13	= x86_cpu_index_7_ecx + 13,
     183    x86_cpu_AVX512_VPOPCNTDQ	= x86_cpu_index_7_ecx + 14,
     184    x86_cpu_INDEX_7_ECX_15	= x86_cpu_index_7_ecx + 15,
     185    x86_cpu_LA57			= x86_cpu_index_7_ecx + 16,
     186  /* Note: Bits 17-21: The value of MAWAU used by the BNDLDX and BNDSTX
     187     instructions in 64-bit mode.  */
     188    x86_cpu_RDPID			= x86_cpu_index_7_ecx + 22,
     189    x86_cpu_KL			= x86_cpu_index_7_ecx + 23,
     190    x86_cpu_BUS_LOCK_DETECT	= x86_cpu_index_7_ecx + 24,
     191    x86_cpu_CLDEMOTE		= x86_cpu_index_7_ecx + 25,
     192    x86_cpu_INDEX_7_ECX_26	= x86_cpu_index_7_ecx + 26,
     193    x86_cpu_MOVDIRI		= x86_cpu_index_7_ecx + 27,
     194    x86_cpu_MOVDIR64B		= x86_cpu_index_7_ecx + 28,
     195    x86_cpu_ENQCMD		= x86_cpu_index_7_ecx + 29,
     196    x86_cpu_SGX_LC		= x86_cpu_index_7_ecx + 30,
     197    x86_cpu_PKS			= x86_cpu_index_7_ecx + 31,
     198  
     199    x86_cpu_index_7_edx
     200      = (CPUID_INDEX_7 * 8 * 4 * sizeof (unsigned int)
     201         + cpuid_register_index_edx * 8 * sizeof (unsigned int)),
     202  
     203    x86_cpu_INDEX_7_EDX_0		= x86_cpu_index_7_edx,
     204    x86_cpu_SGX_KEYS		= x86_cpu_index_7_edx + 1,
     205    x86_cpu_AVX512_4VNNIW		= x86_cpu_index_7_edx + 2,
     206    x86_cpu_AVX512_4FMAPS		= x86_cpu_index_7_edx + 3,
     207    x86_cpu_FSRM			= x86_cpu_index_7_edx + 4,
     208    x86_cpu_UINTR			= x86_cpu_index_7_edx + 5,
     209    x86_cpu_INDEX_7_EDX_6		= x86_cpu_index_7_edx + 6,
     210    x86_cpu_INDEX_7_EDX_7		= x86_cpu_index_7_edx + 7,
     211    x86_cpu_AVX512_VP2INTERSECT	= x86_cpu_index_7_edx + 8,
     212    x86_cpu_INDEX_7_EDX_9		= x86_cpu_index_7_edx + 9,
     213    x86_cpu_MD_CLEAR		= x86_cpu_index_7_edx + 10,
     214    x86_cpu_RTM_ALWAYS_ABORT	= x86_cpu_index_7_edx + 11,
     215    x86_cpu_INDEX_7_EDX_12	= x86_cpu_index_7_edx + 12,
     216    x86_cpu_RTM_FORCE_ABORT	= x86_cpu_index_7_edx + 13,
     217    x86_cpu_SERIALIZE		= x86_cpu_index_7_edx + 14,
     218    x86_cpu_HYBRID		= x86_cpu_index_7_edx + 15,
     219    x86_cpu_TSXLDTRK		= x86_cpu_index_7_edx + 16,
     220    x86_cpu_INDEX_7_EDX_17	= x86_cpu_index_7_edx + 17,
     221    x86_cpu_PCONFIG		= x86_cpu_index_7_edx + 18,
     222    x86_cpu_LBR			= x86_cpu_index_7_edx + 19,
     223    x86_cpu_IBT			= x86_cpu_index_7_edx + 20,
     224    x86_cpu_INDEX_7_EDX_21	= x86_cpu_index_7_edx + 21,
     225    x86_cpu_AMX_BF16		= x86_cpu_index_7_edx + 22,
     226    x86_cpu_AVX512_FP16		= x86_cpu_index_7_edx + 23,
     227    x86_cpu_AMX_TILE		= x86_cpu_index_7_edx + 24,
     228    x86_cpu_AMX_INT8		= x86_cpu_index_7_edx + 25,
     229    x86_cpu_IBRS_IBPB		= x86_cpu_index_7_edx + 26,
     230    x86_cpu_STIBP			= x86_cpu_index_7_edx + 27,
     231    x86_cpu_L1D_FLUSH		= x86_cpu_index_7_edx + 28,
     232    x86_cpu_ARCH_CAPABILITIES	= x86_cpu_index_7_edx + 29,
     233    x86_cpu_CORE_CAPABILITIES	= x86_cpu_index_7_edx + 30,
     234    x86_cpu_SSBD			= x86_cpu_index_7_edx + 31,
     235  
     236    x86_cpu_index_80000001_ecx
     237      = (CPUID_INDEX_80000001 * 8 * 4 * sizeof (unsigned int)
     238         + cpuid_register_index_ecx * 8 * sizeof (unsigned int)),
     239  
     240    x86_cpu_LAHF64_SAHF64		= x86_cpu_index_80000001_ecx,
     241    x86_cpu_SVM			= x86_cpu_index_80000001_ecx + 2,
     242    x86_cpu_LZCNT			= x86_cpu_index_80000001_ecx + 5,
     243    x86_cpu_SSE4A			= x86_cpu_index_80000001_ecx + 6,
     244    x86_cpu_PREFETCHW		= x86_cpu_index_80000001_ecx + 8,
     245    x86_cpu_XOP			= x86_cpu_index_80000001_ecx + 11,
     246    x86_cpu_LWP			= x86_cpu_index_80000001_ecx + 15,
     247    x86_cpu_FMA4			= x86_cpu_index_80000001_ecx + 16,
     248    x86_cpu_TBM			= x86_cpu_index_80000001_ecx + 21,
     249  
     250    x86_cpu_index_80000001_edx
     251      = (CPUID_INDEX_80000001 * 8 * 4 * sizeof (unsigned int)
     252         + cpuid_register_index_edx * 8 * sizeof (unsigned int)),
     253  
     254    x86_cpu_SYSCALL_SYSRET	= x86_cpu_index_80000001_edx + 11,
     255    x86_cpu_NX			= x86_cpu_index_80000001_edx + 20,
     256    x86_cpu_PAGE1GB		= x86_cpu_index_80000001_edx + 26,
     257    x86_cpu_RDTSCP		= x86_cpu_index_80000001_edx + 27,
     258    x86_cpu_LM			= x86_cpu_index_80000001_edx + 29,
     259  
     260    x86_cpu_index_d_ecx_1_eax
     261      = (CPUID_INDEX_D_ECX_1 * 8 * 4 * sizeof (unsigned int)
     262         + cpuid_register_index_eax * 8 * sizeof (unsigned int)),
     263  
     264    x86_cpu_XSAVEOPT		= x86_cpu_index_d_ecx_1_eax,
     265    x86_cpu_XSAVEC		= x86_cpu_index_d_ecx_1_eax + 1,
     266    x86_cpu_XGETBV_ECX_1		= x86_cpu_index_d_ecx_1_eax + 2,
     267    x86_cpu_XSAVES		= x86_cpu_index_d_ecx_1_eax + 3,
     268    x86_cpu_XFD			= x86_cpu_index_d_ecx_1_eax + 4,
     269  
     270    x86_cpu_index_80000007_edx
     271      = (CPUID_INDEX_80000007 * 8 * 4 * sizeof (unsigned int)
     272         + cpuid_register_index_edx * 8 * sizeof (unsigned int)),
     273  
     274    x86_cpu_INVARIANT_TSC		= x86_cpu_index_80000007_edx + 8,
     275  
     276    x86_cpu_index_80000008_ebx
     277      = (CPUID_INDEX_80000008 * 8 * 4 * sizeof (unsigned int)
     278         + cpuid_register_index_ebx * 8 * sizeof (unsigned int)),
     279  
     280    x86_cpu_WBNOINVD		= x86_cpu_index_80000008_ebx + 9,
     281    x86_cpu_AMD_IBPB	        = x86_cpu_index_80000008_ebx + 12,
     282    x86_cpu_AMD_IBRS	        = x86_cpu_index_80000008_ebx + 14,
     283    x86_cpu_AMD_STIBP	        = x86_cpu_index_80000008_ebx + 15,
     284    x86_cpu_AMD_SSBD	        = x86_cpu_index_80000008_ebx + 24,
     285    x86_cpu_AMD_VIRT_SSBD	        = x86_cpu_index_80000008_ebx + 25,
     286  
     287    x86_cpu_index_7_ecx_1_eax
     288      = (CPUID_INDEX_7_ECX_1 * 8 * 4 * sizeof (unsigned int)
     289         + cpuid_register_index_eax * 8 * sizeof (unsigned int)),
     290  
     291    x86_cpu_RAO_INT		= x86_cpu_index_7_ecx_1_eax + 3,
     292    x86_cpu_AVX_VNNI		= x86_cpu_index_7_ecx_1_eax + 4,
     293    x86_cpu_AVX512_BF16		= x86_cpu_index_7_ecx_1_eax + 5,
     294    x86_cpu_LASS			= x86_cpu_index_7_ecx_1_eax + 6,
     295    x86_cpu_CMPCCXADD		= x86_cpu_index_7_ecx_1_eax + 7,
     296    x86_cpu_ArchPerfmonExt	= x86_cpu_index_7_ecx_1_eax + 8,
     297    x86_cpu_FZLRM			= x86_cpu_index_7_ecx_1_eax + 10,
     298    x86_cpu_FSRS			= x86_cpu_index_7_ecx_1_eax + 11,
     299    x86_cpu_FSRCS			= x86_cpu_index_7_ecx_1_eax + 12,
     300    x86_cpu_WRMSRNS		= x86_cpu_index_7_ecx_1_eax + 19,
     301    x86_cpu_AMX_FP16		= x86_cpu_index_7_ecx_1_eax + 21,
     302    x86_cpu_HRESET		= x86_cpu_index_7_ecx_1_eax + 22,
     303    x86_cpu_AVX_IFMA		= x86_cpu_index_7_ecx_1_eax + 23,
     304    x86_cpu_LAM			= x86_cpu_index_7_ecx_1_eax + 26,
     305    x86_cpu_MSRLIST		= x86_cpu_index_7_ecx_1_eax + 27,
     306  
     307    x86_cpu_index_7_ecx_1_edx
     308      = (CPUID_INDEX_7_ECX_1 * 8 * 4 * sizeof (unsigned int)
     309         + cpuid_register_index_edx * 8 * sizeof (unsigned int)),
     310  
     311    x86_cpu_AVX_VNNI_INT8		= x86_cpu_index_7_ecx_1_edx + 4,
     312    x86_cpu_AVX_NE_CONVERT	= x86_cpu_index_7_ecx_1_edx + 5,
     313    x86_cpu_AMX_COMPLEX		= x86_cpu_index_7_ecx_1_edx + 8,
     314    x86_cpu_PREFETCHI		= x86_cpu_index_7_ecx_1_edx + 14,
     315    x86_cpu_APX_F			= x86_cpu_index_7_ecx_1_edx + 21,
     316  
     317    x86_cpu_index_19_ebx
     318      = (CPUID_INDEX_19 * 8 * 4 * sizeof (unsigned int)
     319         + cpuid_register_index_ebx * 8 * sizeof (unsigned int)),
     320  
     321    x86_cpu_AESKLE		= x86_cpu_index_19_ebx,
     322    x86_cpu_WIDE_KL		= x86_cpu_index_19_ebx + 2,
     323  
     324    x86_cpu_index_14_ecx_0_ebx
     325      = (CPUID_INDEX_14_ECX_0 * 8 * 4 * sizeof (unsigned int)
     326         + cpuid_register_index_ebx * 8 * sizeof (unsigned int)),
     327  
     328    x86_cpu_PTWRITE		= x86_cpu_index_14_ecx_0_ebx + 4
     329  };