NEON 和 VFP 共享的指令包括以下内容:
1.VLDR 和 VSTR
扩展寄存器加载和存储。
2.VLDM、VSTM、VPOP 和 VPUSH
扩展寄存器加载多个和存储多个。
3.VMOV(在两个 ARM 寄存器和一个扩展寄存器之间)
在两个 ARM 寄存器和一个 64 位扩展寄存器之间传送内容。
4.VMOV(在一个 ARM 寄存器和一个 NEON 标量之间)
在一个 ARM 寄存器和半个 64 位扩展寄存器之间传送内容。
5.VMOV(在一个 ARM 寄存器和一个单精度 VFP 之间)
在一个 32 位扩展寄存器和一个 ARM 寄存器之间传送内容。
6.VMRS 和 VMSR
在一个 ARM 寄存器与一个 NEON 和 VFP 系统寄存器之间传送内容。
在没有特殊注明的情况下,本系列学习小节中,都是采用Android平台运行NEON与VFP指令的。NDK编程中,采用内联汇编的方式。
一、VLDR 和 VSTR
扩展寄存器加载和存储。
语法
VLDR{cond}{.size} Fd, [Rn{, #offset}]
VSTR{cond}{.size} Fd, [Rn{, #offset}]
VLDR{cond}{.size} Fd, label
VSTR{cond}{.size} Fd, label
其中:
cond 是一个可选的条件代码。
size 是一个可选的数据大小说明符。 如果 Fd 是单精度 VFP 寄存器,则必须为 32;否则必须为 64。
Fd 是要加载或保存的扩展寄存器。 对于 NEON 指令,它必须为 Dd。 对于 VFP 指令,它可以为 Dd 或 Sd。
Rn 是存放要传送的基址的 ARM 寄存器。
offset 是一个可选的数值表达式。 在汇编时,该表