|
26 | 26 |
|
27 | 27 | // Possible architectures:
|
28 | 28 | // - DNNL_X64
|
| 29 | +// - DNNL_X86 |
29 | 30 | // - DNNL_AARCH64
|
| 31 | +// - DNNL_ARM |
30 | 32 | // - DNNL_PPC64
|
31 | 33 | // - DNNL_S390X
|
32 | 34 | // - DNNL_RV64
|
|
35 | 37 |
|
36 | 38 | #if defined(DNNL_X64) + defined(DNNL_AARCH64) + defined(DNNL_PPC64) \
|
37 | 39 | + defined(DNNL_S390X) + defined(DNNL_RV64) \
|
| 40 | + + defined(DNNL_ARM) + defined(DNNL_X86) \ |
38 | 41 | + defined(DNNL_ARCH_GENERIC) \
|
39 | 42 | == 0
|
40 |
| -#if defined(__x86_64__) || defined(_M_X64) |
| 43 | +#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || \ |
| 44 | + defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) |
41 | 45 | #define DNNL_X64 1
|
42 |
| -#elif defined(__aarch64__) |
| 46 | +#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__IA32__) || defined(_M_I86) || \ |
| 47 | + defined(_M_IX86) || defined(__X86__) || defined(_X86_) || defined(__I86__) || defined(__386) |
| 48 | +#define DNNL_X86 1 |
| 49 | +#elif defined(__aarch64__) || defined(_M_ARM64) |
43 | 50 | #define DNNL_AARCH64 1
|
| 51 | +#elif defined(__arm__) || defined(_M_ARM) || defined(__ARMEL__) |
| 52 | +#define DNNL_ARM 1 |
44 | 53 | #elif defined(__powerpc64__) || defined(__PPC64__) || defined(_ARCH_PPC64)
|
45 | 54 | #define DNNL_PPC64 1
|
46 | 55 | #elif defined(__s390x__)
|
|
54 | 63 |
|
55 | 64 | #if defined(DNNL_X64) + defined(DNNL_AARCH64) + defined(DNNL_PPC64) \
|
56 | 65 | + defined(DNNL_S390X) + defined(DNNL_RV64) \
|
| 66 | + + defined(DNNL_ARM) + defined(DNNL_X86) \ |
57 | 67 | + defined(DNNL_ARCH_GENERIC) \
|
58 | 68 | != 1
|
59 | 69 | #error One and only one architecture should be defined at a time
|
|
62 | 72 | #if !defined(DNNL_X64)
|
63 | 73 | #define DNNL_X64 0
|
64 | 74 | #endif
|
| 75 | +#if !defined(DNNL_X86) |
| 76 | +#define DNNL_X86 0 |
| 77 | +#endif |
65 | 78 | #if !defined(DNNL_AARCH64)
|
66 | 79 | #define DNNL_AARCH64 0
|
67 | 80 | #endif
|
| 81 | +#if !defined(DNNL_ARM) |
| 82 | +#define DNNL_ARM 0 |
| 83 | +#endif |
68 | 84 | #if !defined(DNNL_PPC64)
|
69 | 85 | #define DNNL_PPC64 0
|
70 | 86 | #endif
|
|
84 | 100 | #define DNNL_PPC64_ONLY(...) Z_CONDITIONAL_DO(DNNL_PPC64_ONLY, __VA_ARGS__)
|
85 | 101 | #define DNNL_S390X_ONLY(...) Z_CONDITIONAL_DO(DNNL_S390X_ONLY, __VA_ARGS__)
|
86 | 102 | #define DNNL_AARCH64_ONLY(...) Z_CONDITIONAL_DO(DNNL_AARCH64, __VA_ARGS__)
|
| 103 | +#define DNNL_ARM_ONLY(...) Z_CONDITIONAL_DO(DNNL_ARM, __VA_ARGS__) |
87 | 104 |
|
88 | 105 | // Using RISC-V implementations optimized with RVV Intrinsics is optional for RISC-V builds
|
89 | 106 | // and can be enabled with DNNL_ARCH_OPT_FLAGS="-march=<ISA-string>" option, where <ISA-string>
|
|
105 | 122 | #define DNNL_AARCH64_ACL_ONLY(...)
|
106 | 123 | #endif
|
107 | 124 |
|
| 125 | +// Using Arm Compute Library kernels is optional for ARM builds |
| 126 | +// and can be enabled with the DNNL_AARCH64_USE_ACL CMake option |
| 127 | +#if defined(DNNL_ARM) && defined(DNNL_AARCH64_USE_ACL) |
| 128 | +#define DNNL_ARM_ACL_ONLY(...) __VA_ARGS__ |
| 129 | +#else |
| 130 | +#define DNNL_ARM_ACL_ONLY(...) |
| 131 | +#endif |
| 132 | + |
108 | 133 | // Primitive ISA section for configuring knobs.
|
109 | 134 | // Note: MSVC preprocessor by some reason "eats" symbols it's not supposed to
|
110 | 135 | // if __VA_ARGS__ is passed as empty. Then things happen like this for non-x64:
|
|
0 commit comments