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__((optimize ("no-strict-aliasing"))) \
89 __attribute__((noinline, unused)) \
90 check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
95 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
99 PRINTF ("%i: " FMT " != " FMT "\n", \
106 CHECK_EXP (union128i_b
, char, "%d")
107 CHECK_EXP (union128i_ub
, unsigned char, "%d")
108 CHECK_EXP (union128i_w
, short, "%d")
109 CHECK_EXP (union128i_uw
, unsigned short, "%d")
110 CHECK_EXP (union128i_d
, int, "0x%x")
111 CHECK_EXP (union128i_ud
, unsigned int, "0x%x")
113 CHECK_EXP (union128i_q
, long long, "0x%llx")
114 CHECK_EXP (union128i_uq
, unsigned long long, "0x%llx")
115 CHECK_EXP (union128d
, double, "%f")
119 CHECK_EXP (union128
, float, "%f")
121 #define ESP_FLOAT 0.000001
122 #define ESP_DOUBLE 0.000001
123 #define CHECK_ARRAY(ARRAY, TYPE, FMT) \
125 __attribute__((noinline, unused)) \
126 checkV##ARRAY (const TYPE *v, const TYPE *e, int n) \
131 for (i = 0; i < n; i++) \
135 PRINTF ("%i: " FMT " != " FMT "\n", \
141 CHECK_ARRAY(c
, char, "0x%hhx")
142 CHECK_ARRAY(s
, short, "0x%hx")
143 CHECK_ARRAY(i
, int, "0x%x")
144 CHECK_ARRAY(l
, long long, "0x%llx")
145 CHECK_ARRAY(uc
, unsigned char, "0x%hhx")
146 CHECK_ARRAY(us
, unsigned short, "0x%hx")
147 CHECK_ARRAY(ui
, unsigned int, "0x%x")
148 CHECK_ARRAY(ul
, unsigned long long, "0x%llx")
152 #define CHECK_FP_ARRAY(ARRAY, TYPE, ESP, FMT) \
154 __attribute__((noinline, unused)) \
155 checkV##ARRAY (const TYPE *v, const TYPE *e, int n) \
160 for (i = 0; i < n; i++) \
161 if (v[i] > (e[i] + (ESP)) || v[i] < (e[i] - (ESP))) \
165 PRINTF ("%i: " FMT " != " FMT "\n", \
171 CHECK_FP_ARRAY (d
, double, ESP_DOUBLE
, "%f")
172 CHECK_FP_ARRAY (f
, float, ESP_FLOAT
, "%f")
174 #ifdef NEED_IEEE754_FLOAT
180 unsigned long frac
: 23;
183 } bits
__attribute__((packed
));
187 #ifdef NEED_IEEE754_DOUBLE
193 unsigned long frac1
: 32;
194 unsigned long frac0
: 20;
197 } bits
__attribute__((packed
));
201 #define CHECK_FP_EXP(UINON_TYPE, VALUE_TYPE, ESP, FMT) \
203 __attribute__((noinline, unused)) \
204 check_fp_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \
209 for (i = 0; i < ARRAY_SIZE (u.a); i++) \
210 if (u.a[i] > (v[i] + (ESP)) || u.a[i] < (v[i] - (ESP))) \
213 PRINTF ("%i: " FMT " != " FMT "\n", \
219 CHECK_FP_EXP (union128
, float, ESP_FLOAT
, "%f")
221 CHECK_FP_EXP (union128d
, double, ESP_DOUBLE
, "%f")
223 #endif /* __ALTIVEC__ */