VFP简介
VFP 编程模型
VFP 指令集
VFP 寻址模型
矢量浮点(VFP)体系结构是ARM®体系结构的协处理器扩展。
向量运算
VFP 基本 服从 IEEE754
VFP 不完全兼容 754,如果要完全兼容,需要软件库例程的扩充.
VFP不完全兼容 754 的原因
在某些环境中,并非754中的每个操作都是必需的
硬件实现 和 支持代码
硬件无法处理 trapped floating-point exceptions,所以这种情况干脆就产生一个异常.
在异常处理函数中,调用 *支持代码* ,在该支持代码中,将现场传送给 应用程序软件,然后应用程序软件处理这个异常.
编程模型
通用寄存器
VFP有32个通用寄存器,每个寄存器都能保存一个单精度浮点数或一个32位整数。
在该体系结构的D变体中,这些寄存器还可以成对使用,以容纳多达16个双精度浮点数。
系统寄存器
FPSID是只读的。可以读取它来确定正在使用VFP体系结构的哪个实现。
FPSCR提供所有用户级别的状态和控制。状态位保存比较结果和浮点异常的累积标志。提供控制位以选择舍入选项和向量长度/跨距,并启用浮点异常陷阱。
FPEXC包含一些用于系统级状态和控制的位。
- CP10与CP11寄存器 // 相当于 控制寄存器
VFP体系结构的设计完全符合ARM协处理器体系结构。
所有VFP指令都是ARM通用协处理器指令(CDP、LDC、MCR、MRC和STC)的特例,使用协处理器10和11。
通常,协处理器10用于单精度指令,协处理器11用于双精度指令。
VFP被CP10和CP11中的寄存器控制
•将浮点值从内存加载到寄存器中,并将浮点值存储到内存中。
其中一些指令允许传输多个寄存器值,提供与ARM LDM和STM指令等效的浮点值。
除其他用途外,此类指令可用于加载和存储浮点值的短向量。
•直接在VFP和ARM通用寄存器之间传输32位值。
•直接在VFP系统寄存器和ARM通用寄存器之间传输32位值。
•加、减、乘、除,取浮点寄存器值的平方根。
这些指令既可用于短向量,也可用于单个浮点值。
•在寄存器之间复制浮点值。
在此过程中,符号位可以反转或清除(或保持不变),提供否定和绝对值指令以及简单的拷贝。所有这些指令也可用于短向量。
•对浮点值和短向量执行乘法-累加组合操作,为乘法、求反、加法和减法的常见序列提供节省空间的等价物。
•执行单精度值、双精度值、无符号32位整数和两个补符号32位整数之间的转换。
•将寄存器中的浮点值相互比较或与零进行比较。
VFP体系结构支持IEEE754标准中定义的所有五种浮点异常:
• Invalid Operation
• Division by Zero
• Overflow
• Underflow
• Inexact
VFPv2体系结构增加了对 输入非规范浮点异常 的支持,如浮点异常中所述。
配置:
可以通过 在FPSCR中设置适当的控制位来选择 是否 跟踪该异常.
如果跟踪,则硬件一顿操作,并且最后PC被设置为异常向量表中的地址.
如果不跟踪,则硬件一顿其他操作,但是最后没有设置PC.