我需要使用汇编在NEON寄存器(或ARM寄存器,而不是VMOV)中加载立即值0.5f(= HEX中的0.8)。
我读过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位部分中加载该值?
答案 0 :(得分:2)
0.5
正是+16*(2^-5)
(n = 16,r = 5,请注意手册中不是2-r,它是2提升到-r),所以移动的值是可以的。
换句话说,0x0.8也应该工作(虽然我不能测试那个非常汇编,但是hex float语法不同)
手册也说;
imm是由datatype指定的类型的常量。复制它以填充目标寄存器。
当我读到它时,会填满寄存器的整个(两部分)。