以下の内容はhttps://tnishinaga.hatenablog.com/entry/2015/03/27/000500より取得しました。


ARMアセンブラの16bit即値代入でコンパイルエラーが出た件

以下の様な16bit即値をレジスタr0に代入するコードをコンパイルしたところ,エラーとなったので,解決策をメモする.

ターゲットはRaspberry Pi 2.コンパイラgcc 4.7.2

mov r0, #0xffff

ARMの公式ドキュメントを読んでみると

ARMv6T2 以上のアーキテクチャでは、MOV は 0x0-0xFFFF (0 ~ 65535)範囲内にある任意の 16 ビットの数値をロードできます。

と書かれているので,armv7-aなRaspberry Pi 2では問題ないはずだが……

数分後...

エラーログで調べてみると,stackoverflowに同じ問題で悩んでいる人が居た.

stackoverflow.com

読んでみると,コンパイラアーキテクチャを教えない場合,armv5としてコンパイルが行われるので,movの範囲が0x00~0xffに制限されてしまうようだ.

ということは,コンパイルオプションに以下を追加してarmv7-aであると知らせるだけで治る...とおもったら,うまくいかなかった.

-march=armv7-a

最終的にmov命令をmovw命令に変更したところ,コンパイルが通った.

movw #0xffff



以上の内容はhttps://tnishinaga.hatenablog.com/entry/2015/03/27/000500より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14