diff --git a/neo/idlib/math/Simd.cpp b/neo/idlib/math/Simd.cpp index 127458a..fd0871d 100644 --- a/neo/idlib/math/Simd.cpp +++ b/neo/idlib/math/Simd.cpp @@ -183,6 +183,16 @@ double ticksPerNanosecond; #define StopRecordTime( end ) \ end = mach_absolute_time(); +#elif defined( __e2k__ ) + +#define TIME_TYPE uint64_t + +#define StartRecordTime( start ) \ + asm volatile("rrd %%clkr, %0" : "=r"(start)); + +#define StopRecordTime( end ) \ + asm volatile("rrd %%clkr, %0" : "=r"(end)); + #else // not _MSC_VER and _M_IX86 or __APPLE__ // FIXME: meaningful values/functions here for Linux? #define TIME_TYPE int diff --git a/neo/sys/posix/posix_main.cpp b/neo/sys/posix/posix_main.cpp index a243b0d..271e659 100644 --- a/neo/sys/posix/posix_main.cpp +++ b/neo/sys/posix/posix_main.cpp @@ -261,6 +261,10 @@ double Sys_GetClockTicks() "pop %%ebx\n" : "=r"( lo ), "=r"( hi ) ); return ( double ) lo + ( double ) 0xFFFFFFFF * hi; +#elif defined( __e2k__ ) + uint64_t c64; + asm volatile("rrd %%clkr, %0" : "=r"(c64)); + return (double) c64; // RB begin #elif defined( __x86_64__ ) uint32_t lo, hi; diff --git a/neo/sys/sdl/sdl_cpu.cpp b/neo/sys/sdl/sdl_cpu.cpp index a64bb57..2a93c5b 100644 --- a/neo/sys/sdl/sdl_cpu.cpp +++ b/neo/sys/sdl/sdl_cpu.cpp @@ -88,6 +88,10 @@ double Sys_GetClockTicks() "pop %%ebx\n" : "=r"( lo ), "=r"( hi ) ); return ( double ) lo + ( double ) 0xFFFFFFFF * hi; +#elif defined( __e2k__ ) + uint64_t c64; + asm volatile("rrd %%clkr, %0" : "=r"(c64)); + return (double)c64; #else #error unsupported CPU #endif diff --git a/neo/sys/win32/win_cpu.cpp b/neo/sys/win32/win_cpu.cpp index e38a3ad..d890534 100644 --- a/neo/sys/win32/win_cpu.cpp +++ b/neo/sys/win32/win_cpu.cpp @@ -87,6 +87,10 @@ double Sys_GetClockTicks() "pop %%ebx\n" : "=r"( lo ), "=r"( hi ) ); return ( double ) lo + ( double ) 0xFFFFFFFF * hi; +#elif defined( __e2k__ ) + uint64_t c64; + asm volatile("rrd %%clkr, %0" : "=r"(c64)); + return (double)c64; #else #error unsupported CPU #endif