2014-04-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / m256-check.h
blobe1843550ecdad39d78bd035192aba025cb66dbde
1 #include <immintrin.h>
2 #include "m128-check.h"
4 #ifndef max
5 #define max(a, b) (((a) > (b)) ? (a):(b))
6 #endif
7 #ifndef min
8 #define min(a, b) (((a) < (b)) ? (a):(b))
9 #endif
11 typedef union
13 __m256i x;
14 char a[32];
15 } union256i_b;
17 typedef union
19 __m256i x;
20 short a[16];
21 } union256i_w;
23 typedef union
25 __m256i x;
26 int a[8];
27 } union256i_d;
29 typedef union
31 __m256i x;
32 long long a[4];
33 } union256i_q;
35 typedef union
37 __m256 x;
38 float a[8];
39 } union256;
41 typedef union
43 __m256d x;
44 double a[4];
45 } union256d;
47 CHECK_EXP (union256i_b, char, "%d")
48 CHECK_EXP (union256i_w, short, "%d")
49 CHECK_EXP (union256i_d, int, "0x%x")
50 CHECK_EXP (union256i_q, long long, "0x%llx")
51 CHECK_EXP (union256, float, "%f")
52 CHECK_EXP (union256d, double, "%f")
54 #define CHECK_FP_EXP(UINON_TYPE, VALUE_TYPE, ESP, FMT) \
55 static int \
56 __attribute__((noinline, unused)) \
57 check_fp_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
58 { \
59 int i; \
60 int err = 0; \
62 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
63 if (u.a[i] > (v[i] + (ESP)) || u.a[i] < (v[i] - (ESP))) \
64 { \
65 err++; \
66 PRINTF ("%i: " FMT " != " FMT "\n", \
67 i, v[i], u.a[i]); \
68 } \
69 return err; \
72 CHECK_FP_EXP (union256, float, ESP_FLOAT, "%f")
73 CHECK_FP_EXP (union256d, double, ESP_DOUBLE, "%f")