3 #define NO_WARN_X86_INTRINSICS 1
57 unsigned long long a
[2];
77 #define ARRAY_SIZE(A) (sizeof (A) / sizeof ((A)[0]))
86 #define CHECK_EXP(UINON_TYPE, VALUE_TYPE, FMT) \
88 __attribute__((noinline, unused)) \
89 check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
94 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
98 PRINTF ("%i: " FMT " != " FMT "\n", \
105 CHECK_EXP (union128i_b
, char, "%d")
106 CHECK_EXP (union128i_ub
, unsigned char, "%d")
107 CHECK_EXP (union128i_w
, short, "%d")
108 CHECK_EXP (union128i_uw
, unsigned short, "%d")
109 CHECK_EXP (union128i_d
, int, "0x%x")
110 CHECK_EXP (union128i_ud
, unsigned int, "0x%x")
112 CHECK_EXP (union128i_q
, long long, "0x%llx")
113 CHECK_EXP (union128i_uq
, unsigned long long, "0x%llx")
114 CHECK_EXP (union128d
, double, "%f")
118 CHECK_EXP (union128
, float, "%f")
120 #define ESP_FLOAT 0.000001
121 #define ESP_DOUBLE 0.000001
122 #define CHECK_ARRAY(ARRAY, TYPE, FMT) \
124 __attribute__((noinline, unused)) \
125 checkV##ARRAY (const TYPE *v, const TYPE *e, int n) \
130 for (i = 0; i < n; i++) \
134 PRINTF ("%i: " FMT " != " FMT "\n", \
140 CHECK_ARRAY(c
, char, "0x%hhx")
141 CHECK_ARRAY(s
, short, "0x%hx")
142 CHECK_ARRAY(i
, int, "0x%x")
143 CHECK_ARRAY(l
, long long, "0x%llx")
144 CHECK_ARRAY(uc
, unsigned char, "0x%hhx")
145 CHECK_ARRAY(us
, unsigned short, "0x%hx")
146 CHECK_ARRAY(ui
, unsigned int, "0x%x")
147 CHECK_ARRAY(ul
, unsigned long long, "0x%llx")
151 #define CHECK_FP_ARRAY(ARRAY, TYPE, ESP, FMT) \
153 __attribute__((noinline, unused)) \
154 checkV##ARRAY (const TYPE *v, const TYPE *e, int n) \
159 for (i = 0; i < n; i++) \
160 if (v[i] > (e[i] + (ESP)) || v[i] < (e[i] - (ESP))) \
164 PRINTF ("%i: " FMT " != " FMT "\n", \
170 CHECK_FP_ARRAY (d
, double, ESP_DOUBLE
, "%f")
171 CHECK_FP_ARRAY (f
, float, ESP_FLOAT
, "%f")
173 #ifdef NEED_IEEE754_FLOAT
179 unsigned long frac
: 23;
182 } bits
__attribute__((packed
));
186 #ifdef NEED_IEEE754_DOUBLE
192 unsigned long frac1
: 32;
193 unsigned long frac0
: 20;
196 } bits
__attribute__((packed
));
200 #define CHECK_FP_EXP(UINON_TYPE, VALUE_TYPE, ESP, FMT) \
202 __attribute__((noinline, unused)) \
203 check_fp_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
208 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
209 if (u.a[i] > (v[i] + (ESP)) || u.a[i] < (v[i] - (ESP))) \
212 PRINTF ("%i: " FMT " != " FMT "\n", \
218 CHECK_FP_EXP (union128
, float, ESP_FLOAT
, "%f")
220 CHECK_FP_EXP (union128d
, double, ESP_DOUBLE
, "%f")
222 #endif /* __ALTIVEC__ */