如果我理解正确,因为 ARM 指令是 32 位长,它们只能保存这么多位立即数。我想要做的是vmov.f32 s0, #0.0
,我得到“ immediate out of range
”编译器错误。奇怪的是,当我使用一个立即值,比如#0.5
or #0.25
(都非常整齐地以二进制表示)时,我的代码会编译。当我尝试分配 的立即值时#0.1
,我得到“ garbage after following instruction
”错误,如果它试图用更多可以适合 ARM 指令的位来表示这些值,这是有道理的。这个#0.0
案例是我唯一得到“ immediate out of range
”的案例,所以我认为如果没有其他解释,这一定是一个错误。
有谁知道如何将立即值赋给#0.0
单个字浮点寄存器,而不必从其他地方进行转换?如果有充分的理由它不应该首先工作,请让我知道。我正在使用带有 Android NDK 构建工具的 GNU 汇编器。
更新:
vmov.f32 d0, #0.0
确实有效。它的意义越来越小。
更新 2:这也不起作用:vmov.s32 s0, #0