gcc/libgomp/testsuite/libgomp.hsa.c/bits-insns.c

74 lines
1.8 KiB
C

#include <math.h>
#define N 12
int main()
{
unsigned int arguments[N] = {0u, 1u, 2u, 3u, 111u, 333u, 444u, 0x80000000u, 0x0000ffffu, 0xf0000000u, 0xff000000u, 0xffffffffu};
int clrsb[N] = {};
int clz[N] = {};
int ctz[N] = {};
int ffs[N] = {};
int parity[N] = {};
int popcount[N] = {};
int ref_clrsb[N] = {};
int ref_clz[N] = {};
int ref_ctz[N] = {};
int ref_ffs[N] = {};
int ref_parity[N] = {};
int ref_popcount[N] = {};
for (unsigned i = 0; i < N; i++)
{
ref_clrsb[i] = __builtin_clrsb (arguments[i]);
ref_clz[i] = __builtin_clz (arguments[i]);
ref_ctz[i] = __builtin_ctz (arguments[i]);
ref_ffs[i] = __builtin_ffs (arguments[i]);
ref_parity[i] = __builtin_parity (arguments[i]);
ref_popcount[i] = __builtin_popcount (arguments[i]);
}
#pragma omp target map(from:clz, ctz, ffs, parity, popcount)
{
for (unsigned i = 0; i < N; i++)
{
clrsb[i] = __builtin_clrsb (arguments[i]);
clz[i] = __builtin_clz (arguments[i]);
ctz[i] = __builtin_ctz (arguments[i]);
ffs[i] = __builtin_ffs (arguments[i]);
parity[i] = __builtin_parity (arguments[i]);
popcount[i] = __builtin_popcount (arguments[i]);
}
}
for (unsigned i = 0; i < N; i++)
if (ref_clrsb[i] != clrsb[i])
__builtin_abort ();
/* CLZ of zero is undefined for zero. */
for (unsigned i = 1; i < N; i++)
if (ref_clz[i] != clz[i])
__builtin_abort ();
/* Likewise for ctz */
for (unsigned i = 1; i < N; i++)
if (ref_ctz[i] != ctz[i])
__builtin_abort ();
for (unsigned i = 0; i < N; i++)
if (ref_ffs[i] != ffs[i])
__builtin_abort ();
for (unsigned i = 0; i < N; i++)
if (ref_parity[i] != parity[i])
__builtin_abort ();
for (unsigned i = 0; i < N; i++)
if (ref_popcount[i] != popcount[i])
__builtin_abort ();
return 0;
}