[英]Load immediate Floating Point in ARM Register
我需要使用汇编程序将立即值0.5f(在HEX中= 0.8)加载到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
使用十六进制值如何执行相同操作?
还有另一个问题:上一条VMOV.F32指令是否希望在寄存器d10 [0]和d10 [1]的两个32位部分中加载值?
0.5
恰好是+16*(2^-5)
(n = 16,r = 5,请注意它不是手册中的2-r,而是2升至-r),所以移动是一个不错的值。
换句话说,0x0.8也应该工作(尽管我无法测试非常汇编程序,但十六进制浮点语法会有所不同)
该手册还说:
imm是由数据类型指定的类型的常量。 复制它以填充目标寄存器。
如我所读,它将填充寄存器的整个(两个部分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.