1 /* { dg-do run } */ 2 /* { dg-options "-O2 -ftree-vectorize -ffast-math -mavx512bw -save-temps" } */ 3 /* { dg-require-effective-target avx512bw } */ 4 5 #include "avx512bw-check.h" 6 7 #define N 400 8 9 typedef struct 10 { 11 unsigned char real; 12 unsigned char imag; 13 } complex8_t; 14 15 void foo(unsigned char * a,complex8_t * x,unsigned len)16__attribute__ ((noinline)) foo (unsigned char *a, 17 complex8_t *x, unsigned len) 18 { 19 unsigned i; 20 for (i = 0; i < len; i++) 21 a[i] = x[i].imag + x[i].real; 22 } 23 24 void avx512bw_test()25avx512bw_test () 26 { 27 unsigned short i; 28 unsigned char j = 0; 29 complex8_t x [N]; 30 unsigned char a [N]; 31 32 for (i = 0; i < N; i++, j++) 33 { 34 x [i].real = j; 35 x [i].imag = j; 36 } 37 38 foo (a, x, N); 39 40 j = 0; 41 for (i = 0; i < N; i++, j++) 42 if ( a[i] != (unsigned char)(j+j) ) 43 abort (); 44 } 45 46 /* { dg-final { scan-assembler-times "vpmovwb\[ \\t\]+\[^\n\]*%zmm" 4 } } */ 47