Commit 681150f6 authored by Yi Luo's avatar Yi Luo Committed by James Zern
Browse files

Add the 64-bit CPU cycle count utility function

Change-Id: Ie87245bbdf5735bc9729199eeb07899d81dbf267
(cherry picked from commit b547a2f3)
parent 1e93a3e6
......@@ -216,6 +216,11 @@ x86_simd_caps(void) {
unsigned __int64 __rdtsc(void);
#pragma intrinsic(__rdtsc)
#endif
// Note:
// 32-bit CPU cycle counter is light-weighted for most function performance
// measurement. For large function (CPU time > a couple of seconds), 64-bit
// counter should be used.
// 32-bit CPU cycle counter
static INLINE unsigned int
x86_readtsc(void) {
#if defined(__GNUC__) && __GNUC__
......@@ -234,7 +239,25 @@ x86_readtsc(void) {
#endif
#endif
}
// 64-bit CPU cycle counter
static INLINE uint64_t
x86_readtsc64(void) {
#if defined(__GNUC__) && __GNUC__
uint32_t hi, lo;
__asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi));
return ((uint64_t)hi << 32) | lo;
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
uint_t hi, lo;
asm volatile("rdtsc\n\t" : "=a"(lo), "=d"(hi));
return ((uint64_t)hi << 32) | lo;
#else
#if ARCH_X86_64
return (uint64_t)__rdtsc();
#else
__asm rdtsc;
#endif
#endif
}
#if defined(__GNUC__) && __GNUC__
#define x86_pause_hint()\
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment