xref: /aosp_15_r20/external/pytorch/aten/src/ATen/cpu/vec/intrinsics.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #pragma once
2 #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
3 /* GCC or clang-compatible compiler, targeting x86/x86-64 */
4 #include <x86intrin.h>
5 #elif defined(__clang__) && (defined(__ARM_NEON__) || defined(__aarch64__))
6 /* Clang-compatible compiler, targeting arm neon */
7 #include <arm_neon.h>
8 #elif defined(_MSC_VER)
9 /* Microsoft C/C++-compatible compiler */
10 #include <intrin.h>
11 #if _MSC_VER <= 1900
12 #define _mm256_extract_epi64(X, Y) (_mm_extract_epi64(_mm256_extractf128_si256(X, Y >> 1), Y % 2))
13 #define _mm256_extract_epi32(X, Y) (_mm_extract_epi32(_mm256_extractf128_si256(X, Y >> 2), Y % 4))
14 #define _mm256_extract_epi16(X, Y) (_mm_extract_epi16(_mm256_extractf128_si256(X, Y >> 3), Y % 8))
15 #define _mm256_extract_epi8(X, Y) (_mm_extract_epi8(_mm256_extractf128_si256(X, Y >> 4), Y % 16))
16 #endif
17 #elif defined(__GNUC__) && (defined(__ARM_NEON__) || defined(__aarch64__))
18 /* GCC-compatible compiler, targeting ARM with NEON */
19 #include <arm_neon.h>
20 #if defined (MISSING_ARM_VLD1)
21 #include <ATen/cpu/vec/vec256/missing_vld1_neon.h>
22 #elif defined (MISSING_ARM_VST1)
23 #include <ATen/cpu/vec/vec256/missing_vst1_neon.h>
24 #endif
25 #elif defined(__GNUC__) && defined(__IWMMXT__)
26 /* GCC-compatible compiler, targeting ARM with WMMX */
27 #include <mmintrin.h>
28 #elif defined(__s390x__)
29 // targets Z/architecture
30 // we will include vecintrin later
31 #elif (defined(__GNUC__) || defined(__xlC__)) &&                               \
32         (defined(__VEC__) || defined(__ALTIVEC__))
33 /* XLC or GCC-compatible compiler, targeting PowerPC with VMX/VSX */
34 #include <altivec.h>
35 /* We need to undef those tokens defined by <altivec.h> to avoid conflicts
36    with the C++ types. => Can still use __bool/__vector */
37 #undef bool
38 #undef vector
39 #undef pixel
40 #elif defined(__GNUC__) && defined(__SPE__)
41 /* GCC-compatible compiler, targeting PowerPC with SPE */
42 #include <spe.h>
43 #endif
44