f8220e1b1c0dac120b705236a378bf286584dc3d
[iec.git] / src / type3_AndroidCloud / anbox-master / external / cpu_features / include / cpu_features_macros.h
1 // Copyright 2017 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #ifndef CPU_FEATURES_INCLUDE_CPU_FEATURES_MACROS_H_
16 #define CPU_FEATURES_INCLUDE_CPU_FEATURES_MACROS_H_
17
18 ////////////////////////////////////////////////////////////////////////////////
19 // Architectures
20 ////////////////////////////////////////////////////////////////////////////////
21
22 #if ((defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
23       defined(__x86_64__)) &&                                     \
24      !defined(__pnacl__) && !defined(__CLR_VER))
25 #define CPU_FEATURES_ARCH_X86
26 #endif
27
28 #if (defined(__arm__) || defined(_M_ARM))
29 #define CPU_FEATURES_ARCH_ARM
30 #endif
31
32 #if defined(__aarch64__)
33 #define CPU_FEATURES_ARCH_AARCH64
34 #endif
35
36 #if (defined(CPU_FEATURES_ARCH_AARCH64) || defined(CPU_FEATURES_ARCH_ARM))
37 #define CPU_FEATURES_ARCH_ANY_ARM
38 #endif
39
40 #if defined(__mips__)
41 #define CPU_FEATURES_ARCH_MIPS
42 #endif
43
44 #if defined(__powerpc__)
45 #define CPU_FEATURES_ARCH_PPC
46 #endif
47
48 ////////////////////////////////////////////////////////////////////////////////
49 // Os
50 ////////////////////////////////////////////////////////////////////////////////
51
52 #if defined(__linux__)
53 #define CPU_FEATURES_OS_LINUX_OR_ANDROID
54 #endif
55
56 #if defined(__ANDROID__)
57 #define CPU_FEATURES_OS_ANDROID
58 #endif
59
60 #if (defined(_WIN64) || defined(_WIN32))
61 #define CPU_FEATURES_OS_WINDOWS
62 #endif
63
64 ////////////////////////////////////////////////////////////////////////////////
65 // Compilers
66 ////////////////////////////////////////////////////////////////////////////////
67
68 #if defined(__clang__)
69 #define CPU_FEATURES_COMPILER_CLANG
70 #endif
71
72 #if defined(__GNUC__) && !defined(__clang__)
73 #define CPU_FEATURES_COMPILER_GCC
74 #endif
75
76 #if defined(_MSC_VER)
77 #define CPU_FEATURES_COMPILER_MSC
78 #endif
79
80 ////////////////////////////////////////////////////////////////////////////////
81 // Cpp
82 ////////////////////////////////////////////////////////////////////////////////
83
84 #if defined(__cplusplus)
85 #define CPU_FEATURES_START_CPP_NAMESPACE \
86   namespace cpu_features {  \
87   extern "C" {
88 #define CPU_FEATURES_END_CPP_NAMESPACE \
89   }                       \
90   }
91 #else
92 #define CPU_FEATURES_START_CPP_NAMESPACE
93 #define CPU_FEATURES_END_CPP_NAMESPACE
94 #endif
95
96 ////////////////////////////////////////////////////////////////////////////////
97 // Compiler flags
98 ////////////////////////////////////////////////////////////////////////////////
99
100 // Use the following to check if a feature is known to be available at compile
101 // time. See README.md for an example.
102 #if defined(CPU_FEATURES_ARCH_X86)
103 #define CPU_FEATURES_COMPILED_X86_AES defined(__AES__)
104 #define CPU_FEATURES_COMPILED_X86_F16C defined(__F16C__)
105 #define CPU_FEATURES_COMPILED_X86_BMI defined(__BMI__)
106 #define CPU_FEATURES_COMPILED_X86_BMI2 defined(__BMI2__)
107 #define CPU_FEATURES_COMPILED_X86_SSE (defined(__SSE__) || (_M_IX86_FP >= 1))
108 #define CPU_FEATURES_COMPILED_X86_SSE2 (defined(__SSE2__) || (_M_IX86_FP >= 2))
109 #define CPU_FEATURES_COMPILED_X86_SSE3 defined(__SSE3__)
110 #define CPU_FEATURES_COMPILED_X86_SSSE3 defined(__SSSE3__)
111 #define CPU_FEATURES_COMPILED_X86_SSE4_1 defined(__SSE4_1__)
112 #define CPU_FEATURES_COMPILED_X86_SSE4_2 defined(__SSE4_2__)
113 #define CPU_FEATURES_COMPILED_X86_AVX defined(__AVX__)
114 #define CPU_FEATURES_COMPILED_x86_AVX2 defined(__AVX2__)
115 #endif
116
117 #if defined(CPU_FEATURES_ARCH_ANY_ARM)
118 #define CPU_FEATURES_COMPILED_ANY_ARM_NEON defined(__ARM_NEON__)
119 #endif
120
121 #if defined(CPU_FEATURES_ARCH_MIPS)
122 #define CPU_FEATURES_COMPILED_MIPS_MSA defined(__mips_msa)
123 #endif
124
125 #endif  // CPU_FEATURES_INCLUDE_CPU_FEATURES_MACROS_H_