Add the 64-bit CPU cycle count utility function
Change-Id: Ie87245bbdf5735bc9729199eeb07899d81dbf267
This commit is contained in:
parent
b816eea5ef
commit
b547a2f38c
@ -216,6 +216,11 @@ x86_simd_caps(void) {
|
|||||||
unsigned __int64 __rdtsc(void);
|
unsigned __int64 __rdtsc(void);
|
||||||
#pragma intrinsic(__rdtsc)
|
#pragma intrinsic(__rdtsc)
|
||||||
#endif
|
#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
|
static INLINE unsigned int
|
||||||
x86_readtsc(void) {
|
x86_readtsc(void) {
|
||||||
#if defined(__GNUC__) && __GNUC__
|
#if defined(__GNUC__) && __GNUC__
|
||||||
@ -234,7 +239,25 @@ x86_readtsc(void) {
|
|||||||
#endif
|
#endif
|
||||||
#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__
|
#if defined(__GNUC__) && __GNUC__
|
||||||
#define x86_pause_hint()\
|
#define x86_pause_hint()\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user