1 #pragma once 2 3 #include<simdconfig.h> 4 5 #ifdef _MSC_VER 6 #define ALIGN_16 __declspec(align(16)) 7 #else 8 #include<stdalign.h> 9 #define ALIGN_16 alignas(16) 10 #endif 11 12 13 /* Yes, I do know that arr[4] decays into a pointer 14 * as a function argument. Don't do this in real code 15 * but for this test it is ok. 16 */ 17 18 void increment_fallback(float arr[4]); 19 20 #if HAVE_MMX 21 int mmx_available(void); 22 void increment_mmx(float arr[4]); 23 #endif 24 25 #if HAVE_SSE 26 int sse_available(void); 27 void increment_sse(float arr[4]); 28 #endif 29 30 #if HAVE_SSE2 31 int sse2_available(void); 32 void increment_sse2(float arr[4]); 33 #endif 34 35 #if HAVE_SSE3 36 int sse3_available(void); 37 void increment_sse3(float arr[4]); 38 #endif 39 40 #if HAVE_SSSE3 41 int ssse3_available(void); 42 void increment_ssse3(float arr[4]); 43 #endif 44 45 #if HAVE_SSE41 46 int sse41_available(void); 47 void increment_sse41(float arr[4]); 48 #endif 49 50 #if HAVE_SSE42 51 int sse42_available(void); 52 void increment_sse42(float arr[4]); 53 #endif 54 55 #if HAVE_AVX 56 int avx_available(void); 57 void increment_avx(float arr[4]); 58 #endif 59 60 #if HAVE_AVX2 61 int avx2_available(void); 62 void increment_avx2(float arr[4]); 63 #endif 64 65 #if HAVE_NEON 66 int neon_available(void); 67 void increment_neon(float arr[4]); 68 #endif 69 70 #if HAVE_ALTIVEC 71 int altivec_available(void); 72 void increment_altivec(float arr[4]); 73 #endif 74 75 /* And so on. */ 76