gpt4 book ai didi

android - 将 0.0 分配给 NEON 寄存器时为 "Immediate out of range errors"

转载 作者:行者123 更新时间:2023-11-29 15:30:16 25 4
gpt4 key购买 nike

如果我理解正确的话,因为 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 的立即数分配给单个字浮点寄存器而无需从其他地方转换它?如果有充分的理由一开始它不应该工作,请也让我知道。我将 GNU 汇编程序与 Android NDK 构建工具结合使用。

更新:vmov.f32 d0, #0.0 确实有效。它的意义越来越小。

更新 2:这也不起作用:vmov.s32 s0, #0

最佳答案

0.0 不能表示为 VFP/NEON 浮点立即数。可表示的浮点立即数的大小在 1/8 到 31 之间,而零显然不是。

然而,相应的位模式可表示为整数 NEON 立即数。您的汇编程序很有帮助,并为您生成此编码而不是(不可能的)浮点立即数;当您编写 vmov.f32 d0, #0.0 时,它实际上会发出 vmov.s32 d0, #0,这与您尝试执行的操作具有相同的效果,但实际上是一个合法的指示。

vmov.s32 s0, #0 没有任何意义; NEON 不提供任何对 s 寄存器进行操作的指令。

但是,如果您只想将 NEON 寄存器清零,首选的习惯用法通常是 veor d0, d0。您有没有使用它的原因?

关于android - 将 0.0 分配给 NEON 寄存器时为 "Immediate out of range errors",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7727666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com