From: Roland Schulz Date: Tue, 1 Jul 2014 10:35:53 +0000 (-0400) Subject: Remove Random123/features X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=25a1d42ed905e9b2a28fb4e5aa17d20262cbec38;p=alexxy%2Fgromacs.git Remove Random123/features Remove all auto-detection and replace with hard-coded values and gmx_inline. The purpose is that it now should compile on any hardware / compiler. Correctness is guaranteed (as is custom in all of Gromacs) by unit tests (separate commit). Change-Id: I7e75ff38f7288e87817d42582ae844c1d38ef369 --- diff --git a/src/external/Random123-1.08/README b/src/external/Random123-1.08/README new file mode 100644 index 0000000000..da3a0572d6 --- /dev/null +++ b/src/external/Random123-1.08/README @@ -0,0 +1,4 @@ +This folder contains the threefry algorithm from Random123. +threefry.h: is unmodified +array.h: the sections for SSE and cplusplus are removed +compilerfeatures.h: our own file diff --git a/src/external/Random123-1.08/include/Random123/array.h b/src/external/Random123-1.08/include/Random123/array.h index ab85392d8d..e52d198eae 100644 --- a/src/external/Random123-1.08/include/Random123/array.h +++ b/src/external/Random123-1.08/include/Random123/array.h @@ -32,245 +32,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _r123array_dot_h__ #define _r123array_dot_h__ #include "features/compilerfeatures.h" -#include "features/sse.h" -#ifndef __cplusplus #define CXXMETHODS(_N, W, T) #define CXXOVERLOADS(_N, W, T) -#else - -#include -#include -#include -#include -#include -#include - -/** @defgroup arrayNxW The r123arrayNxW classes - - Each of the r123arrayNxW is a fixed size array of N W-bit unsigned integers. - It is functionally equivalent to the C++0x std::array, - but does not require C++0x features or libraries. - - In addition to meeting most of the requirements of a Container, - it also has a member function, incr(), which increments the zero-th - element and carrys overflows into higher indexed elements. Thus, - by using incr(), sequences of up to 2^(N*W) distinct values - can be produced. - - If SSE is supported by the compiler, then the class - r123array1xm128i is also defined, in which the data member is an - array of one r123128i object. - - @cond HIDDEN_FROM_DOXYGEN -*/ - -template -inline R123_CUDA_DEVICE value_type assemble_from_u32(uint32_t *p32){ - value_type v=0; - for(size_t i=0; i<(3+sizeof(value_type))/4; ++i) - v |= ((value_type)(*p32++)) << (32*i); - return v; -} - -// Work-alike methods and typedefs modeled on std::array: -#define CXXMETHODS(_N, W, T) \ - typedef T value_type; \ - typedef T* iterator; \ - typedef const T* const_iterator; \ - typedef value_type& reference; \ - typedef const value_type& const_reference; \ - typedef size_t size_type; \ - typedef ptrdiff_t difference_type; \ - typedef T* pointer; \ - typedef const T* const_pointer; \ - typedef std::reverse_iterator reverse_iterator; \ - typedef std::reverse_iterator const_reverse_iterator; \ - /* Boost.array has static_size. C++11 specializes tuple_size */ \ - enum {static_size = _N}; \ - R123_CUDA_DEVICE reference operator[](size_type i){return v[i];} \ - R123_CUDA_DEVICE const_reference operator[](size_type i) const {return v[i];} \ - R123_CUDA_DEVICE reference at(size_type i){ if(i >= _N) R123_THROW(std::out_of_range("array index out of range")); return (*this)[i]; } \ - R123_CUDA_DEVICE const_reference at(size_type i) const { if(i >= _N) R123_THROW(std::out_of_range("array index out of range")); return (*this)[i]; } \ - R123_CUDA_DEVICE size_type size() const { return _N; } \ - R123_CUDA_DEVICE size_type max_size() const { return _N; } \ - R123_CUDA_DEVICE bool empty() const { return _N==0; }; \ - R123_CUDA_DEVICE iterator begin() { return &v[0]; } \ - R123_CUDA_DEVICE iterator end() { return &v[_N]; } \ - R123_CUDA_DEVICE const_iterator begin() const { return &v[0]; } \ - R123_CUDA_DEVICE const_iterator end() const { return &v[_N]; } \ - R123_CUDA_DEVICE const_iterator cbegin() const { return &v[0]; } \ - R123_CUDA_DEVICE const_iterator cend() const { return &v[_N]; } \ - R123_CUDA_DEVICE reverse_iterator rbegin(){ return reverse_iterator(end()); } \ - R123_CUDA_DEVICE const_reverse_iterator rbegin() const{ return const_reverse_iterator(end()); } \ - R123_CUDA_DEVICE reverse_iterator rend(){ return reverse_iterator(begin()); } \ - R123_CUDA_DEVICE const_reverse_iterator rend() const{ return const_reverse_iterator(begin()); } \ - R123_CUDA_DEVICE const_reverse_iterator crbegin() const{ return const_reverse_iterator(cend()); } \ - R123_CUDA_DEVICE const_reverse_iterator crend() const{ return const_reverse_iterator(cbegin()); } \ - R123_CUDA_DEVICE pointer data(){ return &v[0]; } \ - R123_CUDA_DEVICE const_pointer data() const{ return &v[0]; } \ - R123_CUDA_DEVICE reference front(){ return v[0]; } \ - R123_CUDA_DEVICE const_reference front() const{ return v[0]; } \ - R123_CUDA_DEVICE reference back(){ return v[_N-1]; } \ - R123_CUDA_DEVICE const_reference back() const{ return v[_N-1]; } \ - R123_CUDA_DEVICE bool operator==(const r123array##_N##x##W& rhs) const{ \ - /* CUDA3 does not have std::equal */ \ - for (size_t i = 0; i < _N; ++i) \ - if (v[i] != rhs.v[i]) return false; \ - return true; \ - } \ - R123_CUDA_DEVICE bool operator!=(const r123array##_N##x##W& rhs) const{ return !(*this == rhs); } \ - /* CUDA3 does not have std::fill_n */ \ - R123_CUDA_DEVICE void fill(const value_type& val){ for (size_t i = 0; i < _N; ++i) v[i] = val; } \ - R123_CUDA_DEVICE void swap(r123array##_N##x##W& rhs){ \ - /* CUDA3 does not have std::swap_ranges */ \ - for (size_t i = 0; i < _N; ++i) { \ - T tmp = v[i]; \ - v[i] = rhs.v[i]; \ - rhs.v[i] = tmp; \ - } \ - } \ - R123_CUDA_DEVICE r123array##_N##x##W& incr(R123_ULONG_LONG n=1){ \ - /* This test is tricky because we're trying to avoid spurious \ - complaints about illegal shifts, yet still be compile-time \ - evaulated. */ \ - if(sizeof(T)>((sizeof(T)3?3:0] is to silence \ - a spurious error from icpc \ - */ \ - ++v[_N>1?1:0]; \ - if(_N==2 || R123_BUILTIN_EXPECT(!!v[_N>1?1:0], 1)) return *this; \ - ++v[_N>2?2:0]; \ - if(_N==3 || R123_BUILTIN_EXPECT(!!v[_N>2?2:0], 1)) return *this; \ - ++v[_N>3?3:0]; \ - for(size_t i=4; i<_N; ++i){ \ - if( R123_BUILTIN_EXPECT(!!v[i-1], 1) ) return *this; \ - ++v[i]; \ - } \ - return *this; \ - } \ - /* seed(SeedSeq) would be a constructor if having a constructor */ \ - /* didn't cause headaches with defaults */ \ - template \ - R123_CUDA_DEVICE static r123array##_N##x##W seed(SeedSeq &ss){ \ - r123array##_N##x##W ret; \ - const size_t Ngen = _N*((3+sizeof(value_type))/4); \ - uint32_t u32[Ngen]; \ - uint32_t *p32 = &u32[0]; \ - ss.generate(&u32[0], &u32[Ngen]); \ - for(size_t i=0; i<_N; ++i){ \ - ret.v[i] = assemble_from_u32(p32); \ - p32 += (3+sizeof(value_type))/4; \ - } \ - return ret; \ - } \ -protected: \ - R123_CUDA_DEVICE r123array##_N##x##W& incr_carefully(R123_ULONG_LONG n){ \ - /* n may be greater than the maximum value of a single value_type */ \ - value_type vtn; \ - vtn = n; \ - v[0] += n; \ - const unsigned rshift = 8* ((sizeof(n)>sizeof(value_type))? sizeof(value_type) : 0); \ - for(size_t i=1; i<_N; ++i){ \ - if(rshift){ \ - n >>= rshift; \ - }else{ \ - n=0; \ - } \ - if( v[i-1] < vtn ) \ - ++n; \ - if( n==0 ) break; \ - vtn = n; \ - v[i] += n; \ - } \ - return *this; \ - } \ - - -// There are several tricky considerations for the insertion and extraction -// operators: -// - we would like to be able to print r123array16x8 as a sequence of 16 integers, -// not as 16 bytes. -// - we would like to be able to print r123array1xm128i. -// - we do not want an int conversion operator in r123m128i because it causes -// lots of ambiguity problems with automatic promotions. -// Solution: r123arrayinsertable and r123arrayextractable - -template -struct r123arrayinsertable{ - const T& v; - r123arrayinsertable(const T& t_) : v(t_) {} - friend std::ostream& operator<<(std::ostream& os, const r123arrayinsertable& t){ - return os << t.v; - } -}; - -template<> -struct r123arrayinsertable{ - const uint8_t& v; - r123arrayinsertable(const uint8_t& t_) : v(t_) {} - friend std::ostream& operator<<(std::ostream& os, const r123arrayinsertable& t){ - return os << (int)t.v; - } -}; - -template -struct r123arrayextractable{ - T& v; - r123arrayextractable(T& t_) : v(t_) {} - friend std::istream& operator>>(std::istream& is, r123arrayextractable& t){ - return is >> t.v; - } -}; - -template<> -struct r123arrayextractable{ - uint8_t& v; - r123arrayextractable(uint8_t& t_) : v(t_) {} - friend std::istream& operator>>(std::istream& is, r123arrayextractable& t){ - int i; - is >> i; - t.v = i; - return is; - } -}; - -#define CXXOVERLOADS(_N, W, T) \ - \ -inline std::ostream& operator<<(std::ostream& os, const r123array##_N##x##W& a){ \ - os << r123arrayinsertable(a.v[0]); \ - for(size_t i=1; i<_N; ++i) \ - os << " " << r123arrayinsertable(a.v[i]); \ - return os; \ -} \ - \ -inline std::istream& operator>>(std::istream& is, r123array##_N##x##W& a){ \ - for(size_t i=0; i<_N; ++i){ \ - r123arrayextractable x(a.v[i]); \ - is >> x; \ - } \ - return is; \ -} \ - \ -namespace r123{ \ - typedef r123array##_N##x##W Array##_N##x##W; \ -} - -#endif /* __cplusplus */ /* _r123array_tpl expands to a declaration of struct r123arrayNxW. @@ -308,10 +72,6 @@ _r123array_tpl(4, 64, uint64_t) /* r123array4x64 */ _r123array_tpl(16, 8, uint8_t) /* r123array16x8 for ARSsw, AESsw */ -#if R123_USE_SSE -_r123array_tpl(1, m128i, r123m128i) /* r123array1x128i for ARSni, AESni */ -#endif - /* In C++, it's natural to use sizeof(a::value_type), but in C it's pretty convoluted to figure out the width of the value_type of an r123arrayNxW: diff --git a/src/external/Random123-1.08/include/Random123/features/clangfeatures.h b/src/external/Random123-1.08/include/Random123/features/clangfeatures.h deleted file mode 100644 index 908aee8b0b..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/clangfeatures.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __clangfeatures_dot_hpp -#define __clangfeatures_dot_hpp - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H ((defined(__x86_64__)||defined(__i386__))) -#endif - -#ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS -#define R123_USE_CXX11_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) -#endif - -#ifndef R123_USE_CXX11_STATIC_ASSERT -#define R123_USE_CXX11_STATIC_ASSERT __has_feature(cxx_static_assert) -#endif - -#ifndef R123_USE_CXX11_CONSTEXPR -#define R123_USE_CXX11_CONSTEXPR __has_feature(cxx_constexpr) -#endif - -#ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS -#define R123_USE_CXX11_EXPLICIT_CONVERSIONS __has_feature(cxx_explicit_conversions) -#endif - -// With clang-3.0, the apparently simpler: -// #define R123_USE_CXX11_RANDOM __has_include() -// dumps core. -#ifndef R123_USE_CXX11_RANDOM -#if __cplusplus>=201103L && __has_include() -#define R123_USE_CXX11_RANDOM 1 -#else -#define R123_USE_CXX11_RANDOM 0 -#endif -#endif - -#ifndef R123_USE_CXX11_TYPE_TRAITS -#if __cplusplus>=201103L && __has_include() -#define R123_USE_CXX11_TYPE_TRAITS 1 -#else -#define R123_USE_CXX11_TYPE_TRAITS 0 -#endif -#endif - -#include "gccfeatures.h" - -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h b/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h index 4039790823..3468b659a5 100644 --- a/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h +++ b/src/external/Random123-1.08/include/Random123/features/compilerfeatures.h @@ -1,320 +1,57 @@ /* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/** - -@page porting Preprocessor symbols for porting Random123 to different platforms. - -The Random123 library is portable across C, C++, CUDA, OpenCL environments, -and multiple operating systems (Linux, Windows 7, Mac OS X, FreeBSD, Solaris). -This level of portability requires the abstraction of some features -and idioms that are either not standardized (e.g., asm statments), or for which -different vendors have their own standards (e.g., SSE intrinsics) or for -which vendors simply refuse to conform to well-established standards (e.g., ). - -Random123/features/compilerfeatures.h -conditionally includes a compiler-or-OS-specific Random123/featires/XXXfeatures.h file which -defines appropriate values for the preprocessor symbols which can be used with -a specific compiler or OS. Those symbols will then -be used by other header files and source files in the Random123 -library (and may be used by applications) to control what actually -gets presented to the compiler. - -Most of the symbols are boolean valued. In general, they will -\b always be defined with value either 1 or 0, so do -\b NOT use \#ifdef. Use \#if R123_USE_SOMETHING instead. - -Library users can override any value by defining the pp-symbol with a compiler option, -e.g., - - cc -DR123_USE_MULHILO64_C99 - -will use a strictly c99 version of the full-width 64x64->128-bit multiplication -function, even if it would be disabled by default. - -All boolean-valued pre-processor symbols in Random123/features/compilerfeatures.h start with the prefix R123_USE_ -@verbatim - AES_NI - AES_OPENSSL - SSE4_2 - SSE4_1 - SSE - - STD_RANDOM - - GNU_UINT128 - ASM_GNU - ASM_MSASM - - CPUID_MSVC - - CXX11_RANDOM - CXX11_TYPE_TRAITS - CXX11_STATIC_ASSERT - CXX11_CONSTEXPR - CXX11_UNRESTRICTED_UNIONS - CXX11_EXPLICIT_CONVERSIONS - CXX11_LONG_LONG - CXX11 - - X86INTRIN_H - IA32INTRIN_H - XMMINTRIN_H - EMMINTRIN_H - SMMINTRIN_H - WMMINTRIN_H - INTRIN_H - - MULHILO32_ASM - MULHILO64_ASM - MULHILO64_MSVC_INTRIN - MULHILO64_CUDA_INTRIN - MULHILO64_OPENCL_INTRIN - MULHILO64_C99 - - U01_DOUBLE - -@endverbatim -Most have obvious meanings. Some non-obvious ones: - -AES_NI and AES_OPENSSL are not mutually exclusive. You can have one, -both or neither. - -GNU_UINT128 says that it's safe to use __uint128_t, but it -does not require its use. In particular, it should be -used in mulhilo only if MULHILO64_ASM is unset. - -If the XXXINTRIN_H macros are true, then one should -@code -#include -@endcode -to gain accesss to compiler intrinsics. - -The CXX11_SOME_FEATURE macros allow the code to use specific -features of the C++11 language and library. The catchall -In the absence of a specific CXX11_SOME_FEATURE, the feature -is controlled by the catch-all R123_USE_CXX11 macro. - -U01_DOUBLE defaults on, and can be turned off (set to 0) -if one does not want the utility functions that convert to double -(i.e. u01_*_53()), e.g. on OpenCL without the cl_khr_fp64 extension. - -There are a number of invariants that are always true. Application code may -choose to rely on these: - -
    -
  • ASM_GNU and ASM_MASM are mutually exclusive -
  • The "higher" SSE values imply the lower ones. -
- -There are also non-boolean valued symbols: - -
    -
  • R123_STATIC_INLINE - - According to both C99 and GNU99, the 'static inline' declaration allows - the compiler to not emit code if the function is not used. - Note that the semantics of 'inline', 'static' and 'extern' in - gcc have changed over time and are subject to modification by - command line options, e.g., -std=gnu89, -fgnu-inline. - Nevertheless, it appears that the meaning of 'static inline' - has not changed over time and (with a little luck) the use of 'static inline' - here will be portable between versions of gcc and to other C99 - compilers. - See: http://gcc.gnu.org/onlinedocs/gcc/Inline.html - http://www.greenend.org.uk/rjk/2003/03/inline.html - -
  • R123_FORCE_INLINE(decl) - - which expands to 'decl', adorned with the compiler-specific - embellishments to strongly encourage that the declared function be - inlined. If there is no such compiler-specific magic, it should - expand to decl, unadorned. - -
  • R123_CUDA_DEVICE - which expands to __device__ (or something else with - sufficiently similar semantics) when CUDA is in use, and expands - to nothing in other cases. - -
  • R123_ASSERT(x) - which expands to assert(x), or maybe to nothing at - all if we're in an environment so feature-poor that you can't even - call assert (I'm looking at you, CUDA and OpenCL), or even include - assert.h safely (OpenCL). - -
  • R123_STATIC_ASSERT(expr,msg) - which expands to - static_assert(expr,msg), or to an expression that - will raise a compile-time exception if expr is not true. - -
  • R123_ULONG_LONG - which expands to a declaration of the longest available - unsigned integer. - -
  • R123_64BIT(x) - expands to something equivalent to - UINT64_C(x) from , even in environments where - is not available, e.g., MSVC and OpenCL. - -
  • R123_BUILTIN_EXPECT(expr,likely_value) - expands to something with - the semantics of gcc's __builtin_expect(expr,likely_value). If - the environment has nothing like __builtin_expect, it should expand - to just expr. -
- - -\cond HIDDEN_FROM_DOXYGEN -*/ - -/* -N.B. When something is added to the list of features, it should be -added to each of the *features.h files, AND to examples/ut_features.cpp. -*/ - -/* N.B. most other compilers (icc, nvcc, open64, llvm) will also define __GNUC__, so order matters. */ -#if defined(__OPENCL_VERSION__) && __OPENCL_VERSION__ > 0 -#include "openclfeatures.h" -#elif defined(__CUDACC__) -#include "nvccfeatures.h" -#elif defined(__ICC) -#include "iccfeatures.h" -#elif defined(__xlC__) -#include "xlcfeatures.h" -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -#include "sunprofeatures.h" -#elif defined(__OPEN64__) -#include "open64features.h" -#elif defined(__clang__) -#include "clangfeatures.h" -#elif defined(__GNUC__) -#include "gccfeatures.h" -#elif defined(__PGI) -#include "pgccfeatures.h" -#elif defined(_MSC_FULL_VER) -#include "msvcfeatures.h" -#else -#error "Can't identify compiler. You'll need to add a new xxfeatures.hpp" -{ /* maybe an unbalanced brace will terminate the compilation */ -#endif - -#ifndef R123_USE_CXX11 -#define R123_USE_CXX11 (__cplusplus >= 201103L) -#endif - -#ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS -#define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_STATIC_ASSERT -#define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_CONSTEXPR -#define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS -#define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_RANDOM -#define R123_USE_CXX11_RANDOM R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_TYPE_TRAITS -#define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11 -#endif - -#ifndef R123_USE_CXX11_LONG_LONG -#define R123_USE_CXX11_LONG_LONG R123_USE_CXX11 -#endif - -#ifndef R123_USE_MULHILO64_C99 -#define R123_USE_MULHILO64_C99 0 -#endif - -#ifndef R123_USE_MULHILO64_MULHI_INTRIN -#define R123_USE_MULHILO64_MULHI_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO32_MULHI_INTRIN -#define R123_USE_MULHILO32_MULHI_INTRIN 0 -#endif - -#ifndef R123_STATIC_ASSERT -#if R123_USE_CXX11_STATIC_ASSERT -#define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg) -#else - /* if msg always_looked_like_this, we could paste it into the name. Worth it? */ -#define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1] -#endif -#endif - -#ifndef R123_CONSTEXPR -#if R123_USE_CXX11_CONSTEXPR -#define R123_CONSTEXPR constexpr -#else -#define R123_CONSTEXPR -#endif -#endif - -#ifndef R123_USE_PHILOX_64BIT -#define R123_USE_PHILOX_64BIT (R123_USE_MULHILO64_ASM || R123_USE_MULHILO64_MSVC_INTRIN || R123_USE_MULHILO64_CUDA_INTRIN || R123_USE_GNU_UINT128 || R123_USE_MULHILO64_C99 || R123_USE_MULHILO64_OPENCL_INTRIN || R123_USE_MULHILO64_MULHI_INTRIN) -#endif - -#ifndef R123_ULONG_LONG -#if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG -/* C++98 doesn't have long long. It doesn't have uint64_t either, but - we will have typedef'ed uint64_t to something in the xxxfeatures.h. - With luck, it won't elicit complaints from -pedantic. Cross your - fingers... */ -#define R123_ULONG_LONG uint64_t -#else -#define R123_ULONG_LONG unsigned long long -#endif -#endif - -/* UINT64_C should have been #defined by XXXfeatures.h, either by - #include or through compiler-dependent hacks */ -#ifndef R123_64BIT -#define R123_64BIT(x) UINT64_C(x) -#endif - -#ifndef R123_THROW -#define R123_THROW(x) throw (x) -#endif - -/* - * Windows.h (and perhaps other "well-meaning" code define min and - * max, so there's a high chance that our definition of min, max - * methods or use of std::numeric_limits min and max will cause - * complaints in any program that happened to include Windows.h or - * suchlike first. We use the null macro below in our own header - * files definition or use of min, max to defensively preclude - * this problem. It may not be enough; one might need to #define - * NOMINMAX before including Windows.h or compile with -DNOMINMAX. + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2014, by the GROMACS development team, led by + * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, + * and including many others, as listed in the AUTHORS file in the + * top-level source directory and at http://www.gromacs.org. + * + * GROMACS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * GROMACS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GROMACS; if not, see + * http://www.gnu.org/licenses, or write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * If you want to redistribute modifications to GROMACS, please + * consider that scientific software is very special. Version + * control is crucial - bugs must be traceable. We will be happy to + * consider code for inclusion in the official distribution, but + * derived work must not be called official GROMACS. Details are found + * in the README & COPYING files - if they are missing, get the + * official version at http://www.gromacs.org. + * + * To help us fund GROMACS development, we humbly ask that you cite + * the research papers on the package. Check out http://www.gromacs.org. */ -#define R123_NO_MACRO_SUBST -/** \endcond */ +#include + +#include "gromacs/legacyheaders/types/simple.h" + +/* We only use the C interface of ThreeFry and r123array2x64. This file is a + replacment for the original from the Random123 distribution. It sets all + defines (they all start with R123_), which are used by those parts of + Random123 being used. Instead of determining values based on the Compiler + (Name, Version, ..) we set values based on our assumptions in Gromacs, and + the defines used in Gromacs */ + +/* Random123 isn't used from Cuda thus this can always be empty */ +#define R123_CUDA_DEVICE +/* For "inline" use the Gromacs own gmx_inline */ +#define R123_STATIC_INLINE static gmx_inline +/* force_inline isn't used in Gromacs - if it matters for a compiler it probably + not only matters here and should be defined in simple.h */ +#define R123_FORCE_INLINE(decl) decl +/* We assume in Gromacs that assert is available outside of Cuda */ +#define R123_ASSERT assert +/* Not used (only used by C++ interface of ThreeFry) */ +#define R123_STATIC_ASSERT(expr, msg) diff --git a/src/external/Random123-1.08/include/Random123/features/gccfeatures.h b/src/external/Random123-1.08/include/Random123/features/gccfeatures.h deleted file mode 100644 index d6bb06088d..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/gccfeatures.h +++ /dev/null @@ -1,247 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __gccfeatures_dot_hpp -#define __gccfeatures_dot_hpp - -#define R123_GNUC_VERSION (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) - -#if !defined(__x86_64__) && !defined(__i386__) && !defined(__powerpc__) -# error "This code has only been tested on x86 and powerpc platforms." -#include -{ /* maybe an unbalanced brace will terminate the compilation */ - /* Feel free to try the Random123 library on other architectures by changing - the conditions that reach this error, but you should consider it a - porting exercise and expect to encounter bugs and deficiencies. - Please let the authors know of any successes (or failures). */ -#endif - -#ifdef __powerpc__ -#include -#endif - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static __inline__ -#endif - -#ifndef R123_FORCE_INLINE -#if R123_GNUC_VERSION >= 40000 -#define R123_FORCE_INLINE(decl) decl __attribute__((always_inline)) -#else -#define R123_FORCE_INLINE(decl) decl -#endif -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) __builtin_expect(expr,likely) -#endif - -/* According to the C++0x standard, we should be able to test the numeric - value of __cplusplus == 199701L for C++98, __cplusplus == 201103L for C++0x - But gcc has had an open bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=1773 - since early 2001, which was finally fixed in 4.7 (early 2012). For - earlier versions, the only way to detect whether --std=c++0x was requested - on the command line is to look at the __GCC_EXPERIMENTAL_CXX0X__ pp-symbol. -*/ -#define GNU_CXX11 (__cplusplus>=201103L || (R123_GNUC_VERSION<40700 && defined(__GCC_EXPERIMENTAL_CXX0X__) )) - -#ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS -#define R123_USE_CXX11_UNRESTRICTED_UNIONS ((R123_GNUC_VERSION >= 40600) && GNU_CXX11) -#endif - -#ifndef R123_USE_CXX11_STATIC_ASSERT -#define R123_USE_CXX11_STATIC_ASSERT ((R123_GNUC_VERSION >= 40300) && GNU_CXX11) -#endif - -#ifndef R123_USE_CXX11_CONSTEXPR -#define R123_USE_CXX11_CONSTEXPR ((R123_GNUC_VERSION >= 40600) && GNU_CXX11) -#endif - -#ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS -#define R123_USE_CXX11_EXPLICIT_CONVERSIONS ((R123_GNUC_VERSION >= 40500) && GNU_CXX11) -#endif - -#ifndef R123_USE_CXX11_RANDOM -#define R123_USE_CXX11_RANDOM ((R123_GNUC_VERSION>=40500) && GNU_CXX11) -#endif - -#ifndef R123_USE_CXX11_TYPE_TRAITS -#define R123_USE_CXX11_TYPE_TRAITS ((R123_GNUC_VERSION>=40400) && GNU_CXX11) -#endif - -#ifndef R123_USE_AES_NI -#ifdef __AES__ -#define R123_USE_AES_NI 1 -#else -#define R123_USE_AES_NI 0 -#endif -#endif - -#ifndef R123_USE_SSE4_2 -#ifdef __SSE4_2__ -#define R123_USE_SSE4_2 1 -#else -#define R123_USE_SSE4_2 0 -#endif -#endif - -#ifndef R123_USE_SSE4_1 -#ifdef __SSE4_1__ -#define R123_USE_SSE4_1 1 -#else -#define R123_USE_SSE4_1 0 -#endif -#endif - -#ifndef R123_USE_SSE -/* There's no point in trying to compile SSE code in Random123 - unless SSE2 is available. */ -#ifdef __SSE2__ -#define R123_USE_SSE 1 -#else -#define R123_USE_SSE 0 -#endif -#endif - -#ifndef R123_USE_AES_OPENSSL -/* There isn't really a good way to tell at compile time whether - openssl is available. Without a pre-compilation configure-like - tool, it's less error-prone to guess that it isn't available. Add - -DR123_USE_AES_OPENSSL=1 and any necessary LDFLAGS or LDLIBS to - play with openssl */ -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#ifdef __x86_64__ -#define R123_USE_GNU_UINT128 1 -#else -#define R123_USE_GNU_UINT128 0 -#endif -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU (defined(__x86_64__)||defined(__i386__)) -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 0 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H ((defined(__x86_64__)||defined(__i386__)) && R123_GNUC_VERSION >= 40402) -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 0 -#endif - -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 0 -#endif - -#ifndef R123_USE_EMMINTRIN_H -/* gcc -m64 on Solaris 10 defines __SSE2__ but doesn't have - emmintrin.h in the include search path. This is - so broken that I refuse to try to work around it. If this - affects you, figure out where your emmintrin.h lives and - add an appropriate -I to your CPPFLAGS. Or add -DR123_USE_SSE=0. */ -#define R123_USE_EMMINTRIN_H (R123_USE_SSE && (R123_GNUC_VERSION < 40402)) -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H ((R123_USE_SSE4_1 || R123_USE_SSE4_2) && (R123_GNUC_VERSION < 40402)) -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 0 -#endif - -#ifndef R123_USE_INTRIN_H -#define R123_USE_INTRIN_H 0 -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_MULHI_INTRIN -#define R123_USE_MULHILO64_MULHI_INTRIN (defined(__powerpc64__)) -#endif - -#ifndef R123_MULHILO64_MULHI_INTRIN -#define R123_MULHILO64_MULHI_INTRIN __mulhdu -#endif - -#ifndef R123_USE_MULHILO32_MULHI_INTRIN -#define R123_USE_MULHILO32_MULHI_INTRIN 0 -#endif - -#ifndef R123_MULHILO32_MULHI_INTRIN -#define R123_MULHILO32_MULHI_INTRIN __mulhwu -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -/* If you add something, it must go in all the other XXfeatures.hpp - and in ../ut_features.cpp */ -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/iccfeatures.h b/src/external/Random123-1.08/include/Random123/features/iccfeatures.h deleted file mode 100644 index b64e5c2299..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/iccfeatures.h +++ /dev/null @@ -1,208 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __icpcfeatures_dot_hpp -#define __icpcfeatures_dot_hpp - -// icc relies on gcc libraries and other toolchain components. -#define R123_GNUC_VERSION (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) - -#if !defined(__x86_64__) && !defined(__i386__) -# error "This code has only been tested on x86 platforms." -{ // maybe an unbalanced brace will terminate the compilation -// You are invited to try Easy123 on other architectures, by changing -// the conditions that reach this error, but you should consider it a -// porting exercise and expect to encounter bugs and deficiencies. -// Please let the authors know of any successes (or failures). -#endif - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static inline -#endif - -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) decl __attribute__((always_inline)) -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) __builtin_expect(expr,likely) -#endif - -// The basic idiom is: -// #ifndef R123_SOMETHING -// #if some condition -// #define R123_SOMETHING 1 -// #else -// #define R123_SOMETHING 0 -// #endif -// #endif -// This idiom allows an external user to override any decision -// in this file with a command-line -DR123_SOMETHING=1 or -DR123_SOMETHINE=0 - -// An alternative idiom is: -// #ifndef R123_SOMETHING -// #define R123_SOMETHING (some boolean expression) -// #endif -// where the boolean expression might contain previously-defined R123_SOMETHING_ELSE -// pp-symbols. - -#ifndef R123_USE_SSE4_2 -#ifdef __SSE4_2__ -#define R123_USE_SSE4_2 1 -#else -#define R123_USE_SSE4_2 0 -#endif -#endif - -#ifndef R123_USE_SSE4_1 -#ifdef __SSE4_1__ -#define R123_USE_SSE4_1 1 -#else -#define R123_USE_SSE4_1 0 -#endif -#endif - -#ifndef R123_USE_SSE -#ifdef __SSE2__ -#define R123_USE_SSE 1 -#else -#define R123_USE_SSE 0 -#endif -#endif - -#ifndef R123_USE_AES_NI -// Unlike gcc, icc (version 12) does not pre-define an __AES__ -// pp-symbol when -maes or -xHost is on the command line. This feels -// like a defect in icc (it defines __SSE4_2__ in analogous -// circumstances), but until Intel fixes it, we're better off erring -// on the side of caution and not generating instructions that are -// going to raise SIGILL when executed. To get the AES-NI -// instructions with icc, the caller must puts something like -// -DR123_USE_AES_NI=1 or -D__AES__ on the command line. FWIW, the -// AES-NI Whitepaper by Gueron says that icc has supported AES-NI from -// 11.1 onwards. -// -#define R123_USE_AES_NI ((__ICC>=1101) && defined(__AES__)) -#endif - -#ifndef R123_USE_AES_OPENSSL -/* There isn't really a good way to tell at compile time whether - openssl is available. Without a pre-compilation configure-like - tool, it's less error-prone to guess that it isn't available. Add - -DR123_USE_AES_OPENSSL=1 and any necessary LDFLAGS or LDLIBS to - play with openssl */ -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU 1 -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 0 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H 0 -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 1 -#endif - -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 0 -#endif - -#ifndef R123_USE_EMMINTRIN_H -#define R123_USE_EMMINTRIN_H 1 -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H 1 -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 1 -#endif - -#ifndef R123_USE_INTRIN_H -#define R123_USE_INTRIN_H 0 -#endif - -#ifndef R123_USE_MULHILO16_ASM -#define R123_USE_MULHILO16_ASM 0 -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 1 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -// If you add something, it must go in all the other XXfeatures.hpp -// and in ../ut_features.cpp -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/msvcfeatures.h b/src/external/Random123-1.08/include/Random123/features/msvcfeatures.h deleted file mode 100644 index 9eb9520912..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/msvcfeatures.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __msvcfeatures_dot_hpp -#define __msvcfeatures_dot_hpp - -//#if _MSVC_FULL_VER <= 15 -//#error "We've only tested MSVC_FULL_VER==15." -//#endif - -#if !defined(_M_IX86) && !defined(_M_X64) -# error "This code has only been tested on x86 platforms." -{ // maybe an unbalanced brace will terminate the compilation -// You are invited to try Random123 on other architectures, by changing -// the conditions that reach this error, but you should consider it a -// porting exercise and expect to encounter bugs and deficiencies. -// Please let the authors know of any successes (or failures). -#endif - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static __inline -#endif - -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) _forceinline decl -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) expr -#endif - -// The basic idiom is: -// #ifndef R123_SOMETHING -// #if some condition -// #define R123_SOMETHING 1 -// #else -// #define R123_SOMETHING 0 -// #endif -// #endif -// This idiom allows an external user to override any decision -// in this file with a command-line -DR123_SOMETHING=1 or -DR123_SOMETHINE=0 - -// An alternative idiom is: -// #ifndef R123_SOMETHING -// #define R123_SOMETHING (some boolean expression) -// #endif -// where the boolean expression might contain previously-defined R123_SOMETHING_ELSE -// pp-symbols. - -#ifndef R123_USE_AES_NI -#if defined(_M_X64) -#define R123_USE_AES_NI 1 -#else -#define R123_USE_AES_NI 0 -#endif -#endif - -#ifndef R123_USE_SSE4_2 -#if defined(_M_X64) -#define R123_USE_SSE4_2 1 -#else -#define R123_USE_SSE4_2 0 -#endif -#endif - -#ifndef R123_USE_SSE4_1 -#if defined(_M_X64) -#define R123_USE_SSE4_1 1 -#else -#define R123_USE_SSE4_1 0 -#endif -#endif - -#ifndef R123_USE_SSE -#define R123_USE_SSE 1 -#endif - -#ifndef R123_USE_AES_OPENSSL -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU 0 -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 1 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H 0 -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 0 -#endif - -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 0 -#endif - -#ifndef R123_USE_EMMINTRIN_H -#define R123_USE_EMMINTRIN_H 1 -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H 1 -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 1 -#endif - -#ifndef R123_USE_INTRIN_H -#define R123_USE_INTRIN_H 1 -#endif - -#ifndef R123_USE_MULHILO16_ASM -#define R123_USE_MULHILO16_ASM 0 -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#if defined(_M_X64) -#define R123_USE_MULHILO64_MSVC_INTRIN 1 -#else -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -#pragma warning(disable:4244) -#pragma warning(disable:4996) - -// If you add something, it must go in all the other XXfeatures.hpp -// and in ../ut_features.cpp -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/nvccfeatures.h b/src/external/Random123-1.08/include/Random123/features/nvccfeatures.h deleted file mode 100644 index 711babf88e..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/nvccfeatures.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __r123_nvcc_features_dot_h__ -#define __r123_nvcc_features_dot_h__ - -#if !defined(CUDART_VERSION) -#error "why are we in nvccfeatures.h if CUDART_VERSION is not defined" -#endif - -#if CUDART_VERSION < 4010 -#error "CUDA versions earlier than 4.1 produce incorrect results for some templated functions in namespaces. Random123 isunsupported. See comments in nvccfeatures.h" -// This test was added in Random123-1.08 (August, 2013) because we -// discovered that Ftype(maxTvalue()) with Ftype=double and -// T=uint64_t in examples/uniform.hpp produces -1 for CUDA4.0 and -// earlier. We can't be sure this bug doesn't also affect invocations -// of other templated functions, e.g., essentially all of Random123. -// Thus, we no longer trust CUDA versions earlier than 4.1 even though -// we had previously tested and timed Random123 with CUDA 3.x and 4.0. -// If you feel lucky or desperate, you can change #error to #warning, but -// please take extra care to be sure that you are getting correct -// results. -#endif - -// nvcc falls through to gcc or msvc. So first define -// a couple of things and then include either gccfeatures.h -// or msvcfeatures.h - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE __device__ -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 1 -#endif - -#ifndef R123_ASSERT -#define R123_ASSERT(x) if((x)) ; else asm("trap;") -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) expr -#endif - -#ifndef R123_USE_AES_NI -#define R123_USE_AES_NI 0 -#endif - -#ifndef R123_USE_SSE4_2 -#define R123_USE_SSE4_2 0 -#endif - -#ifndef R123_USE_SSE4_1 -#define R123_USE_SSE4_1 0 -#endif - -#ifndef R123_USE_SSE -#define R123_USE_SSE 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_ULONG_LONG -// uint64_t, which is what we'd get without this, is -// not the same as unsigned long long -#define R123_ULONG_LONG unsigned long long -#endif - -#ifndef R123_THROW -// No exceptions in CUDA, at least upto 4.0 -#define R123_THROW(x) R123_ASSERT(0) -#endif - -#if defined(__GNUC__) -#include "gccfeatures.h" -#elif defined(_MSC_FULL_VER) -#include "msvcfeatures.h" -#endif - -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/open64features.h b/src/external/Random123-1.08/include/Random123/features/open64features.h deleted file mode 100644 index 8da9f5f51e..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/open64features.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __open64features_dot_hpp -#define __open64features_dot_hpp - -/* The gcc features are mostly right. We just override a few and then include gccfeatures.h */ - -/* Open64 4.2.3 and 4.2.4 accept the __uint128_t code without complaint - but produce incorrect code for 64-bit philox. The MULHILO64_ASM - seems to work fine */ -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 1 -#endif - -#include "gccfeatures.h" - -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/openclfeatures.h b/src/external/Random123-1.08/include/Random123/features/openclfeatures.h deleted file mode 100644 index af03d30923..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/openclfeatures.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __openclfeatures_dot_hpp -#define __openclfeatures_dot_hpp - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE inline -#endif - -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) decl __attribute__((always_inline)) -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#define R123_ASSERT(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) expr -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 1 -#endif - -#ifndef R123_USE_AES_NI -#define R123_USE_AES_NI 0 -#endif - -// XXX ATI APP SDK 2.4 clBuildProgram SEGVs if one uses uint64_t instead of -// ulong to mul_hi. And gets lots of complaints from stdint.h -// on some machines. -// But these typedefs mean we cannot include stdint.h with -// these headers? Do we need R123_64T, R123_32T, R123_8T? -typedef ulong uint64_t; -typedef uint uint32_t; -typedef uchar uint8_t; -#define UINT64_C(x) ((ulong)(x##UL)) - -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/pgccfeatures.h b/src/external/Random123-1.08/include/Random123/features/pgccfeatures.h deleted file mode 100644 index 18ace1353b..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/pgccfeatures.h +++ /dev/null @@ -1,194 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright (c) 2013, Los Alamos National Security, LLC -All rights reserved. - -Copyright 2013. Los Alamos National Security, LLC. This software was produced -under U.S. Government contract DE-AC52-06NA25396 for Los Alamos National -Laboratory (LANL), which is operated by Los Alamos National Security, LLC for -the U.S. Department of Energy. The U.S. Government has rights to use, -reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR LOS -ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR -ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified -to produce derivative works, such modified software should be clearly marked, -so as not to confuse it with the version available from LANL. -*/ -#ifndef __pgccfeatures_dot_hpp -#define __pgccfeatures_dot_hpp - -#if !defined(__x86_64__) && !defined(__i386__) -# error "This code has only been tested on x86 platforms." -#include -{ /* maybe an unbalanced brace will terminate the compilation */ - /* Feel free to try the Random123 library on other architectures by changing - the conditions that reach this error, but you should consider it a - porting exercise and expect to encounter bugs and deficiencies. - Please let the authors know of any successes (or failures). */ -#endif - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static inline -#endif - -/* Found this example in PGI's emmintrin.h. */ -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) decl __attribute__((__always_inline__)) -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) (expr) -#endif - -/* PGI through 13.2 doesn't appear to support AES-NI. */ -#ifndef R123_USE_AES_NI -#define R123_USE_AES_NI 0 -#endif - -/* PGI through 13.2 appears to support MMX, SSE, SSE3, SSE3, SSSE3, SSE4a, and - ABM, but not SSE4.1 or SSE4.2. */ -#ifndef R123_USE_SSE4_2 -#define R123_USE_SSE4_2 0 -#endif - -#ifndef R123_USE_SSE4_1 -#define R123_USE_SSE4_1 0 -#endif - -#ifndef R123_USE_SSE -/* There's no point in trying to compile SSE code in Random123 - unless SSE2 is available. */ -#ifdef __SSE2__ -#define R123_USE_SSE 1 -#else -#define R123_USE_SSE 0 -#endif -#endif - -#ifndef R123_USE_AES_OPENSSL -/* There isn't really a good way to tell at compile time whether - openssl is available. Without a pre-compilation configure-like - tool, it's less error-prone to guess that it isn't available. Add - -DR123_USE_AES_OPENSSL=1 and any necessary LDFLAGS or LDLIBS to - play with openssl */ -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU 1 -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 0 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H 0 -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 0 -#endif - -/* emmintrin.h from PGI #includes xmmintrin.h but then complains at link time - about undefined references to _mm_castsi128_ps(__m128i). Why? */ -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 1 -#endif - -#ifndef R123_USE_EMMINTRIN_H -#define R123_USE_EMMINTRIN_H 1 -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H 0 -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 0 -#endif - -#ifndef R123_USE_INTRIN_H -#ifdef __ABM__ -#define R123_USE_INTRIN_H 1 -#else -#define R123_USE_INTRIN_H 0 -#endif -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MULHI_INTRIN -#define R123_USE_MULHILO64_MULHI_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 1 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -/* If you add something, it must go in all the other XXfeatures.hpp - and in ../ut_features.cpp */ -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/sse.h b/src/external/Random123-1.08/include/Random123/features/sse.h deleted file mode 100644 index 88efd65f10..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/sse.h +++ /dev/null @@ -1,280 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef _Random123_sse_dot_h__ -#define _Random123_sse_dot_h__ - -#if R123_USE_SSE - -#if R123_USE_X86INTRIN_H -#include -#endif -#if R123_USE_IA32INTRIN_H -#include -#endif -#if R123_USE_XMMINTRIN_H -#include -#endif -#if R123_USE_EMMINTRIN_H -#include -#endif -#if R123_USE_SMMINTRIN_H -#include -#endif -#if R123_USE_WMMINTRIN_H -#include -#endif -#if R123_USE_INTRIN_H -#include -#endif -#ifdef __cplusplus -#include -#include -#include -#endif - -#if R123_USE_ASM_GNU - -/* bit25 of CX tells us whether AES is enabled. */ -R123_STATIC_INLINE int haveAESNI(){ - unsigned int eax, ebx, ecx, edx; - __asm__ __volatile__ ("cpuid": "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : - "a" (1)); - return (ecx>>25) & 1; -} -#elif R123_USE_CPUID_MSVC -R123_STATIC_INLINE int haveAESNI(){ - int CPUInfo[4]; - __cpuid(CPUInfo, 1); - return (CPUInfo[2]>>25)&1; -} -#else /* R123_USE_CPUID_??? */ -#warning "No R123_USE_CPUID_XXX method chosen. haveAESNI will always return false" -R123_STATIC_INLINE int haveAESNI(){ - return 0; -} -#endif /* R123_USE_ASM_GNU || R123_USE_CPUID_MSVC */ - -// There is a lot of annoying and inexplicable variation in the -// SSE intrinsics available in different compilation environments. -// The details seem to depend on the compiler, the version and -// the target architecture. Rather than insisting on -// R123_USE_feature tests for each of these in each of the -// compilerfeatures.h files we just keep the complexity localized -// to here... -#if (defined(__ICC) && __ICC<1210) || (defined(_MSC_VER) && !defined(_WIN64)) -/* Is there an intrinsic to assemble an __m128i from two 64-bit words? - If not, use the 4x32-bit intrisic instead. N.B. It looks like Intel - added _mm_set_epi64x to icc version 12.1 in Jan 2012. -*/ -R123_STATIC_INLINE __m128i _mm_set_epi64x(uint64_t v1, uint64_t v0){ - union{ - uint64_t u64; - uint32_t u32[2]; - } u1, u0; - u1.u64 = v1; - u0.u64 = v0; - return _mm_set_epi32(u1.u32[1], u1.u32[0], u0.u32[1], u0.u32[0]); -} -#endif -/* _mm_extract_lo64 abstracts the task of extracting the low 64-bit - word from an __m128i. The _mm_cvtsi128_si64 intrinsic does the job - on 64-bit platforms. Unfortunately, both MSVC and Open64 fail - assertions in ut_M128.cpp and ut_carray.cpp when we use the - _mm_cvtsi128_si64 intrinsic. (See - https://bugs.open64.net/show_bug.cgi?id=873 for the Open64 bug). - On 32-bit platforms, there's no MOVQ, so there's no intrinsic. - Finally, even if the intrinsic exists, it may be spelled with or - without the 'x'. -*/ -#if !defined(__x86_64__) || defined(_MSC_VER) || defined(__OPEN64__) -R123_STATIC_INLINE uint64_t _mm_extract_lo64(__m128i si){ - union{ - uint64_t u64[2]; - __m128i m; - }u; - _mm_store_si128(&u.m, si); - return u.u64[0]; -} -#elif defined(__llvm__) || defined(__ICC) -R123_STATIC_INLINE uint64_t _mm_extract_lo64(__m128i si){ - return (uint64_t)_mm_cvtsi128_si64(si); -} -#else /* GNUC, others */ -/* FWIW, gcc's emmintrin.h has had the 'x' spelling - since at least gcc-3.4.4. The no-'x' spelling showed up - around 4.2. */ -R123_STATIC_INLINE uint64_t _mm_extract_lo64(__m128i si){ - return (uint64_t)_mm_cvtsi128_si64x(si); -} -#endif -#if defined(__GNUC__) && __GNUC__ < 4 -/* the cast builtins showed up in gcc4. */ -R123_STATIC_INLINE __m128 _mm_castsi128_ps(__m128i si){ - return (__m128)si; -} -#endif - -#ifdef __cplusplus - -struct r123m128i{ - __m128i m; -#if R123_USE_CXX11_UNRESTRICTED_UNIONS - // C++98 forbids a union member from having *any* constructors. - // C++11 relaxes this, and allows union members to have constructors - // as long as there is a "trivial" default construtor. So in C++11 - // we can provide a r123m128i constructor with an __m128i argument, and still - // have the default (and hence trivial) default constructor. - r123m128i() = default; - r123m128i(__m128i _m): m(_m){} -#endif - r123m128i& operator=(const __m128i& rhs){ m=rhs; return *this;} - r123m128i& operator=(R123_ULONG_LONG n){ m = _mm_set_epi64x(0, n); return *this;} -#if R123_USE_CXX11_EXPLICIT_CONVERSIONS - // With C++0x we can attach explicit to the bool conversion operator - // to disambiguate undesired promotions. For g++, this works - // only in 4.5 and above. - explicit operator bool() const {return _bool();} -#else - // Pre-C++0x, we have to do something else. Google for the "safe bool" - // idiom for other ideas... - operator const void*() const{return _bool()?this:0;} -#endif - operator __m128i() const {return m;} - -private: -#if R123_USE_SSE4_1 - bool _bool() const{ return !_mm_testz_si128(m,m); } -#else - bool _bool() const{ return 0xf != _mm_movemask_ps(_mm_castsi128_ps(_mm_cmpeq_epi32(m, _mm_setzero_si128()))); } -#endif -}; - -R123_STATIC_INLINE r123m128i& operator++(r123m128i& v){ - __m128i& c = v.m; - __m128i zeroone = _mm_set_epi64x(R123_64BIT(0), R123_64BIT(1)); - c = _mm_add_epi64(c, zeroone); - //return c; -#if R123_USE_SSE4_1 - __m128i zerofff = _mm_set_epi64x(0, ~(R123_64BIT(0))); - if( R123_BUILTIN_EXPECT(_mm_testz_si128(c,zerofff), 0) ){ - __m128i onezero = _mm_set_epi64x(R123_64BIT(1), R123_64BIT(0)); - c = _mm_add_epi64(c, onezero); - } -#else - unsigned mask = _mm_movemask_ps( _mm_castsi128_ps(_mm_cmpeq_epi32(c, _mm_setzero_si128()))); - // The low two bits of mask are 11 iff the low 64 bits of - // c are zero. - if( R123_BUILTIN_EXPECT((mask&0x3) == 0x3, 0) ){ - __m128i onezero = _mm_set_epi64x(1,0); - c = _mm_add_epi64(c, onezero); - } -#endif - return v; -} - -R123_STATIC_INLINE r123m128i& operator+=(r123m128i& lhs, R123_ULONG_LONG n){ - __m128i c = lhs.m; - __m128i incr128 = _mm_set_epi64x(0, n); - c = _mm_add_epi64(c, incr128); - // return c; // NO CARRY! - - int64_t lo64 = _mm_extract_lo64(c); - if((uint64_t)lo64 < n) - c = _mm_add_epi64(c, _mm_set_epi64x(1,0)); - lhs.m = c; - return lhs; -} - -// We need this one because it's present, but never used in r123array1xm128i::incr -R123_STATIC_INLINE bool operator<=(R123_ULONG_LONG, const r123m128i &){ - throw std::runtime_error("operator<=(unsigned long long, r123m128i) is unimplemented.");} - -// The comparisons aren't implemented, but if we leave them out, and -// somebody writes, e.g., M1 < M2, the compiler will do an implicit -// conversion through void*. Sigh... -R123_STATIC_INLINE bool operator<(const r123m128i&, const r123m128i&){ - throw std::runtime_error("operator<(r123m128i, r123m128i) is unimplemented.");} -R123_STATIC_INLINE bool operator<=(const r123m128i&, const r123m128i&){ - throw std::runtime_error("operator<=(r123m128i, r123m128i) is unimplemented.");} -R123_STATIC_INLINE bool operator>(const r123m128i&, const r123m128i&){ - throw std::runtime_error("operator>(r123m128i, r123m128i) is unimplemented.");} -R123_STATIC_INLINE bool operator>=(const r123m128i&, const r123m128i&){ - throw std::runtime_error("operator>=(r123m128i, r123m128i) is unimplemented.");} - -R123_STATIC_INLINE bool operator==(const r123m128i &lhs, const r123m128i &rhs){ - return 0xf==_mm_movemask_ps(_mm_castsi128_ps(_mm_cmpeq_epi32(lhs, rhs))); } -R123_STATIC_INLINE bool operator!=(const r123m128i &lhs, const r123m128i &rhs){ - return !(lhs==rhs);} -R123_STATIC_INLINE bool operator==(R123_ULONG_LONG lhs, const r123m128i &rhs){ - r123m128i LHS; LHS.m=_mm_set_epi64x(0, lhs); return LHS == rhs; } -R123_STATIC_INLINE bool operator!=(R123_ULONG_LONG lhs, const r123m128i &rhs){ - return !(lhs==rhs);} -R123_STATIC_INLINE std::ostream& operator<<(std::ostream& os, const r123m128i& m){ - union{ - uint64_t u64[2]; - __m128i m; - }u; - _mm_storeu_si128(&u.m, m.m); - return os << u.u64[0] << " " << u.u64[1]; -} - -R123_STATIC_INLINE std::istream& operator>>(std::istream& is, r123m128i& m){ - uint64_t u64[2]; - is >> u64[0] >> u64[1]; - m.m = _mm_set_epi64x(u64[1], u64[0]); - return is; -} - -template inline T assemble_from_u32(uint32_t *p32); // forward declaration - -template <> -inline r123m128i assemble_from_u32(uint32_t *p32){ - r123m128i ret; - ret.m = _mm_set_epi32(p32[3], p32[2], p32[1], p32[0]); - return ret; -} - -#else - -typedef struct { - __m128i m; -} r123m128i; - -#endif /* __cplusplus */ - -#else /* !R123_USE_SSE */ -R123_STATIC_INLINE int haveAESNI(){ - return 0; -} -#endif /* R123_USE_SSE */ - -#endif /* _Random123_sse_dot_h__ */ diff --git a/src/external/Random123-1.08/include/Random123/features/sunprofeatures.h b/src/external/Random123-1.08/include/Random123/features/sunprofeatures.h deleted file mode 100644 index c9cdc00f5e..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/sunprofeatures.h +++ /dev/null @@ -1,172 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __sunprofeatures_dot_hpp -#define __sunprofeatures_dot_hpp - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static inline -#endif - -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) decl -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) expr -#endif - -// The basic idiom is: -// #ifndef R123_SOMETHING -// #if some condition -// #define R123_SOMETHING 1 -// #else -// #define R123_SOMETHING 0 -// #endif -// #endif -// This idiom allows an external user to override any decision -// in this file with a command-line -DR123_SOMETHING=1 or -DR123_SOMETHINE=0 - -// An alternative idiom is: -// #ifndef R123_SOMETHING -// #define R123_SOMETHING (some boolean expression) -// #endif -// where the boolean expression might contain previously-defined R123_SOMETHING_ELSE -// pp-symbols. - -#ifndef R123_USE_AES_NI -#define R123_USE_AES_NI 0 -#endif - -#ifndef R123_USE_SSE4_2 -#define R123_USE_SSE4_2 0 -#endif - -#ifndef R123_USE_SSE4_1 -#define R123_USE_SSE4_1 0 -#endif - -#ifndef R123_USE_SSE -#define R123_USE_SSE 0 -#endif - -#ifndef R123_USE_AES_OPENSSL -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU 0 -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 0 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H 0 -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 0 -#endif - -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 0 -#endif - -#ifndef R123_USE_EMMINTRIN_H -#define R123_USE_EMMINTRIN_H 0 -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H 0 -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 0 -#endif - -#ifndef R123_USE_INTRIN_H -#define R123_USE_INTRIN_H 0 -#endif - -#ifndef R123_USE_MULHILO16_ASM -#define R123_USE_MULHILO16_ASM 0 -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef R123_USE_PHILOX_64BIT -#define R123_USE_PHILOX_64BIT 0 -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -// If you add something, it must go in all the other XXfeatures.hpp -// and in ../ut_features.cpp -#endif diff --git a/src/external/Random123-1.08/include/Random123/features/xlcfeatures.h b/src/external/Random123-1.08/include/Random123/features/xlcfeatures.h deleted file mode 100644 index a5c8412a44..0000000000 --- a/src/external/Random123-1.08/include/Random123/features/xlcfeatures.h +++ /dev/null @@ -1,202 +0,0 @@ -/* -Copyright 2010-2011, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright (c) 2013, Los Alamos National Security, LLC -All rights reserved. - -Copyright 2013. Los Alamos National Security, LLC. This software was produced -under U.S. Government contract DE-AC52-06NA25396 for Los Alamos National -Laboratory (LANL), which is operated by Los Alamos National Security, LLC for -the U.S. Department of Energy. The U.S. Government has rights to use, -reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR LOS -ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR -ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified -to produce derivative works, such modified software should be clearly marked, -so as not to confuse it with the version available from LANL. -*/ -#ifndef __xlcfeatures_dot_hpp -#define __xlcfeatures_dot_hpp - -#if !defined(__x86_64__) && !defined(__i386__) && !defined(__powerpc__) -# error "This code has only been tested on x86 and PowerPC platforms." -#include -{ /* maybe an unbalanced brace will terminate the compilation */ - /* Feel free to try the Random123 library on other architectures by changing - the conditions that reach this error, but you should consider it a - porting exercise and expect to encounter bugs and deficiencies. - Please let the authors know of any successes (or failures). */ -#endif - -#ifdef __cplusplus -/* builtins are automatically available to xlc. To use them with xlc++, - one must include builtins.h. c.f - http://publib.boulder.ibm.com/infocenter/cellcomp/v101v121/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/compiler_ref/compiler_builtins.html -*/ -#include -#endif - -#ifndef R123_STATIC_INLINE -#define R123_STATIC_INLINE static inline -#endif - -#ifndef R123_FORCE_INLINE -#define R123_FORCE_INLINE(decl) decl __attribute__((__always_inline__)) -#endif - -#ifndef R123_CUDA_DEVICE -#define R123_CUDA_DEVICE -#endif - -#ifndef R123_ASSERT -#include -#define R123_ASSERT(x) assert(x) -#endif - -#ifndef R123_BUILTIN_EXPECT -#define R123_BUILTIN_EXPECT(expr,likely) __builtin_expect(expr,likely) -#endif - -#ifndef R123_USE_AES_NI -#define R123_USE_AES_NI 0 -#endif - -#ifndef R123_USE_SSE4_2 -#define R123_USE_SSE4_2 0 -#endif - -#ifndef R123_USE_SSE4_1 -#define R123_USE_SSE4_1 0 -#endif - -#ifndef R123_USE_SSE -#define R123_USE_SSE 0 -#endif - -#ifndef R123_USE_AES_OPENSSL -/* There isn't really a good way to tell at compile time whether - openssl is available. Without a pre-compilation configure-like - tool, it's less error-prone to guess that it isn't available. Add - -DR123_USE_AES_OPENSSL=1 and any necessary LDFLAGS or LDLIBS to - play with openssl */ -#define R123_USE_AES_OPENSSL 0 -#endif - -#ifndef R123_USE_GNU_UINT128 -#define R123_USE_GNU_UINT128 0 -#endif - -#ifndef R123_USE_ASM_GNU -#define R123_USE_ASM_GNU 1 -#endif - -#ifndef R123_USE_CPUID_MSVC -#define R123_USE_CPUID_MSVC 0 -#endif - -#ifndef R123_USE_X86INTRIN_H -#define R123_USE_X86INTRIN_H 0 -#endif - -#ifndef R123_USE_IA32INTRIN_H -#define R123_USE_IA32INTRIN_H 0 -#endif - -#ifndef R123_USE_XMMINTRIN_H -#define R123_USE_XMMINTRIN_H 0 -#endif - -#ifndef R123_USE_EMMINTRIN_H -#define R123_USE_EMMINTRIN_H 0 -#endif - -#ifndef R123_USE_SMMINTRIN_H -#define R123_USE_SMMINTRIN_H 0 -#endif - -#ifndef R123_USE_WMMINTRIN_H -#define R123_USE_WMMINTRIN_H 0 -#endif - -#ifndef R123_USE_INTRIN_H -#ifdef __ABM__ -#define R123_USE_INTRIN_H 1 -#else -#define R123_USE_INTRIN_H 0 -#endif -#endif - -#ifndef R123_USE_MULHILO32_ASM -#define R123_USE_MULHILO32_ASM 0 -#endif - -#ifndef R123_USE_MULHILO64_MULHI_INTRIN -#define R123_USE_MULHILO64_MULHI_INTRIN (defined(__powerpc64__)) -#endif - -#ifndef R123_MULHILO64_MULHI_INTRIN -#define R123_MULHILO64_MULHI_INTRIN __mulhdu -#endif - -#ifndef R123_USE_MULHILO32_MULHI_INTRIN -#define R123_USE_MULHILO32_MULHI_INTRIN 0 -#endif - -#ifndef R123_MULHILO32_MULHI_INTRIN -#define R123_MULHILO32_MULHI_INTRIN __mulhwu -#endif - -#ifndef R123_USE_MULHILO64_ASM -#define R123_USE_MULHILO64_ASM (defined(__powerpc64__) && !(R123_USE_MULHILO64_MULHI_INTRIN)) -#endif - -#ifndef R123_USE_MULHILO64_MSVC_INTRIN -#define R123_USE_MULHILO64_MSVC_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_CUDA_INTRIN -#define R123_USE_MULHILO64_CUDA_INTRIN 0 -#endif - -#ifndef R123_USE_MULHILO64_OPENCL_INTRIN -#define R123_USE_MULHILO64_OPENCL_INTRIN 0 -#endif - -#ifndef __STDC_CONSTANT_MACROS -#define __STDC_CONSTANT_MACROS -#endif -#include -#ifndef UINT64_C -#error UINT64_C not defined. You must define __STDC_CONSTANT_MACROS before you #include -#endif - -/* If you add something, it must go in all the other XXfeatures.hpp - and in ../ut_features.cpp */ -#endif