#pragma once #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) /* Clang-compatible compiler, targeting x86/x86-64 */ #include #elif defined(_MSC_VER) /* Microsoft C/C++-compatible compiler */ #include #if _MSC_VER <= 1900 #define _mm256_extract_epi64(X, Y) (((uint64_t*)&X)[Y]) #endif #elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) /* GCC-compatible compiler, targeting x86/x86-64 */ #include #elif defined(__GNUC__) && defined(__ARM_NEON__) /* GCC-compatible compiler, targeting ARM with NEON */ #include #elif defined(__GNUC__) && defined(__IWMMXT__) /* GCC-compatible compiler, targeting ARM with WMMX */ #include #elif (defined(__GNUC__) || defined(__xlC__)) && \ (defined(__VEC__) || defined(__ALTIVEC__)) /* XLC or GCC-compatible compiler, targeting PowerPC with VMX/VSX */ #include /* We need to undef those tokens defined by to avoid conflicts with the C++ types. => Can still use __bool/__vector */ #undef bool #undef vector #undef pixel #elif defined(__GNUC__) && defined(__SPE__) /* GCC-compatible compiler, targeting PowerPC with SPE */ #include #endif