33#ifndef __r123_uniform_dot_hpp
34#define __r123_uniform_dot_hpp
90#if R123_USE_CXX11_TYPE_TRAITS
93#if __cplusplus >= 201103L
103#if R123_USE_CXX11_TYPE_TRAITS
104using std::make_signed;
105using std::make_unsigned;
112#define R123_MK_SIGNED_UNSIGNED(ST, UT) \
113template<> struct make_signed<ST>{ typedef ST type; }; \
114template<> struct make_signed<UT>{ typedef ST type; }; \
115template<> struct make_unsigned<ST>{ typedef UT type; }; \
116template<> struct make_unsigned<UT>{ typedef UT type; }
122#if R123_USE_GNU_UINT128
125#undef R123_MK_SIGNED_UNSIGNED
128#if defined(__CUDACC__) || defined(_LIBCPP_HAS_NO_CONSTEXPR)
142 typedef typename make_unsigned<T>::type
uT;
143 return (~
uT(0)) >> std::numeric_limits<T>::is_signed;
148 return std::numeric_limits<T>::max();
174template <
typename Ftype,
typename Itype>
176 typedef typename make_unsigned<Itype>::type
Utype;
179#if R123_UNIFORM_FLOAT_STORE
205template <
typename Ftype,
typename Itype>
207 typedef typename make_signed<Itype>::type
Stype;
210#if R123_UNIFORM_FLOAT_STORE
238template <
typename Ftype,
typename Itype>
240 typedef typename make_unsigned<Itype>::type
Utype;
241 R123_CONSTEXPR int excess = std::numeric_limits<Utype>::digits - std::numeric_limits<Ftype>::digits;
250#if R123_USE_CXX11_STD_ARRAY
258template <
typename Ftype,
typename CollType>
262 std::array<Ftype, CollType::static_size>
ret;
263 auto p =
ret.begin();
276template <
typename Ftype,
typename CollType>
280 std::array<Ftype, CollType::static_size>
ret;
281 auto p =
ret.begin();
294template <
typename Ftype,
typename CollType>
298 std::array<Ftype, CollType::static_size>
ret;
299 auto p =
ret.begin();