当我使用b
和c
变量执行此代码时,程序将执行但不生成任何输出。有一些逻辑错误,不会在输出中打印时间。
__inline__ uint64_t timestamp(void)
{
unsigned long a, b;
asm volatile ("cpuid; rdtscp" : "=a" (a), "=b" (b) : : "%rax", "%rdx");
return a | ((uint64_t) b << 32);
}
当我使用b
和c
变量执行此代码时,程序将执行但不生成任何输出。有一些逻辑错误,不会在输出中打印时间。
__inline__ uint64_t timestamp(void)
{
unsigned long a, b;
asm volatile ("cpuid; rdtscp" : "=a" (a), "=b" (b) : : "%rax", "%rdx");
return a | ((uint64_t) b << 32);
}
怎么样:
unsigned int a;
/* 'volatile' prevents gcc from discarding 'unused' function. */
asm volatile ("cpuid" : "=a" (a) : "a" (0): "rbx", "rcx", "rdx");
/* Use intrinsics when possible. Ignore 'a', it's garbage. */
return __builtin_ia32_rdtscp(&a);
虽然我不太清楚为什么你需要 cpuid 这里。rdtscp 不是已经在等待所有先前的指令完成了吗?您的意思是使用 cpuid 来检查是否支持 rdtscp 吗?