2

我需要使用汇编将立即值 0.5f (= 0.8 in HEX)加载到 NEON 寄存器(或 ARM 寄存器,而不是 VMOV )中。

我已阅读 ARM 文档:http ://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204h/Bcfjicfj.html 链接到:http: //infocenter.arm.com /help/index.jsp?topic=/com.arm.doc.dui0204h/CIHGGEEB.html

他们说你可以加载浮点:

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

因为 0.8 超出范围,我希望我需要加载 HEX 1.8 并减去 1.0,但以下指令不适用于编译器:

VMOV.F32 d10, #0x1.0 \n\t
VMOV.F32 d10, #0x1.8 \n\t

但是使用 0.5 十进制值可以解决问题,即使它应该超出范围:

VMOV.F32 d10, #0.5 \n\t

使用 HEX 值如何进行相同的操作?

还有另一个问题:之前的 VMOV.F32 指令是否应该将值加载到寄存器 d10[0] 和 d10[1] 的 32 位部分中?

4

1 回答 1

2

0.5正好是+16*(2^-5)(n=16, r=5, 注意它不是手册中的 2-r,它是 2 提升到 -r) ,所以它是一个可以移动的值。

换句话说, 0x0.8 也应该可以工作(尽管我无法测试那个非常汇编程序,十六进制浮点语法会有所不同)

手册还说;

imm 是由 datatype 指定的类型的常量。这被复制以填充目标寄存器。

在我读到它的时候,它会填满寄存器的整个(两个部分)。

于 2013-07-23T10:26:38.393 回答