我有以下在 x86/linux 中完美运行的代码。我想使用 gcc 交叉编译器将此代码转换为 ALPHA。它产生如下错误:
“asm”中的未知寄存器名称“eax”
我自己找不到合适的资源。
inline uint64_t timestamp(void)
{
unsigned long a;
unsigned long d;
asm volatile("xorl %%eax,%%eax\n cpuid \n" ::: "%eax", "%ebx", "%ecx", "%edx"); // flush pipeline
asm volatile("rdtsc\n" : "=a" (a), "=d" (d) ); // read rdtsc
asm volatile("xorl %%eax,%%eax\n cpuid \n" ::: "%eax", "%ebx", "%ecx", "%edx"); // flush pipeline again
return a | ((uint64_t)d << 32);
}
我几乎没有发现 rpcc 是 rdts 的等效指令。我猜 cpuid 和 xorl 是一样的。但是 eax, ebx 是特定于 x86 的寄存器,而不是 ALPHA 中的寄存器。Alpha ISA 寄存器从 0 到 31 编号,就像这里
有人可以通过提供一些包含合理信息的链接将上述代码转换为 ALPHA 或建议我如何做到这一点吗?
如果我知道如何将以下行至少转换为 ALPHA inline,那就足够了:
asm volatile ("rdtsc" : "=a" (a), "=d" (d) : : "ebx", "ecx");
谢谢