mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 06:37:35 +00:00
Kernel: Implement CPUFeature as an ArbitrarySizedEnum
This will make it possible to add many, many more CPU features - more than the current limit 32 and later limit of 64 if we stick with an enum class to be specific :^)
This commit is contained in:
parent
e284ee7dcf
commit
bc7ec02a82
3 changed files with 69 additions and 74 deletions
|
@ -1,13 +1,15 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/EnumBits.h>
|
||||
#include <AK/ArbitrarySizedEnum.h>
|
||||
#include <AK/Types.h>
|
||||
#include <AK/UFixedBigInt.h>
|
||||
|
||||
#include <AK/Platform.h>
|
||||
VALIDATE_IS_X86()
|
||||
|
@ -35,36 +37,34 @@ private:
|
|||
u32 m_edx { 0xffffffff };
|
||||
};
|
||||
|
||||
// FIXME: This can't hold every CPU feature as-is.
|
||||
enum class CPUFeature : u32 {
|
||||
NX = (1 << 0),
|
||||
PAE = (1 << 1),
|
||||
PGE = (1 << 2),
|
||||
RDRAND = (1 << 3),
|
||||
RDSEED = (1 << 4),
|
||||
SMAP = (1 << 5),
|
||||
SMEP = (1 << 6),
|
||||
SSE = (1 << 7),
|
||||
TSC = (1 << 8),
|
||||
RDTSCP = (1 << 9),
|
||||
CONSTANT_TSC = (1 << 10),
|
||||
NONSTOP_TSC = (1 << 11),
|
||||
UMIP = (1 << 12),
|
||||
SEP = (1 << 13),
|
||||
SYSCALL = (1 << 14),
|
||||
MMX = (1 << 15),
|
||||
SSE2 = (1 << 16),
|
||||
SSE3 = (1 << 17),
|
||||
SSSE3 = (1 << 18),
|
||||
SSE4_1 = (1 << 19),
|
||||
SSE4_2 = (1 << 20),
|
||||
XSAVE = (1 << 21),
|
||||
AVX = (1 << 22),
|
||||
FXSR = (1 << 23),
|
||||
LM = (1 << 24),
|
||||
HYPERVISOR = (1 << 25),
|
||||
PAT = (1 << 26),
|
||||
};
|
||||
AK_ENUM_BITWISE_OPERATORS(CPUFeature);
|
||||
AK_MAKE_ARBITRARY_SIZED_ENUM(CPUFeature, u128,
|
||||
NX = CPUFeature(1u) << 0u,
|
||||
PAE = CPUFeature(1u) << 1u,
|
||||
PGE = CPUFeature(1u) << 2u,
|
||||
RDRAND = CPUFeature(1u) << 3u,
|
||||
RDSEED = CPUFeature(1u) << 4u,
|
||||
SMAP = CPUFeature(1u) << 5u,
|
||||
SMEP = CPUFeature(1u) << 6u,
|
||||
SSE = CPUFeature(1u) << 7u,
|
||||
TSC = CPUFeature(1u) << 8u,
|
||||
RDTSCP = CPUFeature(1u) << 9u,
|
||||
CONSTANT_TSC = CPUFeature(1u) << 10u,
|
||||
NONSTOP_TSC = CPUFeature(1u) << 11u,
|
||||
UMIP = CPUFeature(1u) << 12u,
|
||||
SEP = CPUFeature(1u) << 13u,
|
||||
SYSCALL = CPUFeature(1u) << 14u,
|
||||
MMX = CPUFeature(1u) << 15u,
|
||||
SSE2 = CPUFeature(1u) << 16u,
|
||||
SSE3 = CPUFeature(1u) << 17u,
|
||||
SSSE3 = CPUFeature(1u) << 18u,
|
||||
SSE4_1 = CPUFeature(1u) << 19u,
|
||||
SSE4_2 = CPUFeature(1u) << 20u,
|
||||
XSAVE = CPUFeature(1u) << 21u,
|
||||
AVX = CPUFeature(1u) << 22u,
|
||||
FXSR = CPUFeature(1u) << 23u,
|
||||
LM = CPUFeature(1u) << 24u,
|
||||
HYPERVISOR = CPUFeature(1u) << 25u,
|
||||
PAT = CPUFeature(1u) << 26u,
|
||||
__End = CPUFeature(1u) << 27u);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue