2#include "ff/precision.h"
12#pragma acc routine seq
14inline void atomic_add(T value, T* buffer,
size_t offset = 0)
16 #pragma acc atomic update
17 buffer[offset] += value;
22#pragma acc routine seq
24 class =
typename std::enable_if<std::is_same<T, float>::value ||
25 std::is_same<T, double>::value>::type>
29 #pragma acc atomic update
30 buffer[offset] +=
static_cast<fixed>(
static_cast<long long>(value *
35#pragma acc routine seq
37inline void atomic_add(T vxx, T vyx, T vzx, T vyy, T vzy, T vzz, T (*buffer)[8],
50#pragma acc routine seq
52 class =
typename std::enable_if<std::is_same<T, float>::value ||
53 std::is_same<T, double>::value>::type>
54inline void atomic_add(T vxx, T vyx, T vzx, T vyy, T vzy, T vzz,
55 fixed (*buffer)[8],
size_t offset = 0)
66#pragma acc routine seq
67template <
class G,
class T>
70 static_assert(std::is_same<T, float>::value ||
71 std::is_same<T, double>::value,
73 if CONSTEXPR (std::is_same<G, fixed>::value)
74 return static_cast<G>(
static_cast<long long>(val * 0x100000000ull));
76 return static_cast<G>(val);
80#pragma acc routine seq
84 return static_cast<T
>(
static_cast<long long>(val)) / 0x100000000ull;
88#pragma acc routine seq
96#pragma acc routine seq
104#pragma acc routine seq
112template <
class T,
class U>
115 return std::is_same<T, U>::value;
G floatTo(T val)
Converts val of floating-point to type G.
Definition: acc/adddef.h:68
T toFloatGrad(fixed g)
Converts a fixed-point value g to floating-point value.
Definition: acc/adddef.h:90
T fixedTo(fixed val)
Converts val of fixed-point to floating-point.
Definition: acc/adddef.h:82
void atomic_add(T value, T *buffer, size_t offset=0)
Definition: acc/adddef.h:14
constexpr bool eq()
Used as eq<T1,T2>() for two type identifiers.
Definition: acc/adddef.h:113
#define CONSTEXPR
Definition: macro.h:61
unsigned long long fixed
Definition: precision.h:68