blob: 509d5a8d762b3a43237b2c4905767db8e4083972 [file] [log] [blame]
/* PR target/95524 */
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -Wno-shift-count-overflow" } */
#ifndef CHECK
#define CHECK "avx512bw-check.h"
#endif
#include CHECK
#ifndef TEST
#define TEST avx512bw_test
#endif
typedef char v64qi __attribute__ ((vector_size (64)));
typedef unsigned char v64uqi __attribute__ ((vector_size (64)));
#define TEST_SHIFT(N) \
do \
{ \
int i; \
for (i = 0; i < 64; i++) \
exp1.a[i] = op1.a[i] << N; \
res1.x = (__m512i) (((v64qi) op1.x) << N); \
if (check_union512i_b (res1, exp1.a)) \
abort (); \
\
for (i = 0; i < 64; i++) \
exp1.a[i] = op1.a[i] >> N; \
res1.x = (__m512i) (((v64qi) op1.x) >> N); \
if (check_union512i_b (res1, exp1.a)) \
abort (); \
\
for (i = 0; i < 64; i++) \
exp2.a[i] = op2.a[i] >> N; \
res2.x = (__m512i) (((v64uqi) op2.x >> N)); \
if (check_union512i_ub (res2, exp2.a)) \
abort (); \
} \
while (0)
static void
TEST (void)
{
union512i_b op1, exp1, res1;
union512i_ub op2, exp2, res2;
for (int i = 0; i != 64; i++)
{
op2.a[i] = i * i;
op1.a[i] = i * i + 200 * i;
}
TEST_SHIFT (0);
TEST_SHIFT (1);
TEST_SHIFT (2);
TEST_SHIFT (3);
TEST_SHIFT (4);
TEST_SHIFT (5);
TEST_SHIFT (6);
TEST_SHIFT (7);
TEST_SHIFT (8);
}