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 は ALPHA ではなく x86 固有のレジスタです。Alpha ISA レジスタには、ここのように 0 から 31 までの番号が付けられます。
上記のコードを ALPHA に変換してもらえますか、または適切な情報を含むリンクをいくつか提供して、その方法を提案してもらえますか?
少なくとも次の行を ALPHA インラインに変換する方法を知っていれば十分です。
asm volatile ("rdtsc" : "=a" (a), "=d" (d) : : "ebx", "ecx");
ありがとうございました