blob: 8968a64a95cb40a466dd77fea4e9f9f63ad707dc [file] [log] [blame]
#define PASS_ARRAY(...) {__VA_ARGS__}
#define SETUP_TEST_CASE_VEC(I, INTRINSIC, BASE_TYPE, TYPE1, TYPE2, \
VALS1, VALS2, EXPS, LEN, FM, Q_LD, Q_ST, \
V1, V2) \
do \
{ \
int i##I; \
BASE_TYPE vec##I##_1_data[] = VALS1; \
BASE_TYPE vec##I##_2_data[] = VALS2; \
V1 TYPE1 vec##I##_1 = vld1##Q_LD##_##FM (vec##I##_1_data); \
V2 TYPE2 vec##I##_2 = vld1##Q_LD##_##FM (vec##I##_2_data); \
TYPE1 actual##I##_v = INTRINSIC (vec##I##_1, vec##I##_2); \
volatile BASE_TYPE expected##I[] = EXPS; \
BASE_TYPE actual##I[LEN]; \
vst1##Q_ST##_##FM (actual##I, actual##I##_v); \
for (i##I = 0; i##I < LEN; ++i##I) \
if (actual##I[i##I] != expected##I[i##I]) \
abort (); \
} \
while (0) \
#define SETUP_TEST_CASE_SCALAR(I, INTRINSIC, TYPE, VAL1, VAL2, EXP) \
do \
{ \
TYPE vec_##I##_1 = VAL1; \
TYPE vec_##I##_2 = VAL2; \
TYPE expected_##I = EXP; \
volatile TYPE actual_##I = INTRINSIC (vec_##I##_1, vec_##I##_2); \
if (actual_##I != expected_##I) \
abort (); \
} \
while (0) \
/* Functions used to return values that won't be optimised away. */
float32_t __attribute__ ((noinline))
foo32 ()
{
return 1.0;
}
float64_t __attribute__ ((noinline))
foo64 ()
{
return 1.0;
}