XLCコンパイラ(powerpc用)でインラインアセンブリを使用する場合、ラベルは変換されるため、ジャンプの最終的なラベル名を知ることはできません。例:
int main()
{
__asm__("mylabel:");
__asm__("nop");
__asm__("b mylabel");
}
GCCを使用して前のコードをコンパイルすると、すべてが期待どおりに機能します。ただし、XLCを使用する場合、生成されるアセンブリは次のとおりです。
...
.L1
nop
b mylabel
...
明らかに、「mylabel」が定義されていないため、プログラムはコンパイルに失敗します。「mylabel」の定義は自動的に「.L1」名に変換されます。実際、この名前は、定義されているローカルラベルの数によって異なります。したがって、「。L1」、「。L2」などになります。
__asm__の代わりにasm、__ asmを使用してみましたが、同じ出力が得られます。コンパイラの最適化を無効にしても機能しません。XLCでアセンブリを生成するときにローカルラベル名を保持する方法を知っている人はいますか?他の回避策も役立ちます。
ありがとうございました、