I have a function that retrieves the high and low order bits of the CPUs cycle-counter (Using GCC asm):
... And I am writing a function that returns a u_int64_t based on the high and low order bits of access_counter():Code:void access_counter(unsigned *hi, unsigned *lo) { asm("rdtsc; movl %%edx,%0; movl %%eax,%1" : "=r" (*hi), "=r" (*lo) : : "%edx", "%eax"); }
... This seems like the correct way of doing this. The only problem is that I cannot think of a way to check if it is correct. So I was hoping someone could look this over and see if this correctly returns the value of the cycle counter as a u_int64_t.Code:u_int64_t get_cycles(void) { unsigned hi, lo; u_int64_t hi_shift; access_counter(&hi, &lo); hi_shift = hi; return (hi_shift << 32) + lo; }
Thanks



LinkBack URL
About LinkBacks




