Update concepts branch to revision 131834
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / m128-check.h
bloba20f8215082ff19ba125dc120fcbf3b1ba7fa116
1 #include <stdio.h>
2 #include <emmintrin.h>
4 typedef union
6 __m128i x;
7 char a[16];
8 } union128i_b;
10 typedef union
12 __m128i x;
13 short a[8];
14 } union128i_w;
16 typedef union
18 __m128i x;
19 int a[4];
20 } union128i_d;
22 typedef union
24 __m128i x;
25 long long a[2];
26 } union128i_q;
28 typedef union
30 __m128 x;
31 float a[4];
32 } union128;
34 typedef union
36 __m128d x;
37 double a[2];
38 } union128d;
40 #ifndef ARRAY_SIZE
41 #define ARRAY_SIZE(A) (sizeof (A) / sizeof ((A)[0]))
42 #endif
44 #ifdef DEBUG
45 #define PRINTF printf
46 #else
47 #define PRINTF(...)
48 #endif
50 #define CHECK_EXP(UINON_TYPE, VALUE_TYPE, FMT) \
51 static int \
52 __attribute__((noinline, unused)) \
53 check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
54 { \
55 int i; \
56 int err = 0; \
58 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
59 if (u.a[i] != v[i]) \
60 { \
61 err++; \
62 PRINTF ("%i: " FMT " != " FMT "\n", \
63 i, v[i], u.a[i]); \
64 } \
65 return err; \
68 CHECK_EXP (union128i_b, char, "%d")
69 CHECK_EXP (union128i_w, short, "%d")
70 CHECK_EXP (union128i_d, int, "0x%x")
71 CHECK_EXP (union128i_q, long long, "0x%llx")
72 CHECK_EXP (union128, float, "%f")
73 CHECK_EXP (union128d, double, "%f")