Skip to content
Snippets Groups Projects
Commit f40216fd authored by richard's avatar richard
Browse files

merge

parents 5a672bbc d87de157
No related branches found
No related tags found
No related merge requests found
...@@ -39,45 +39,62 @@ ...@@ -39,45 +39,62 @@
#define TIME_FAST_TIMERS 0 #define TIME_FAST_TIMERS 0
#if LL_WINDOWS #if LL_WINDOWS
// because MS has different signatures for these functions in winnt.h #define LL_INLINE __forceinline
// need to rename them to avoid conflicts
#define _interlockedbittestandset _renamed_interlockedbittestandset //
#define _interlockedbittestandreset _renamed_interlockedbittestandreset // NOTE: put back in when we aren't using platform sdk anymore
#include <intrin.h> //
#undef _interlockedbittestandset // because MS has different signatures for these functions in winnt.h
#undef _interlockedbittestandreset // need to rename them to avoid conflicts
//#define _interlockedbittestandset _renamed_interlockedbittestandset
#define LL_INLINE __forceinline //#define _interlockedbittestandreset _renamed_interlockedbittestandreset
// shift off lower 8 bits for lower resolution but longer term timing //#include <intrin.h>
// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing //#undef _interlockedbittestandset
inline U32 get_cpu_clock_count_32() //#undef _interlockedbittestandreset
{
U64 time_stamp = __rdtsc(); //inline U32 get_cpu_clock_count_32()
return (U32)(time_stamp >> 8); //{
} // U64 time_stamp = __rdtsc();
// return (U32)(time_stamp >> 8);
// return full timer value, *not* shifted by 8 bits //}
inline U64 get_cpu_clock_count_64() //
{ //// return full timer value, *not* shifted by 8 bits
return __rdtsc(); //inline U64 get_cpu_clock_count_64()
} //{
#else // return __rdtsc();
#define LL_INLINE //}
#endif // LL_WINDOWS
// shift off lower 8 bits for lower resolution but longer term timing
#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) // on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
inline U32 get_cpu_clock_count_32() inline U32 get_cpu_clock_count_32()
{ {
U64 x; U32 ret_val;
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); __asm
return (U32)x >> 8; {
} _emit 0x0f
_emit 0x31
inline U32 get_cpu_clock_count_64() shr eax,8
{ shl edx,24
U64 x; or eax, edx
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); mov dword ptr [ret_val], eax
return x; }
return ret_val;
}
// return full timer value, *not* shifted by 8 bits
inline U64 get_cpu_clock_count_64()
{
U64 ret_val;
__asm
{
_emit 0x0f
_emit 0x31
mov eax,eax
mov edx,edx
mov dword ptr [ret_val+4], edx
mov dword ptr [ret_val], eax
}
return ret_val;
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment