/**
* Get the current number of ticks from the CPU.
+ *
+ * \todo We'll have to deal with removig ticks from the extra cpuids inbetween
+ * 2 calls.
*/
uint64_t UtilCpuGetTicks(void)
{
uint64_t val;
-#if defined(__GNUC__) && (defined(__x86_64) || defined(__i386))
+#if defined(__GNUC__)
+#if defined(__x86_64) || defined(_X86_64_) || defined(ia_64)
+ __asm__ __volatile__ (
+ "xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ ::: "%rax", "%rbx", "%rcx", "%rdx");
+#else
+ __asm__ __volatile__ (
+ "xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ ::: "%eax", "%ebx", "%ecx", "%edx");
+#endif
uint32_t a, d;
__asm__ __volatile__ ("rdtsc" : "=a" (a), "=d" (d));
val = ((uint64_t)a) | (((uint64_t)d) << 32);
+#if defined(__x86_64) || defined(_X86_64_) || defined(ia_64)
+ __asm__ __volatile__ (
+ "xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ ::: "%rax", "%rbx", "%rcx", "%rdx");
#else
+ __asm__ __volatile__ (
+ "xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ ::: "%eax", "%ebx", "%ecx", "%edx");
+#endif
+
+#else /* #if defined(__GNU__) */
#warning Using inferior version of UtilCpuGetTicks
struct timeval now;
gettimeofday(&now, NULL);