diff options
| author | richard <none@none> | 2010-01-15 18:46:20 -0800 | 
|---|---|---|
| committer | richard <none@none> | 2010-01-15 18:46:20 -0800 | 
| commit | f40216fde726e5fac45201bebc4ecd12ff406b38 (patch) | |
| tree | 1d9654e6527a3063ae7e5ccb5118fefc4d6980b0 | |
| parent | 5a672bbcb9032caf8b6788fef1c03f63d3646957 (diff) | |
| parent | d87de15776d937aa2f2b9a5f4db88e16c9c09dbb (diff) | |
merge
| -rw-r--r-- | indra/llcommon/llfasttimer.h | 95 | 
1 files changed, 56 insertions, 39 deletions
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index 85c78198dc..db80e9a624 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -39,45 +39,62 @@  #define TIME_FAST_TIMERS 0  #if LL_WINDOWS -// because MS has different signatures for these functions in winnt.h -// need to rename them to avoid conflicts -#define _interlockedbittestandset _renamed_interlockedbittestandset -#define _interlockedbittestandreset _renamed_interlockedbittestandreset -#include <intrin.h> -#undef _interlockedbittestandset -#undef _interlockedbittestandreset - -#define LL_INLINE __forceinline -// shift off lower 8 bits for lower resolution but longer term timing -// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing -inline U32 get_cpu_clock_count_32() -{ -	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 __rdtsc(); -} -#else -#define LL_INLINE -#endif // LL_WINDOWS - -#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) -inline U32 get_cpu_clock_count_32() -{																	 -	U64 x;															 -	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));					 -	return (U32)x >> 8;													 -} - -inline U32 get_cpu_clock_count_64() -{																	 -	U64 x; -	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); -	return x; +#define LL_INLINE __forceinline
 +
 +//
 +// NOTE: put back in when we aren't using platform sdk anymore
 +//
 +// because MS has different signatures for these functions in winnt.h
 +// need to rename them to avoid conflicts
 +//#define _interlockedbittestandset _renamed_interlockedbittestandset
 +//#define _interlockedbittestandreset _renamed_interlockedbittestandreset
 +//#include <intrin.h>
 +//#undef _interlockedbittestandset
 +//#undef _interlockedbittestandreset
 +
 +//inline U32 get_cpu_clock_count_32()
 +//{
 +//	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 __rdtsc();
 +//}
 +
 +// shift off lower 8 bits for lower resolution but longer term timing
 +// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
 +inline U32 get_cpu_clock_count_32()
 +{
 +	U32 ret_val;
 +	__asm 
 +	{
 +        _emit   0x0f
 +        _emit   0x31
 +		shr eax,8
 +		shl edx,24
 +		or eax, edx
 +		mov dword ptr [ret_val], eax
 +	}
 +    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  | 
