| /* { dg-do compile } */ |
| /* { dg-options "-march=icelake-server -O3" } */ |
| /* { dg-final { scan-assembler-times "vpopcntw\[ \t\]+" 4 } } */ |
| /* 2 vplzcntd come from function clzw, the other 2 come from function clzb0. */ |
| /* { dg-final { scan-assembler-times "vplzcntd\[ \t\]+" 4 } } */ |
| |
| void |
| popcntw (unsigned short *p, unsigned short *q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = __builtin_popcount (q[i]); |
| } |
| |
| void |
| clzw (unsigned short *p, unsigned short* __restrict q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = __builtin_clz (q[i]); |
| } |
| |
| void |
| ffsw (unsigned short *p, unsigned short* __restrict q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = __builtin_ffs (q[i]); |
| } |
| |
| void |
| ctzw (unsigned short *p, unsigned short* __restrict q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = __builtin_ctz (q[i]); |
| } |
| |
| void |
| clzw0 (unsigned short *p, unsigned short* __restrict q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = q[i] ? __builtin_clz (q[i]) : 16; |
| } |
| |
| void |
| ctzw0 (unsigned short *p, unsigned short* __restrict q) |
| { |
| for (unsigned int i = 0; i < 2048; ++i) |
| p[i] = q[i] ? __builtin_ctz (q[i]) : 16; |
| } |