mirror of
https://github.com/google/cpu_features.git
synced 2025-04-28 15:33:37 +02:00
parent
3dc868037a
commit
68fa870479
@ -30,6 +30,10 @@ instructions) at runtime.
|
|||||||
- **Unit tested.**
|
- **Unit tested.**
|
||||||
|
|
||||||
<a name="codesample"></a>
|
<a name="codesample"></a>
|
||||||
|
## Code samples
|
||||||
|
|
||||||
|
**Note:** For C++ code, the library functions are defined in the `CpuFeatures` namespace.
|
||||||
|
|
||||||
### Checking features at runtime
|
### Checking features at runtime
|
||||||
|
|
||||||
Here's a simple example that executes a codepath if the CPU supports both the
|
Here's a simple example that executes a codepath if the CPU supports both the
|
||||||
@ -38,6 +42,7 @@ AES and the SSE4.2 instruction sets:
|
|||||||
```c
|
```c
|
||||||
#include "cpuinfo_x86.h"
|
#include "cpuinfo_x86.h"
|
||||||
|
|
||||||
|
// For C++, add `using namespace CpuFeatures;`
|
||||||
static const X86Features features = GetX86Info().features;
|
static const X86Features features = GetX86Info().features;
|
||||||
|
|
||||||
void Compute(void) {
|
void Compute(void) {
|
||||||
@ -59,6 +64,7 @@ features and then check whether AES and NEON are supported.
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "cpuinfo_arm.h"
|
#include "cpuinfo_arm.h"
|
||||||
|
|
||||||
|
// For C++, add `using namespace CpuFeatures;`
|
||||||
static const ArmFeatures features = GetArmInfo().features;
|
static const ArmFeatures features = GetArmInfo().features;
|
||||||
static const bool has_aes_and_neon = features.aes && features.neon;
|
static const bool has_aes_and_neon = features.aes && features.neon;
|
||||||
|
|
||||||
@ -78,6 +84,7 @@ instruction set (e.g., `g++ -mavx`) and sets `has_avx` accordingly.
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "cpuinfo_x86.h"
|
#include "cpuinfo_x86.h"
|
||||||
|
|
||||||
|
// For C++, add `using namespace CpuFeatures;`
|
||||||
static const X86Features features = GetX86Info().features;
|
static const X86Features features = GetX86Info().features;
|
||||||
static const bool has_avx = CPU_FEATURES_COMPILED_X86_AVX || features.avx;
|
static const bool has_avx = CPU_FEATURES_COMPILED_X86_AVX || features.avx;
|
||||||
|
|
||||||
@ -100,6 +107,7 @@ set—but only if it's not Sandy Bridge.
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "cpuinfo_x86.h"
|
#include "cpuinfo_x86.h"
|
||||||
|
|
||||||
|
// For C++, add `using namespace CpuFeatures;`
|
||||||
static const X86Info info = GetX86Info();
|
static const X86Info info = GetX86Info();
|
||||||
static const X86Microarchitecture uarch = GetX86Microarchitecture(&info);
|
static const X86Microarchitecture uarch = GetX86Microarchitecture(&info);
|
||||||
static const bool has_fast_avx = info.features.avx && uarch != INTEL_SNB;
|
static const bool has_fast_avx = info.features.avx && uarch != INTEL_SNB;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user