2

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でアセンブリを生成するときにローカルラベル名を保持する方法を知っている人はいますか?他の回避策も役立ちます。

ありがとうございました、

4

1 に答える 1

1

これは言うBranching to a label in another asm statement is not supported.

__asm__すべてのインラインアセンブリコードを次のような単一のステートメントに入れてみてください。

    __asm__("mylabel:\n"
            "nop\n"
            "b mylabel");
于 2012-04-05T06:50:35.477 に答える