2017-07-04 5 views
2

Matt GodboltのCompiler Explorerウェブサイトでは、さまざまなプリインストールされたコンパイラを使用してコードをコンパイルできます。 PowerPC gcc 4.8を使用する場合、レジスタは即時と区別できません(たとえば、addi 11,31,16)。%GCCのPowerPC GCCレジスタの印刷

ただし、-mregnamesオプションを使用すると、すべてのレジスタに%rとそれに続くレジスタインデックスが付けられます。 %r1の代わりにr1を取得するには、%記号を省略するにはどうすればよいですか?

例えば

void nop() {} with gcc4.8 PowerPC -O0 -mregnames

nop(): 
    stwu %r1,-16(%r1) 
    stw %r31,12(%r1) 
    mr %r31,%r1 
    addi %r11,%r31,16 
    lwz %r31,-4(%r11) 
    mr %r1,%r11 
    blr 
+2

'%'を省略すると、レジスタはシンボルと混同されることがあります。なぜそれをしたいのですか?マニュアルには、これを行う方法がないようです。 – Jester

+0

@Jester: 私はそれらを使わないでアセンブリを読むことに慣れています – BullyWiiPlaza

+0

あなた自身の個人的な読書のためのものであれば、 '%r [0-9] +'の検索と置き換えだけでうまくいくでしょう。 – Jester

答えて

4

のPowerPCをターゲットにするとき、あなたは基本的にアセンブリリストの構文については、2つのオプションがあります。あなたは(IBMアセンブラに共通)IBMの構文を使用することができますいずれか

をここで、レジスタは特殊な接頭辞の型を使用しません。これらは単に数字で表されます。はい、これを即時性と区別することは困難です。

または、Gnu/AT & T構文を使用することができます。この場合、レジスタには常に%シンボル(この場合はr)が付加されます。これにより、レジスタとイミディエイトを区別しやすくするだけでなく、整数レジスタ(%r?)と浮動小数点レジスタ(%f?)を区別することもできます。

r(またはf)のプレフィックスがあり、先頭には%が含まれない中間オプションはありません。これが必要な場合は、正規表現%r[0-9]+をマッチングに使用して、Jesterが出力を提案して後処理するようにすることができます。

1

更新:
のpowerpc-linuxの-、GNU gccのバージョン5.4.0(Ubuntuの16.04とデフォルト・パッケージ)

-mregnamesを使用している場合、あなたは "%のR0" または "R0" または「を使用することができますアセンブリソースコードファイルのレジスタ名には "0"形式を使用します。 (私は読みやすいです同意) "R0" 形式に、PowerPCの-のlinux-gnuの-objdumpのデフォルトを分解するために

このWebページの例では、objdumpを使用する代わりに、コンパイラからの出力結果を表示しているようです。私は、リストの出力形式を制御する方法を知らない。