Index: ps/trunk/binaries/data/mods/public/gui/credits/texts/programming.json =================================================================== --- ps/trunk/binaries/data/mods/public/gui/credits/texts/programming.json +++ ps/trunk/binaries/data/mods/public/gui/credits/texts/programming.json @@ -97,6 +97,7 @@ { "nick": "fabio", "name": "Fabio Pedretti" }, { "nick": "falsevision", "name": "Mahdi Khodadadifard" }, { "nick": "fatherbushido", "name": "Nicolas Tisserand" }, + { "nick": "Fatton", "name": "Alexey Beloyarov" }, { "nick": "fcxSanya", "name": "Alexander Olkhovskiy" }, { "nick": "FeXoR", "name": "Florian Finke" }, { "nick": "Fire Giant", "name": "Malte Schwarzkopf" }, Index: ps/trunk/libraries/source/nvtt/build.sh =================================================================== --- ps/trunk/libraries/source/nvtt/build.sh +++ ps/trunk/libraries/source/nvtt/build.sh @@ -1,6 +1,6 @@ #!/bin/sh set -e -LIB_VERSION="nvtt-2.1.1+wildfiregames.4" +LIB_VERSION="nvtt-2.1.1+wildfiregames.5" JOBS=${JOBS:="-j2"} MAKE=${MAKE:="make"} LDFLAGS=${LDFLAGS:=""} Index: ps/trunk/libraries/source/nvtt/src/extern/poshlib/posh.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/extern/poshlib/posh.h +++ ps/trunk/libraries/source/nvtt/src/extern/poshlib/posh.h @@ -206,6 +206,12 @@ LLVM: - __llvm__ - __clang__ + +MCST LCC (eLbrus Compiler Collection): + - __LCC__ + - __MCST__ + - __e2k__: on MCST E2K (Elbrus 2000) processor platforms + - __sparc__ and __sparc: on MCST R (SPARC v9) processor platforms */ /* @@ -287,6 +293,11 @@ # define POSH_COMPILER_WATCOM 1 #endif +#if defined __LCC__ && defined __MCST__ + /* we don't define the compiler string here, let it be GNU */ +# define POSH_COMPILER_MCST_LCC 1 +#endif + #if !defined POSH_COMPILER_STRING # define POSH_COMPILER_STRING "Unknown compiler" #endif @@ -540,6 +551,11 @@ # define POSH_CPU_STRING "PA-RISC" #endif +#if defined __e2k__ +# define POSH_CPU_E2K 1 +# define POSH_CPU_STRING "MCST E2K" +#endif + #if !defined POSH_CPU_STRING # error POSH cannot determine target CPU # define POSH_CPU_STRING "Unknown" /* this is here for Doxygen's benefit */ @@ -677,7 +693,7 @@ ** the MIPS series, so we have to be careful about those. ** ---------------------------------------------------------------------------- */ -#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_CPU_AARCH64 || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__ || defined __ORDER_LITTLE_ENDIAN__ +#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_CPU_AARCH64 || defined POSH_CPU_E2K || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__ || defined __ORDER_LITTLE_ENDIAN__ # define POSH_ENDIAN_STRING "little" # define POSH_LITTLE_ENDIAN 1 #else @@ -705,7 +721,7 @@ ** for 64-bit support, we ignore the POSH_USE_LIMITS_H directive. ** ---------------------------------------------------------------------------- */ -#if defined ( __LP64__ ) || defined ( __powerpc64__ ) || defined POSH_CPU_SPARC64 +#if defined ( __LP64__ ) || defined ( __powerpc64__ ) || defined POSH_CPU_SPARC64 || defined POSH_CPU_E2K # define POSH_64BIT_INTEGER 1 typedef long posh_i64_t; typedef unsigned long posh_u64_t; @@ -874,7 +890,7 @@ # define POSH_64BIT_POINTER 1 #endif -#if defined POSH_CPU_SPARC64 || defined POSH_OS_WIN64 || defined __64BIT__ || defined __LP64 || defined _LP64 || defined __LP64__ || defined _ADDR64 || defined _CRAYC +#if defined POSH_CPU_SPARC64 || defined POSH_CPU_E2K || defined POSH_OS_WIN64 || defined __64BIT__ || defined __LP64 || defined _LP64 || defined __LP64__ || defined _ADDR64 || defined _CRAYC # define POSH_64BIT_POINTER 1 #endif Index: ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.h +++ ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.h @@ -166,7 +166,7 @@ namespace nv { inline bool isValidPtr(const void * ptr) { - #if NV_CPU_X86_64 || POSH_CPU_PPC64 || NV_CPU_AARCH64 + #if NV_CPU_X86_64 || POSH_CPU_PPC64 || NV_CPU_AARCH64 || NV_CPU_E2K if (ptr == NULL) return true; if (reinterpret_cast(ptr) < 0x10000ULL) return false; if (reinterpret_cast(ptr) >= 0x000007FFFFFEFFFFULL) return false; Index: ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.cpp =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.cpp +++ ps/trunk/libraries/source/nvtt/src/src/nvcore/Debug.cpp @@ -674,6 +674,9 @@ # elif NV_CPU_AARCH64 ucontext_t * ucp = (ucontext_t *)secret; return (void *) ucp->uc_mcontext.pc; +# elif NV_CPU_E2K + ucontext_t * ucp = (ucontext_t *)secret; + return (void *) ucp->uc_mcontext.cr0_hi; # else # error "Unknown CPU" # endif Index: ps/trunk/libraries/source/nvtt/src/src/nvcore/Timer.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvcore/Timer.h +++ ps/trunk/libraries/source/nvtt/src/src/nvcore/Timer.h @@ -26,6 +26,12 @@ __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); return uint64(lo) | (uint64(hi) << 32); } +#elif NV_CPU_E2K + NV_FORCEINLINE uint64 fastCpuClock() { + uint64 val; + asm volatile("rrd %%clkr, %0" : "=r" (val)); + return val; + } #else NV_FORCEINLINE uint64 fastCpuClock() { return 0; } #endif Index: ps/trunk/libraries/source/nvtt/src/src/nvcore/nvcore.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvcore/nvcore.h +++ ps/trunk/libraries/source/nvtt/src/src/nvcore/nvcore.h @@ -97,6 +97,7 @@ // NV_CPU_PPC // NV_CPU_ARM // NV_CPU_AARCH64 +// NV_CPU_E2K #define NV_CPU_STRING POSH_CPU_STRING @@ -111,6 +112,8 @@ # define NV_CPU_ARM 1 #elif defined POSH_CPU_AARCH64 # define NV_CPU_AARCH64 1 +#elif defined POSH_CPU_E2K +# define NV_CPU_E2K 1 #else # error "Unsupported CPU" #endif Index: ps/trunk/libraries/source/nvtt/src/src/nvmath/Half.cpp =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvmath/Half.cpp +++ ps/trunk/libraries/source/nvtt/src/src/nvmath/Half.cpp @@ -489,12 +489,12 @@ } -#if !NV_OS_IOS && (defined(__i386__) || defined(__x86_64__)) +#if !NV_OS_IOS && (defined(__i386__) || defined(__x86_64__) || defined(__e2k__)) #if NV_CC_GNUC #if defined(__i386__) #include -#elif defined(__x86_64__) +#elif defined(__x86_64__) || defined(__e2k__) #include #endif #endif Index: ps/trunk/libraries/source/nvtt/src/src/nvmath/ftoi.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvmath/ftoi.h +++ ps/trunk/libraries/source/nvtt/src/src/nvmath/ftoi.h @@ -53,7 +53,7 @@ return (val<0) ? ftoi_ceil_xs(val) : ftoi_floor_xs(val); } -#if NV_CPU_X86 || NV_CPU_X86_64 +#if NV_CPU_X86 || NV_CPU_X86_64 || NV_CPU_E2K NV_FORCEINLINE int ftoi_round_sse(float f) { return _mm_cvt_ss2si(_mm_set_ss(f)); Index: ps/trunk/libraries/source/nvtt/src/src/nvmath/nvmath.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvmath/nvmath.h +++ ps/trunk/libraries/source/nvtt/src/src/nvmath/nvmath.h @@ -14,7 +14,7 @@ #include // finite, isnan #endif -#if NV_CPU_X86 || NV_CPU_X86_64 +#if NV_CPU_X86 || NV_CPU_X86_64 || NV_CPU_E2K //#include #include #endif @@ -48,6 +48,15 @@ # elif NV_CC_MSVC && defined(_M_IX86_FP) // Also on x86 with the /arch:SSE flag in MSVC. # define NV_USE_SSE _M_IX86_FP // 1=SSE, 2=SS2 +# elif NV_CPU_E2K + // mcst-lcc compiler flags determine e2k CPU features +# if defined(__SSE2__) +# define NV_USE_SSE 2 +# elif defined(__SSE__) +# define NV_USE_SSE 1 +# else +# define NV_USE_SSE 0 +# endif # elif defined(__SSE__) # define NV_USE_SSE 1 # elif defined(__SSE2__) Index: ps/trunk/libraries/source/nvtt/src/src/nvthread/Atomic.h =================================================================== --- ps/trunk/libraries/source/nvtt/src/src/nvthread/Atomic.h +++ ps/trunk/libraries/source/nvtt/src/src/nvthread/Atomic.h @@ -54,7 +54,7 @@ { nvDebugCheck((intptr_t(ptr) & 3) == 0); -#if POSH_CPU_X86 || POSH_CPU_X86_64 +#if POSH_CPU_X86 || POSH_CPU_X86_64 || POSH_CPU_E2K uint32 ret = *ptr; // on x86, loads are Acquire nvCompilerReadBarrier(); return ret; @@ -88,7 +88,7 @@ nvDebugCheck((intptr_t(ptr) & 3) == 0); nvDebugCheck((intptr_t(&value) & 3) == 0); -#if POSH_CPU_X86 || POSH_CPU_X86_64 +#if POSH_CPU_X86 || POSH_CPU_X86_64 || POSH_CPU_E2K nvCompilerWriteBarrier(); *ptr = value; // on x86, stores are Release //nvCompilerWriteBarrier(); // @@ IC: Where does this barrier go? In nvtt it was after, in Witness before. Not sure which one is right.