2016-12-31 9 views
0

可能であればサム32ビット命令を強制的に生成できますか?gccがサム32ビット命令を生成するようにするには?

int main(void) { 
8000280: b480  push {r7} 
8000282: b085  sub sp, #20 
8000284: af00  add r7, sp, #0 
    uint32_t a, b, c; 

    a = 1; 
8000286: 2301  movs r3, #1 
8000288: 60fb  str r3, [r7, #12] 
    b = 1; 
800028a: 2301  movs r3, #1 
800028c: 60bb  str r3, [r7, #8] 
    c = a+b; 
800028e: 68fa  ldr r2, [r7, #12] 
8000290: 68bb  ldr r3, [r7, #8] 
8000292: 4413  add r3, r2 
8000294: 607b  str r3, [r7, #4] 

    while (1) ; 
8000296: e7fe  b.n 8000296 <main+0x16> 

しかし、彼らはすべての親指16ビット以下のとおりです。

は、例えば、私が持っています。テストの理由から私は親指の32ビット命令が欲しいです。

+1

私はThumbの全体が16ビット命令を優先すると考えていましたか?おそらく –

+0

。しかし、可能であればサム32の命令を生成したいと思います。 (Cortex M4) – jsmith

+0

私はここでは専門家ではありませんが、私はARMプロセッサを所有していませんが、[私が見つけるガイダンス](http://stackoverflow.com/questions/10638130/what-is-the-arm -thumb-instruction-set)は、あなたが不可能な仕事を追求していることを私にははっきりと見せてくれます。 32ビット命令を発行するには、標準のARM命令セット用にコンパイルするだけです。それが満足できない場合は、*なぜ*あなたがこれをやろうとしているのかを考えてみてください。誰かがあなたにもっと良い回避策を与えるかもしれません。 –

答えて

1

まあ、私はあなたがそれを直接行うことはできないと思いますが、それを非常に間接的な方法で達成するという非常に奇妙な方法があります。ちょうど数日前、私はコンパイルプロセスが単なるarm-none-eabi-gcc ... -c file.c -o file.oではないプロジェクトを見てきました。プロジェクトではarm-none-eabi-gccを呼び出して拡張アセンブリリストを生成しましたが、これは後で手動でarm-none-eabi-asでオブジェクトファイルにアセンブルされました。そのような場合は、これらの2つのステップの間で、アセンブリリストを変更して幅広い指示のみを行うことができます。ほとんどの場合、sedを使用して.wという接尾辞を指示に追加します(add r3, r2add.w r3, r2に変更し、そう)。このようなレベルのビルドの合併症がそれに値するかどうかは、あなた次第です...

関連する問題