1*523fa7a6SAndroid Build Coastguard Worker /* 2*523fa7a6SAndroid Build Coastguard Worker * Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker * All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker * 5*523fa7a6SAndroid Build Coastguard Worker * This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker * LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker */ 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Worker #pragma once 10*523fa7a6SAndroid Build Coastguard Worker #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) 11*523fa7a6SAndroid Build Coastguard Worker /* GCC or clang-compatible compiler, targeting x86/x86-64 */ 12*523fa7a6SAndroid Build Coastguard Worker #include <x86intrin.h> 13*523fa7a6SAndroid Build Coastguard Worker #elif defined(__clang__) && (defined(__ARM_NEON__) || defined(__aarch64__)) 14*523fa7a6SAndroid Build Coastguard Worker /* Clang-compatible compiler, targeting arm neon */ 15*523fa7a6SAndroid Build Coastguard Worker #include <arm_neon.h> 16*523fa7a6SAndroid Build Coastguard Worker #elif defined(_MSC_VER) 17*523fa7a6SAndroid Build Coastguard Worker /* Microsoft C/C++-compatible compiler */ 18*523fa7a6SAndroid Build Coastguard Worker #include <intrin.h> 19*523fa7a6SAndroid Build Coastguard Worker #if _MSC_VER <= 1900 20*523fa7a6SAndroid Build Coastguard Worker #define _mm256_extract_epi64(X, Y) (_mm_extract_epi64(_mm256_extractf128_si256(X, Y >> 1), Y % 2)) 21*523fa7a6SAndroid Build Coastguard Worker #define _mm256_extract_epi32(X, Y) (_mm_extract_epi32(_mm256_extractf128_si256(X, Y >> 2), Y % 4)) 22*523fa7a6SAndroid Build Coastguard Worker #define _mm256_extract_epi16(X, Y) (_mm_extract_epi16(_mm256_extractf128_si256(X, Y >> 3), Y % 8)) 23*523fa7a6SAndroid Build Coastguard Worker #define _mm256_extract_epi8(X, Y) (_mm_extract_epi8(_mm256_extractf128_si256(X, Y >> 4), Y % 16)) 24*523fa7a6SAndroid Build Coastguard Worker #endif 25*523fa7a6SAndroid Build Coastguard Worker #elif defined(__GNUC__) && (defined(__ARM_NEON__) || defined(__aarch64__)) 26*523fa7a6SAndroid Build Coastguard Worker /* GCC-compatible compiler, targeting ARM with NEON */ 27*523fa7a6SAndroid Build Coastguard Worker #include <arm_neon.h> 28*523fa7a6SAndroid Build Coastguard Worker #if defined (MISSING_ARM_VLD1) 29*523fa7a6SAndroid Build Coastguard Worker #include <executorch/kernels/optimized/vec/vec256/missing_vld1_neon.h> 30*523fa7a6SAndroid Build Coastguard Worker #elif defined (MISSING_ARM_VST1) 31*523fa7a6SAndroid Build Coastguard Worker #include <executorch/kernels/optimized/vec/vec256/missing_vst1_neon.h> 32*523fa7a6SAndroid Build Coastguard Worker #endif 33*523fa7a6SAndroid Build Coastguard Worker #elif defined(__GNUC__) && defined(__IWMMXT__) 34*523fa7a6SAndroid Build Coastguard Worker /* GCC-compatible compiler, targeting ARM with WMMX */ 35*523fa7a6SAndroid Build Coastguard Worker #include <mmintrin.h> 36*523fa7a6SAndroid Build Coastguard Worker #elif defined(__s390x__) 37*523fa7a6SAndroid Build Coastguard Worker // targets Z/architecture 38*523fa7a6SAndroid Build Coastguard Worker // we will include vecintrin later 39*523fa7a6SAndroid Build Coastguard Worker #elif (defined(__GNUC__) || defined(__xlC__)) && \ 40*523fa7a6SAndroid Build Coastguard Worker (defined(__VEC__) || defined(__ALTIVEC__)) 41*523fa7a6SAndroid Build Coastguard Worker /* XLC or GCC-compatible compiler, targeting PowerPC with VMX/VSX */ 42*523fa7a6SAndroid Build Coastguard Worker #include <altivec.h> 43*523fa7a6SAndroid Build Coastguard Worker /* We need to undef those tokens defined by <altivec.h> to avoid conflicts 44*523fa7a6SAndroid Build Coastguard Worker with the C++ types. => Can still use __bool/__vector */ 45*523fa7a6SAndroid Build Coastguard Worker #undef bool 46*523fa7a6SAndroid Build Coastguard Worker #undef vector 47*523fa7a6SAndroid Build Coastguard Worker #undef pixel 48*523fa7a6SAndroid Build Coastguard Worker #elif defined(__GNUC__) && defined(__SPE__) 49*523fa7a6SAndroid Build Coastguard Worker /* GCC-compatible compiler, targeting PowerPC with SPE */ 50*523fa7a6SAndroid Build Coastguard Worker #include <spe.h> 51*523fa7a6SAndroid Build Coastguard Worker #endif 52