annotate foosdk/sdk/pfc/cpuid.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 // CPUID stuff supported only on MSVC for now, irrelevant for non x86
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #define PFC_HAVE_CPUID 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 CPU_HAVE_SSE = 1 << 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 CPU_HAVE_SSE2 = 1 << 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 CPU_HAVE_SSE3 = 1 << 4,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 CPU_HAVE_SSSE3 = 1 << 5,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 CPU_HAVE_SSE41 = 1 << 6,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 CPU_HAVE_SSE42 = 1 << 7,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 CPU_HAVE_AVX = 1 << 8,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 bool query_cpu_feature_set(unsigned p_value);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 #ifndef PFC_HAVE_CPUID
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #define PFC_HAVE_CPUID 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 const char* cpuArch();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 #ifdef _M_ARM64EC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 #define PFC_CPU_ARCH "ARM64EC"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 #elif defined(_M_X64) || defined(__x86_64__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 #define PFC_CPU_ARCH "x64"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 #elif defined(_M_IX86) || defined(__i386__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 #define PFC_CPU_ARCH "x86"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 #elif defined(_M_ARM64) || defined(__aarch64__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 #define PFC_CPU_ARCH "ARM64"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 #elif defined(_M_ARM) || defined(__arm__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #define PFC_CPU_ARCH "ARM"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #endif