-1
我有以下代码在x86/linux中完美运行。我想使用gcc交叉编译器将此代码转换为ALPHA。 它产生的错误类似如下:用于x86的RDTSC的Alpha等价物?
未知的寄存器名“EAX”在“ASM”
我无法找到合适的来源做我自己。
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中。阿尔法ISA寄存器编号从0到31就像here
有人可以将上面的代码转换成ALPHA或可以建议我怎么做,通过提供一些合理的信息链接?
这将是足够好,如果我知道如何以下线将至少为ALPHA在线:
asm volatile ("rdtsc" : "=a" (a), "=d" (d) : : "ebx", "ecx");
谢谢
它不是像更改注册名称一样简单。 'cpuid'和'rdtsc'是x86特定的指令。你将不得不确定什么是适合这些指令的Alpha等价物,甚至可能没有。一个更好的主意是使用便携式系统API来获取这些信息。你真的*需要实时时钟的精度吗?如果你这样做,你的目标操作系统是否真的不提供一种便携的方式来查询它? –
尽管我不会说alpha,但我在gcc [docs](https://gcc.gnu.org/onlinedocs/gcc/Alpha-Built-in-Functions.html)中看到了一个'__builtin_alpha_rpcc'。建立内部结构通常是比内联结构更好的选择。 –
@CodyGray:是的。 ,我需要精确。 – ANTHONY