错误:重新加载 ASM 时在类"AREG"中找不到寄存器



当我使用bc变量执行此代码时,程序将执行,但不会生成输出。存在一些逻辑错误,无法在输出中打印时间。

__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是否受支持吗?

相关内容

  • 没有找到相关文章

最新更新