2019-04-25 14:45:17 +02:00
|
|
|
/**
|
|
|
|
* Author......: See docs/credits.txt
|
|
|
|
* License.....: MIT
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "inc_vendor.h"
|
|
|
|
#include "inc_types.h"
|
|
|
|
#include "inc_platform.h"
|
|
|
|
|
|
|
|
#ifdef IS_NATIVE
|
2019-04-26 13:28:44 +02:00
|
|
|
#define SYNC_THREADS()
|
2019-04-25 14:45:17 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef IS_CUDA
|
|
|
|
|
|
|
|
DECLSPEC u32 atomic_dec (u32 *p)
|
|
|
|
{
|
|
|
|
return atomicSub (p, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u32 atomic_inc (u32 *p)
|
|
|
|
{
|
|
|
|
return atomicAdd (p, 1);
|
|
|
|
}
|
|
|
|
|
2019-04-26 13:28:44 +02:00
|
|
|
DECLSPEC u32 atomic_or (u32 *p, u32 val)
|
|
|
|
{
|
|
|
|
return atomicOr (p, val);
|
|
|
|
}
|
|
|
|
|
2019-04-25 14:45:17 +02:00
|
|
|
DECLSPEC size_t get_global_id (const u32 dimindx __attribute__((unused)))
|
|
|
|
{
|
2019-05-04 21:52:00 +02:00
|
|
|
return (blockIdx.x * blockDim.x) + threadIdx.x;
|
2019-04-25 14:45:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC size_t get_local_id (const u32 dimindx __attribute__((unused)))
|
|
|
|
{
|
|
|
|
return threadIdx.x;
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC size_t get_local_size (const u32 dimindx __attribute__((unused)))
|
|
|
|
{
|
|
|
|
// verify
|
|
|
|
return blockDim.x;
|
|
|
|
}
|
|
|
|
|
2019-05-06 14:34:16 +02:00
|
|
|
DECLSPEC u32x rotl32 (const u32x a, const int n)
|
|
|
|
{
|
|
|
|
return ((a << n) | ((a >> (32 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u32x rotr32 (const u32x a, const int n)
|
|
|
|
{
|
|
|
|
return ((a >> n) | ((a << (32 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u32 rotl32_S (const u32 a, const int n)
|
|
|
|
{
|
|
|
|
return ((a << n) | ((a >> (32 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u32 rotr32_S (const u32 a, const int n)
|
|
|
|
{
|
|
|
|
return ((a >> n) | ((a << (32 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u64x rotl64 (const u64x a, const int n)
|
|
|
|
{
|
|
|
|
return ((a << n) | ((a >> (64 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u64x rotr64 (const u64x a, const int n)
|
|
|
|
{
|
|
|
|
return ((a >> n) | ((a << (64 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u64 rotl64_S (const u64 a, const int n)
|
|
|
|
{
|
|
|
|
return ((a << n) | ((a >> (64 - n))));
|
|
|
|
}
|
|
|
|
|
|
|
|
DECLSPEC u64 rotr64_S (const u64 a, const int n)
|
|
|
|
{
|
|
|
|
return ((a >> n) | ((a << (64 - n))));
|
|
|
|
}
|
|
|
|
|
2019-04-26 13:28:44 +02:00
|
|
|
#define SYNC_THREADS() __syncthreads ()
|
2019-04-25 14:45:17 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef IS_OPENCL
|
2019-04-26 13:28:44 +02:00
|
|
|
#define SYNC_THREADS() barrier (CLK_LOCAL_MEM_FENCE)
|
2019-04-25 14:45:17 +02:00
|
|
|
#endif
|