blob: a928d87f99a0e41c718cb42869bc3908214a0d3f [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vl" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512VL
#ifndef CHECK
#define CHECK "avx512f-helper.h"
#endif
#include CHECK
#include "pr91103-1.c"
#define RUNCHECK(U,V,S,IDX) \
do \
{ \
S tmp = foo_##V##_##IDX ((V)U.x); \
if (tmp != U.a[IDX]) \
abort(); \
} \
while (0)
void
test_256 (void)
{
union512i_d di1;
union256i_d di2;
union512i_q q1;
union256i_q q2;
union512 f1;
union256 f2;
union512d d1;
union256d d2;
int sign = 1;
int i = 0;
for (i = 0; i < 16; i++)
{
di1.a[i] = 30 * (i - 30) * sign;
f1.a[i] = 56.78 * (i - 30) * sign;
sign = -sign;
}
for (i = 0; i != 8; i++)
{
di2.a[i] = 15 * (i + 40) * sign;
f2.a[i] = 90.12 * (i + 40) * sign;
q1.a[i] = 15 * (i + 40) * sign;
d1.a[i] = 90.12 * (i + 40) * sign;
sign = -sign;
}
for (i = 0; i != 4; i++)
{
q2.a[i] = 15 * (i + 40) * sign;
d2.a[i] = 90.12 * (i + 40) * sign;
sign = -sign;
}
RUNCHECK (f2, v8sf, float, 4);
RUNCHECK (f2, v8sf, float, 7);
RUNCHECK (di2, v8si, int, 4);
RUNCHECK (di2, v8si, int, 7);
RUNCHECK (f1, v16sf, float, 4);
RUNCHECK (f1, v16sf, float, 8);
RUNCHECK (f1, v16sf, float, 12);
RUNCHECK (f1, v16sf, float, 15);
RUNCHECK (di1, v16si, int, 4);
RUNCHECK (di1, v16si, int, 8);
RUNCHECK (di1, v16si, int, 12);
RUNCHECK (di1, v16si, int, 15);
RUNCHECK (d2, v4df, double, 2);
RUNCHECK (d2, v4df, double, 3);
RUNCHECK (q2, v4di, long long, 2);
RUNCHECK (q2, v4di, long long, 3);
RUNCHECK (d1, v8df, double, 4);
RUNCHECK (d1, v8df, double, 7);
RUNCHECK (q1, v8di, long long, 4);
RUNCHECK (q1, v8di, long long, 7);
}
void
test_128()
{
}