8#define COGS_ARCH_X86_32
12#define COGS_ARCH_X86_64
16#if (defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)) && !defined(__APPLE__)
19#define COGS_ARCH_X86_32
23#define COGS_ARCH_X86_64
34 enum struct CPUFeature : uint32_t {
72 enum struct PlatformPreference : uint32_t
76 BackgroundTasks = (1<<1)
80 inline CPUFeature
operator | (CPUFeature lhs, CPUFeature rhs)
82 return static_cast<CPUFeature
>(
static_cast<uint32_t
>(lhs) |
static_cast<uint32_t
>(rhs));
86 inline CPUFeature&
operator |= (CPUFeature& lhs, CPUFeature rhs)
88 lhs =
static_cast<CPUFeature
>(
static_cast<uint32_t
>(lhs) |
static_cast<uint32_t
>(rhs));
93 inline CPUFeature
operator & (CPUFeature lhs, CPUFeature rhs)
95 return static_cast<CPUFeature
>(
static_cast<uint32_t
>(lhs) &
static_cast<uint32_t
>(rhs));
99 inline CPUFeature&
operator &= (CPUFeature& lhs, CPUFeature rhs)
101 lhs =
static_cast<CPUFeature
>(
static_cast<uint32_t
>(lhs) &
static_cast<uint32_t
>(rhs));
117 return (
static_cast<uint32_t
>(featureSet)&
static_cast<uint32_t
>(currentCPUFeatureSet)) != 0u;
120 bool prefers(PlatformPreference preferenceSet)
const
122 return (
static_cast<uint32_t
>(preferenceSet)&
static_cast<uint32_t
>(currentPlatformPreferenceSet)) != 0u;
125 void setPlatformPreference(PlatformPreference preferenceSet)
127 currentPlatformPreferenceSet = preferenceSet;
131 void restrictTo(CPUFeature allowedSet);
134 std::string asString()
const;
137 CPUFeature detectedCPUFeatureSet = CPUFeature::None;
138 CPUFeature currentCPUFeatureSet = CPUFeature::None;
141 PlatformPreference currentPlatformPreferenceSet = PlatformPreference::AsyncFetch;
143 PlatformPreference currentPlatformPreferenceSet = (PlatformPreference)((
unsigned)PlatformPreference::BackgroundTasks | (unsigned)PlatformPreference::AsyncFetch);
bool supported(CPUFeature featureSet) const
Check if a set of features are currently supported and enabled.
CPUFeature operator&(CPUFeature lhs, CPUFeature rhs)
Bitmask convenience operator.
CPUFeature & operator|=(CPUFeature &lhs, CPUFeature rhs)
Bitmask convenience operator.
CPUFeature operator|(CPUFeature lhs, CPUFeature rhs)
Bitmask convenience operator.
CPUFeature & operator&=(CPUFeature &lhs, CPUFeature rhs)
Bitmask convenience operator.
Contains all Cogs related functionality.