1 /* Helper methods for builtin intrinsic tests */ 2 3 #include <immintrin.h> 4 5 #if defined(__cplusplus) && (__cplusplus >= 201103L) 6 7 constexpr bool match_m64(__m64 _v, unsigned long long a) { 8 __v1du v = (__v1du)_v; 9 return v[0] == a; 10 } 11 12 constexpr bool match_v1di(__m64 v, long long a) { 13 return v[0] == a; 14 } 15 16 constexpr bool match_v2si(__m64 _v, int a, int b) { 17 __v2si v = (__v2si)_v; 18 return v[0] == a && v[1] == b; 19 } 20 21 constexpr bool match_v4hi(__m64 _v, short a, short b, short c, short d) { 22 __v4hi v = (__v4hi)_v; 23 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 24 } 25 26 constexpr bool match_v8qi(__m64 _v, char a, char b, char c, char d, char e, char f, char g, char h) { 27 __v8qi v = (__v8qi)_v; 28 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 29 } 30 31 constexpr bool match_m128(__m128 v, float a, float b, float c, float d) { 32 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 33 } 34 35 constexpr bool match_m128d(__m128d v, double a, double b) { 36 return v[0] == a && v[1] == b; 37 } 38 39 constexpr bool match_m128i(__m128i _v, unsigned long long a, unsigned long long b) { 40 __v2du v = (__v2du)_v; 41 return v[0] == a && v[1] == b; 42 } 43 44 constexpr bool match_v2di(__m128i v, long long a, long long b) { 45 return v[0] == a && v[1] == b; 46 } 47 48 constexpr bool match_v4si(__m128i _v, int a, int b, int c, int d) { 49 __v4si v = (__v4si)_v; 50 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 51 } 52 53 constexpr bool match_v8hi(__m128i _v, short a, short b, short c, short d, short e, short f, short g, short h) { 54 __v8hi v = (__v8hi)_v; 55 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 56 } 57 58 constexpr bool match_v16qi(__m128i _v, char a, char b, char c, char d, char e, char f, char g, char h, char i, char j, char k, char l, char m, char n, char o, char p) { 59 __v16qi v = (__v16qi)_v; 60 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p; 61 } 62 63 constexpr bool match_m256(__m256 v, float a, float b, float c, float d, float e, float f, float g, float h) { 64 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 65 } 66 67 constexpr bool match_m256d(__m256d v, double a, double b, double c, double d) { 68 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 69 } 70 71 constexpr bool match_m256i(__m256i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d) { 72 __v4du v = (__v4du)_v; 73 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 74 } 75 76 constexpr bool match_v4di(__m256i _v, long long a, long long b, long long c, long long d) { 77 __v4di v = (__v4di)_v; 78 return v[0] == a && v[1] == b && v[2] == c && v[3] == d; 79 } 80 81 constexpr bool match_v8si(__m256i _v, int a, int b, int c, int d, int e, int f, int g, int h) { 82 __v8si v = (__v8si)_v; 83 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 84 } 85 86 constexpr bool match_m512(__m512 v, float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l, float m, float n, float o, float p) { 87 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p; 88 } 89 90 constexpr bool match_m512d(__m512d v, double a, double b, double c, double d, double e, double f, double g, double h) { 91 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 92 } 93 94 constexpr bool match_m512i(__m512i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d, unsigned long long e, unsigned long long f, unsigned long long g, unsigned long long h) { 95 __v8du v = (__v8du)_v; 96 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 97 } 98 99 constexpr bool match_v8di(__m512i _v, long long a, long long b, long long c, long long d, long long e, long long f, long long g, long long h) { 100 __v8di v = (__v8di)_v; 101 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h; 102 } 103 104 constexpr bool match_v16si(__m512i _v, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n, int o, int p) { 105 __v16si v = (__v16si)_v; 106 return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p; 107 } 108 109 #define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__) 110 111 #else 112 113 #define TEST_CONSTEXPR(...) 114 115 #endif 116