blob: f6045abe8ac4c25ee1b8cc959cafceebaf8bcd63 [file] [log] [blame]
/* { 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;
}