blob: e9051bf9fcbe63a5e1d7e7a7f2e523d99576662d [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O2 -mavx2 -mno-avx512f" } */
/* { dg-require-effective-target avx2 } */
#ifndef CHECK_H
#define CHECK_H "avx2-check.h"
#endif
#ifndef TEST
#define TEST avx2_test
#endif
#include CHECK_H
typedef long long V __attribute__((vector_size (32)));
#define TESTN(N) \
static V \
__attribute__((noipa)) \
test##N (V x) \
{ \
return x >> N; \
}
#define TESTS TESTN (63) TESTN (49) TESTN (32) TESTN (31) TESTN (18)
TESTS
struct
{
int n;
V (*fn) (V);
} tests[] = {
#undef TESTN
#define TESTN(N) { N, test##N },
TESTS
};
static void
TEST (void)
{
V a = (V) { 0xdeadbeefcafebabeULL, 0x123456789abcdef0ULL,
0x173a74be8a95134cULL, 0x817bae35ac0ebf12ULL };
int i;
for (i = 0; tests[i].n; i++)
{
V c = tests[i].fn (a);
if (c[0] != a[0] >> tests[i].n || c[1] != a[1] >> tests[i].n
|| c[2] != a[2] >> tests[i].n || c[3] != a[3] >> tests[i].n)
abort ();
}
}