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