1 /* PR target/95524 */ 2 /* { dg-do run } */ 3 /* { dg-options "-O2 -mavx2 -Wno-shift-count-overflow" } */ 4 5 #ifndef CHECK 6 #define CHECK "avx2-check.h" 7 #endif 8 9 #include CHECK 10 11 #ifndef TEST 12 #define TEST avx2_test 13 #endif 14 15 typedef char v32qi __attribute__ ((vector_size (32))); 16 typedef unsigned char v32uqi __attribute__ ((vector_size (32))); 17 18 #define TEST_SHIFT(N) \ 19 do \ 20 { \ 21 int i; \ 22 for (i = 0; i < 32; i++) \ 23 exp1.a[i] = op1.a[i] << N; \ 24 res1.x = (__m256i) (((v32qi) op1.x) << N); \ 25 if (check_union256i_b (res1, exp1.a)) \ 26 abort (); \ 27 \ 28 for (i = 0; i < 32; i++) \ 29 exp1.a[i] = op1.a[i] >> N; \ 30 res1.x = (__m256i) (((v32qi) op1.x) >> N); \ 31 if (check_union256i_b (res1, exp1.a)) \ 32 abort (); \ 33 \ 34 for (i = 0; i < 32; i++) \ 35 exp2.a[i] = op2.a[i] >> N; \ 36 res2.x = (__m256i) (((v32uqi) op2.x >> N)); \ 37 if (check_union256i_ub (res2, exp2.a)) \ 38 abort (); \ 39 } \ 40 while (0) 41 42 static void TEST(void)43TEST (void) 44 { 45 union256i_b op1, exp1, res1; 46 union256i_ub op2, exp2, res2; 47 for (int i = 0; i != 32; i++) 48 { 49 op2.a[i] = i * i; 50 op1.a[i] = i * i + 200 * i; 51 } 52 TEST_SHIFT (0); 53 TEST_SHIFT (1); 54 TEST_SHIFT (2); 55 TEST_SHIFT (3); 56 TEST_SHIFT (4); 57 TEST_SHIFT (5); 58 TEST_SHIFT (6); 59 TEST_SHIFT (7); 60 TEST_SHIFT (8); 61 } 62 63