mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 19:49:32 +00:00
74 lines
1.8 KiB
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;
|
|
}
|
|
|