为什么VMOV.F64不允许我加载零?

eng*_*gie 3 assembly arm

以下ARM asm:

vmov.f64 d16, #0
Run Code Online (Sandbox Code Playgroud)

失败,出现以下错误:

/tmp/ccZD4Iex.s:121: Error: immediate out of range -- `vmov.f64 d16,#0'
Run Code Online (Sandbox Code Playgroud)

使用arm-none-linux-gnueabi-g ++编译(Sourcery CodeBench Lite 2012.03-57)4.6.3

如何将d16寄存器 - 双清零,以便将其用于双精度VFP指令?

Igo*_*sky 5

VMOV只能接受一组有限的浮点时间,而且,令人惊讶的是,0不是其中之一:

任何数字都可以表示为+/- n*2 -r,其中n和r是整数,16 <= n <= 31,0 <= r <= 7.

您可以执行BitBank建议的操作,或使用整数移动,这也将使寄存器清零.

vmov.i64 d16, #0
Run Code Online (Sandbox Code Playgroud)