|
1
|
1 #pragma once
|
|
|
2
|
|
|
3 // CPUID stuff supported only on MSVC for now, irrelevant for non x86
|
|
|
4 #if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
|
|
|
5 #define PFC_HAVE_CPUID 1
|
|
|
6 namespace pfc {
|
|
|
7 enum {
|
|
|
8 CPU_HAVE_SSE = 1 << 2,
|
|
|
9 CPU_HAVE_SSE2 = 1 << 3,
|
|
|
10 CPU_HAVE_SSE3 = 1 << 4,
|
|
|
11 CPU_HAVE_SSSE3 = 1 << 5,
|
|
|
12 CPU_HAVE_SSE41 = 1 << 6,
|
|
|
13 CPU_HAVE_SSE42 = 1 << 7,
|
|
|
14 CPU_HAVE_AVX = 1 << 8,
|
|
|
15 };
|
|
|
16
|
|
|
17 bool query_cpu_feature_set(unsigned p_value);
|
|
|
18 };
|
|
|
19 #endif
|
|
|
20
|
|
|
21 #ifndef PFC_HAVE_CPUID
|
|
|
22 #define PFC_HAVE_CPUID 0
|
|
|
23 #endif
|
|
|
24
|
|
|
25 namespace pfc {
|
|
|
26 const char* cpuArch();
|
|
|
27 }
|
|
|
28
|
|
|
29 #ifdef _M_ARM64EC
|
|
|
30 #define PFC_CPU_ARCH "ARM64EC"
|
|
|
31 #elif defined(_M_X64) || defined(__x86_64__)
|
|
|
32 #define PFC_CPU_ARCH "x64"
|
|
|
33 #elif defined(_M_IX86) || defined(__i386__)
|
|
|
34 #define PFC_CPU_ARCH "x86"
|
|
|
35 #elif defined(_M_ARM64) || defined(__aarch64__)
|
|
|
36 #define PFC_CPU_ARCH "ARM64"
|
|
|
37 #elif defined(_M_ARM) || defined(__arm__)
|
|
|
38 #define PFC_CPU_ARCH "ARM"
|
|
|
39 #endif
|