ARM VFP寄存器与指令集详解
1. VFP寄存器文件
ARM芯片的加载和存储架构在VFP(向量浮点单元)中得以延续,为处理浮点值,VFP专门提供了一组寄存器。这些寄存器共有32个,前缀为S,编号从S0 - S31。它们用于保存单精度值,因为每个寄存器都是一个字宽。对于双精度数的操作,这些寄存器可以成对组合,形成最多16个双字宽的寄存器,用D表示,编号从D0到D15。
需要明确的是,这些寄存器本质上是相同的,尽管寄存器中的值可以是单精度或双精度,但每次只能包含一个值。例如,S0和S1可以单独用于存储两个单精度值,也可以组合成D0用于存储一个双精度值。如果D0加载了一个值,那么S0和S1的内容将被清除。
这些寄存器根据用途分为标量寄存器(S0 - S7 / D0 - D3)和向量寄存器组(S8 - S31 / D4 - D15),不同的分组决定了它们的访问方式。
2. 管理与打印浮点值
下面是一个使用 printf 显示浮点值的简单示例代码:
/* Printing a floating-point number */
.global main
.func main
main:
LDR R1, addr_value1 @ Get addr of value1
VLDR S14, [R1] @ Move value1 into S14
VCVT.F64.F32 D5, S14 @ Convert to B64
LDR R0, =string @ point R0 to string
VMOV R2, R3, D5 @ Load va
超级会员免费看
订阅专栏 解锁全文
1813

被折叠的 条评论
为什么被折叠?



