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.