私が正しく理解していれば、ARM命令は32ビット長であるため、即時値の非常に多くのビットしか保持できません。私がやろうとしているのは、ですvmov.f32 s0, #0.0
、そして私は" immediate out of range
"コンパイラエラーを受け取ります。#0.5
奇妙なことに、たとえば、または(すべて非常にきれいにバイナリで表されている)の即値を使用すると#0.25
、コードがコンパイルされます。のイミディエート値を割り当てようとすると#0.1
、 " garbage after following instruction
"エラーが発生します。これは、ARM命令に収まるより多くのビットでそれらの値を表現しようとしている場合に意味があります。「」が出るの#0.0
はケースだけimmediate out of range
なので、他に説明がなければバグだと思います。
#0.0
他の場所から変換せずに、のイミディエート値を1ワード浮動小数点レジスタに割り当てる方法を知っている人はいますか?そもそもうまくいかないという正当な理由がある場合は、私にも知らせてください。AndroidNDKビルドツールでGNUアセンブラを使用しています。
更新:
vmov.f32 d0, #0.0
動作します。それはますます意味をなさなくなり続けます。
アップデート2:これも機能しません:vmov.s32 s0, #0