123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- /*
- * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include <Kernel/Arch/x86/CPUID.h>
- namespace Kernel {
- StringView cpu_feature_to_string_view(CPUFeature::Type const& feature)
- {
- if (feature == CPUFeature::SSE3)
- return "sse3"sv;
- if (feature == CPUFeature::PCLMULQDQ)
- return "pclmulqdq"sv;
- if (feature == CPUFeature::DTES64)
- return "dtes64"sv;
- if (feature == CPUFeature::MONITOR)
- return "monitor"sv;
- if (feature == CPUFeature::DS_CPL)
- return "ds_cpl"sv;
- if (feature == CPUFeature::VMX)
- return "vmx"sv;
- if (feature == CPUFeature::SMX)
- return "smx"sv;
- if (feature == CPUFeature::EST)
- return "est"sv;
- if (feature == CPUFeature::TM2)
- return "tm2"sv;
- if (feature == CPUFeature::SSSE3)
- return "ssse3"sv;
- // NOTE: This is called cid on Linux, but CNXT_ID in the Intel manual.
- if (feature == CPUFeature::CNXT_ID)
- return "cnxt_id"sv;
- if (feature == CPUFeature::SDBG)
- return "sdbg"sv;
- if (feature == CPUFeature::FMA)
- return "fma"sv;
- if (feature == CPUFeature::CX16)
- return "cx16"sv;
- if (feature == CPUFeature::XTPR)
- return "xtpr"sv;
- if (feature == CPUFeature::PDCM)
- return "pdcm"sv;
- if (feature == CPUFeature::PCID)
- return "pcid"sv;
- if (feature == CPUFeature::DCA)
- return "dca"sv;
- if (feature == CPUFeature::SSE4_1)
- return "sse4_1"sv;
- if (feature == CPUFeature::SSE4_2)
- return "sse4_2"sv;
- if (feature == CPUFeature::X2APIC)
- return "x2apic"sv;
- if (feature == CPUFeature::MOVBE)
- return "movbe"sv;
- if (feature == CPUFeature::POPCNT)
- return "popcnt"sv;
- // NOTE: This is called tsc_deadline_timer on Linux, but TSC_DEADLINE in the Intel manual.
- if (feature == CPUFeature::TSC_DEADLINE)
- return "tsc_deadline"sv;
- if (feature == CPUFeature::AES)
- return "aes"sv;
- if (feature == CPUFeature::XSAVE)
- return "xsave"sv;
- if (feature == CPUFeature::OSXSAVE)
- return "osxsave"sv;
- if (feature == CPUFeature::AVX)
- return "avx"sv;
- if (feature == CPUFeature::F16C)
- return "f16c"sv;
- if (feature == CPUFeature::RDRAND)
- return "rdrand"sv;
- if (feature == CPUFeature::HYPERVISOR)
- return "hypervisor"sv;
- if (feature == CPUFeature::FPU)
- return "fpu"sv;
- if (feature == CPUFeature::VME)
- return "vme"sv;
- if (feature == CPUFeature::DE)
- return "de"sv;
- if (feature == CPUFeature::PSE)
- return "pse"sv;
- if (feature == CPUFeature::TSC)
- return "tsc"sv;
- if (feature == CPUFeature::MSR)
- return "msr"sv;
- if (feature == CPUFeature::PAE)
- return "pae"sv;
- if (feature == CPUFeature::MCE)
- return "mce"sv;
- if (feature == CPUFeature::CX8)
- return "cx8"sv;
- if (feature == CPUFeature::APIC)
- return "apic"sv;
- if (feature == CPUFeature::SEP)
- return "sep"sv;
- if (feature == CPUFeature::MTRR)
- return "mtrr"sv;
- if (feature == CPUFeature::PGE)
- return "pge"sv;
- if (feature == CPUFeature::MCA)
- return "mca"sv;
- if (feature == CPUFeature::CMOV)
- return "cmov"sv;
- if (feature == CPUFeature::PAT)
- return "pat"sv;
- if (feature == CPUFeature::PSE36)
- return "pse36"sv;
- if (feature == CPUFeature::PSN)
- return "psn"sv;
- if (feature == CPUFeature::CLFLUSH)
- return "clflush"sv;
- if (feature == CPUFeature::DS)
- return "ds"sv;
- if (feature == CPUFeature::ACPI)
- return "acpi"sv;
- if (feature == CPUFeature::MMX)
- return "mmx"sv;
- if (feature == CPUFeature::FXSR)
- return "fxsr"sv;
- if (feature == CPUFeature::SSE)
- return "sse"sv;
- if (feature == CPUFeature::SSE2)
- return "sse2"sv;
- if (feature == CPUFeature::SS)
- return "ss"sv;
- if (feature == CPUFeature::HTT)
- return "htt"sv;
- if (feature == CPUFeature::TM)
- return "tm"sv;
- if (feature == CPUFeature::IA64)
- return "ia64"sv;
- if (feature == CPUFeature::PBE)
- return "pbe"sv;
- if (feature == CPUFeature::FSGSBASE)
- return "fsgsbase"sv;
- if (feature == CPUFeature::TSC_ADJUST)
- return "tsc_adjust"sv;
- if (feature == CPUFeature::SGX)
- return "sgx"sv;
- if (feature == CPUFeature::BMI1)
- return "bmi1"sv;
- if (feature == CPUFeature::HLE)
- return "hle"sv;
- if (feature == CPUFeature::AVX2)
- return "avx2"sv;
- if (feature == CPUFeature::FDP_EXCPTN_ONLY)
- return "fdp_excptn_only"sv;
- if (feature == CPUFeature::SMEP)
- return "smep"sv;
- if (feature == CPUFeature::BMI2)
- return "bmi2"sv;
- if (feature == CPUFeature::ERMS)
- return "erms"sv;
- if (feature == CPUFeature::INVPCID)
- return "invpcid"sv;
- if (feature == CPUFeature::RTM)
- return "rtm"sv;
- if (feature == CPUFeature::PQM)
- return "pqm"sv;
- if (feature == CPUFeature::ZERO_FCS_FDS)
- return "zero_fcs_fds"sv;
- if (feature == CPUFeature::MPX)
- return "mpx"sv;
- if (feature == CPUFeature::PQE)
- return "pqe"sv;
- if (feature == CPUFeature::AVX512_F)
- return "avx512_f"sv;
- if (feature == CPUFeature::AVX512_DQ)
- return "avx512_dq"sv;
- if (feature == CPUFeature::RDSEED)
- return "rdseed"sv;
- if (feature == CPUFeature::ADX)
- return "adx"sv;
- if (feature == CPUFeature::SMAP)
- return "smap"sv;
- if (feature == CPUFeature::AVX512_IFMA)
- return "avx512_ifma"sv;
- if (feature == CPUFeature::PCOMMIT)
- return "pcommit"sv;
- if (feature == CPUFeature::CLFLUSHOPT)
- return "clflushopt"sv;
- if (feature == CPUFeature::CLWB)
- return "clwb"sv;
- if (feature == CPUFeature::INTEL_PT)
- return "intel_pt"sv;
- if (feature == CPUFeature::AVX512_PF)
- return "avx512_pf"sv;
- if (feature == CPUFeature::AVX512_ER)
- return "avx512_er"sv;
- if (feature == CPUFeature::AVX512_CD)
- return "avx512_cd"sv;
- if (feature == CPUFeature::SHA)
- return "sha"sv;
- if (feature == CPUFeature::AVX512_BW)
- return "avx512_bw"sv;
- if (feature == CPUFeature::AVX512_VL)
- return "avx512_vl"sv;
- if (feature == CPUFeature::PREFETCHWT1)
- return "prefetchwt1"sv;
- if (feature == CPUFeature::AVX512_VBMI)
- return "avx512_vbmi"sv;
- if (feature == CPUFeature::UMIP)
- return "umip"sv;
- if (feature == CPUFeature::PKU)
- return "pku"sv;
- if (feature == CPUFeature::OSPKU)
- return "ospku"sv;
- if (feature == CPUFeature::WAITPKG)
- return "waitpkg"sv;
- if (feature == CPUFeature::AVX512_VBMI2)
- return "avx512_vbmi2"sv;
- if (feature == CPUFeature::CET_SS)
- return "cet_ss"sv;
- if (feature == CPUFeature::GFNI)
- return "gfni"sv;
- if (feature == CPUFeature::VAES)
- return "vaes"sv;
- if (feature == CPUFeature::VPCLMULQDQ)
- return "vpclmulqdq"sv;
- if (feature == CPUFeature::AVX512_VNNI)
- return "avx512_vnni"sv;
- if (feature == CPUFeature::AVX512_BITALG)
- return "avx512_bitalg"sv;
- if (feature == CPUFeature::TME_EN)
- return "tme_en"sv;
- if (feature == CPUFeature::AVX512_VPOPCNTDQ)
- return "avx512_vpopcntdq"sv;
- if (feature == CPUFeature::INTEL_5_LEVEL_PAGING)
- return "intel_5_level_paging"sv;
- if (feature == CPUFeature::RDPID)
- return "rdpid"sv;
- if (feature == CPUFeature::KL)
- return "kl"sv;
- if (feature == CPUFeature::CLDEMOTE)
- return "cldemote"sv;
- if (feature == CPUFeature::MOVDIRI)
- return "movdiri"sv;
- if (feature == CPUFeature::MOVDIR64B)
- return "movdir64b"sv;
- if (feature == CPUFeature::ENQCMD)
- return "enqcmd"sv;
- if (feature == CPUFeature::SGX_LC)
- return "sgx_lc"sv;
- if (feature == CPUFeature::PKS)
- return "pks"sv;
- if (feature == CPUFeature::AVX512_4VNNIW)
- return "avx512_4vnniw"sv;
- if (feature == CPUFeature::AVX512_4FMAPS)
- return "avx512_4fmaps"sv;
- if (feature == CPUFeature::FSRM)
- return "fsrm"sv;
- if (feature == CPUFeature::AVX512_VP2INTERSECT)
- return "avx512_vp2intersect"sv;
- if (feature == CPUFeature::SRBDS_CTRL)
- return "srbds_ctrl"sv;
- if (feature == CPUFeature::MD_CLEAR)
- return "md_clear"sv;
- if (feature == CPUFeature::RTM_ALWAYS_ABORT)
- return "rtm_always_abort"sv;
- if (feature == CPUFeature::TSX_FORCE_ABORT)
- return "tsx_force_abort"sv;
- if (feature == CPUFeature::SERIALIZE)
- return "serialize"sv;
- if (feature == CPUFeature::HYBRID)
- return "hybrid"sv;
- if (feature == CPUFeature::TSXLDTRK)
- return "tsxldtrk"sv;
- if (feature == CPUFeature::PCONFIG)
- return "pconfig"sv;
- if (feature == CPUFeature::LBR)
- return "lbr"sv;
- if (feature == CPUFeature::CET_IBT)
- return "cet_ibt"sv;
- if (feature == CPUFeature::AMX_BF16)
- return "amx_bf16"sv;
- if (feature == CPUFeature::AVX512_FP16)
- return "avx512_fp16"sv;
- if (feature == CPUFeature::AMX_TILE)
- return "amx_tile"sv;
- if (feature == CPUFeature::AMX_INT8)
- return "amx_int8"sv;
- if (feature == CPUFeature::SPEC_CTRL)
- return "spec_ctrl"sv;
- if (feature == CPUFeature::STIBP)
- return "stibp"sv;
- // NOTE: This is called flush_l1d on Linux, but L1D_FLUSH in the Intel manual.
- if (feature == CPUFeature::L1D_FLUSH)
- return "l1d_flush"sv;
- if (feature == CPUFeature::IA32_ARCH_CAPABILITIES)
- return "ia32_arch_capabilities"sv;
- if (feature == CPUFeature::IA32_CORE_CAPABILITIES)
- return "ia32_code_capabilities"sv;
- if (feature == CPUFeature::SSBD)
- return "ssbd"sv;
- if (feature == CPUFeature::SYSCALL)
- return "syscall"sv;
- if (feature == CPUFeature::NX)
- return "nx"sv;
- if (feature == CPUFeature::RDTSCP)
- return "rdtscp"sv;
- if (feature == CPUFeature::LM)
- return "lm"sv;
- if (feature == CPUFeature::CONSTANT_TSC)
- return "constant_tsc"sv;
- if (feature == CPUFeature::NONSTOP_TSC)
- return "nonstop_tsc"sv;
- VERIFY_NOT_REACHED();
- }
- }
|