對 PowerPC 體系結構家族樹的所有分支來說,PowerPC 體系結構和應用級編程模型是通用的。
PowerPC 體系結構是一種精減指令集計算機(Reduced Instruction Set Computer,RISC)體系結構,定義了 200 多條指令。PowerPC 之所以是 RISC,原因在于大部分指令在一個單一的周期內執行,而且通常只執行一個單一的操作(比如將內存加載到寄存器,或者將寄存器數據存儲到內存)。
PowerPC 體系結構分為三個級別(或者說是“book”)。通過對體系結構以這種方式進行劃分,為實現可以選擇價格/性能比平衡的復雜性級別留出了空間,同時還保持了實現間的代碼兼容性。
Book I. 用戶指令集體系結構
定義了通用于所有 PowerPC 實現的用戶指令和寄存器的基本集合。這些是非特權指令,為大多數程序所用。
Book II. 虛擬環境體系結構
定義了常規應用軟件要求之外的附加的用戶級功能,比如高速緩存管理、原子操作和用戶級計時器支持。雖然這些操作也是非特權的,但是程序通常還是通過操作系統調用來訪問這些函數。
Book III. 操作環境體系結構
定義了操作系統級需要和使用的操作。其中包括用于內存管理、異常向量處理、特權寄存器訪問、特權計時器訪問的函數。Book III 中詳細說明了對各種系統服務和功能的直接硬件支持。
從最初的 PowerPC 體系結構的開發開始,就根據特定的市場需求而發生分支。當前,PowerPC 體系結構家族樹有兩個活躍的分支,分別是PowerPC AS體系結構和 PowerPC Book E體系結構。PowerPC AS 體系結構是 IBM 為了滿足它的 eServer pSeries UNIX 和 Linux 服務器產品家族及它的 eServer iSeries 企業服務器產品家族的具體需要而定義的(參閱 參考資料中的鏈接以獲得更多資料)。PowerPC Book E 體系結構,也被稱為 Book E,是 IBM 和 Motorola 為滿足嵌入式市場的特定需求而合作推出的。PowerPC AS 所采用的原始 PowerPC 體系結構與 Book E 所采用的擴展之間的主要區別大部分集中于 Book III 區域中。
在這些衍生的體系結構中還有一些適當的應用級擴展,這些擴展大部分與具體應用的場合相關,但是 PowerPC AS 和 PowerPC Book E 共享在 PowerPC 體系結構的 Book I 中定義的基本指令集。雖然三種體系結構主要在操作系統級別上表現出不同,但它們在很大程度上具備應用級的兼容性。
PowerPC 最初定義了同時對 32 位和 64 位實現的支持,可以讓 32 位的應用程序運行于 64 位系統之上。在 IBM pSeries 和 iSeries 服務器上使用的 PowerPC AS 系統現在只提供體系結構的 64 位實現,新的 64 位應用程序和遺留的 32 位的應用程序可以運行于同一個系統之上。PowerPC Book E 體系結構同時有 32 位實現和 64 位實現,64 位實現也完全兼容 32 位 PowerPC 應用程序。這兩種體系結構都具備與 PowerPC Book I 指令和寄存器的完全兼容性,同時提供了對內存管理、異常和中斷、計時器支持和調試支持等各方面的系統級擴展。
POWER 的自然歷史
POWER 和 PowerPC 微處理器有著漫長而傳奇的歷史,最初是 IBM 801,其后是 POWER、RS64 和 PowerPC 芯片系列(這些并不是線性發展的)。每個芯片家族都對計算世界有自己強有力的影響,從游戲控制臺到主機,從數字手表到高端工作站,到處都得到了應用。欲了解全部歷史,請閱讀“ 人類的 POWER:IBM 的芯片制造歷史”。
最初的 PowerPC 體系結構仍是 PowerPC AS 和 PowerPC Book E 的主要組成部分,并仍保持了其完整性,表現出了令人信服的應用級兼容性。
PowerPC 應用程序編程模型
當用到不只一種類型的 PowerPC 處理器時,開發人員應時刻謹記處理器處理內存的方式存在一些差異。
PowerPC 存儲模型
PowerPC 體系結構本身支持字節(8 位)、半字(16 位)、字(32 位) 和雙字(64 位) 數據類型。
PowerPC 實現還可以處理最長 128 字節的多字節字符串操作。32 位 PowerPC 實現支持 4-gigabyte 的有效地址空間,而 64 位 PowerPC 實現支持 16-exabyte 的有效地址空間。所有存儲都可以字節尋址。
對于錯位數據訪問來說,不同的產品家族提供了不同的校準支持,有一些是以處理異常的方式,其他的是通過硬件中的一步或者多步操作來處理訪問。
最高位字節在最前(Big-endian)還是最低位字節在最前(little-endian)?
PowerPC、PowerPC AS 以及早期的 IBM PowerPC 4xx 家族大部分是字節排列順序最高位在最前的機器,這就意味著對半字、字以及雙字訪問來說,最重要的字節(most-significant byte,MSB)位于最低的地址。各實現對最低位在最前的字節排列順序方式的支持不同。PowerPC 和 PowerPC AS 提供了最小限度的支持,而 4xx 家族為最低位字節在最前的存儲提供了更為健壯的支持。Book E 是字節排列順序無關的,因為 Book E 體系結構完全支持這兩種訪問方法。
PowerPC 應用級寄存器
PowerPC 的應用級寄存器分為三類:通用寄存器(general-purpose register,GPR)、浮點寄存器(floating-point register [FPR] 和浮點狀態和控制寄存器 [Floating-Point Status and Control Register,FPSCR])和專用寄存器(special-purpose register,SPR)。讓我們來分別看一下這三類寄存器。
通用寄存器(GPR)
用戶指令集體系結構(Book I)規定,所有實現都有 32 個 GPR(從GPR0 到 GPR31)。GPR 是所有整數操作的源和目的,也是所有加載/存儲操作的地址操作數的源。GPR 還提供對 SPR 的訪問。所有 GRP 都是可用的,只有一種情況例外:在某些指令中,GPR0 只是代表數值 0,而不會去查找 GPR0 的內容。
浮點寄存器(FPR)
Book I 規定,所有實現都有 32 個 FPR(從 FPR0 到 FPR31)。FPR 是所有浮點操作的源和目的操作數,可以存放 32 位和 64 位的有符號和無符號整數,以及單精度和雙精度浮點數。FPR 還提供對 FPSCR 的訪問。
注意,嵌入式微處理器實現時經常不提供對浮點指令集的直接硬件支持,或者只是提供一個附加浮點硬件的接口。很多嵌入式應用程序很少或者根本不需要浮點算法,而當需要的時候,對 PowerPC 浮點指令執行進行軟件仿真就足夠了。在嵌入式微處理器中,硬件中省去浮點(支持)而為實現帶來的芯片面積和功率的減少是至關重要的。
浮點狀態和控制寄存器(FPSCR)捕獲浮點操作的狀態和異常結果,FPSCR 還具有控制位,以支持特定的異常類型和對四種舍入模式之一的選擇。對 FPSCR 的訪問要通過 FPR。
專用寄存器(SPR)
SPR 給出處理器核心內部資源的狀態并對其進行控制。不需要系統服務的支持就可以由應用程序讀寫的 SPR 包括計數寄存器(Count Register)、鏈接寄存器(Link Register)和整型異常寄存器(Integer Exception Register)。需要系統服務的支持才可以由應用程序讀寫的 SPR 包括時基(Time Base)和其他各種可能支持的計時器。
指令地址寄存器(Instruction Address Register,IAR)
這個寄存器就是程序員們所熟知的 程序計數器或者 指令指針。它是當前指令的地址。這實際上是一個偽寄存器,用戶只能通過“branch and link”指令才能直接使用這個寄存器。IAR 主要是由調試器使用,顯示將要被執行的下一條指令。
鏈接寄存器(Link Register,LR)
這個寄存器存放的是函數調用結束處的返回地址。某些轉移指令可以自動加載 LR 到轉移之后的指令。每個轉移指令編碼中都有一個 LK 位。如果 LK 為 1,轉移指令就會將程序計數器移為 LR 中的地址。而且,條件轉移指令 bclr 轉移到 LR 中的值。
定點異常寄存器(Fixed-Point Exception Register,XER)
這個寄存器存放整數運算操作的進位以及溢出信息。它還存放某些整數運算操作的進位輸入以及加載和存儲指令( lswx 和 stswx )中傳輸的字節數。
計數寄存器(Count Register,CTR)
這個寄存器中存放了一個循環計數器,會隨特定轉移操作而遞減。條件轉移指令 bcctr 轉移到 CTR 中的值。
條件寄存器(Condition Register,CR)
這個寄存器分為八個字段,每個字段 4 位。很多 PowerPC 指令將指令的第 31 位編碼為 Rc 位,有一些指令要求 Rc 值等于 1。當 Rc 等于 1 且進行整數操作時,CR 字段 0 被設置來表示指令操作的結果:相等(Equal, EQ),大于(Greater Than, GT),小于(Less Than, LT),以及和溢出(Summary Overflow, SO)。當 Rc 等于 1 且進行浮點操作時,CR 字段 1 被設置用來表示 FPSCR 中異常狀態位的狀態:FX、FEX、VX 和 OX。任何一個 CR 字段都可以是整數或者浮點比較指令的目標。CR 字段 0 還被設置用來表示條件存儲指令( stwcx 或者stdcx ) 的結果。還有一組指令可以操縱特定的 CR 位、特定的 CR 字段或者整個 CR,通常為了測試而將幾個條件組合到同一個位中。
處理器版本寄存器(Processor Version Register,PVR)
PVR 是一個 32 位只讀寄存器,標識處理器的版本和修訂級別。處理器版本由 PowerPC 體系結構過程分配。修訂級別由實現定義。需要有特權才能訪問 PVR,所以應用程序只能在操作系統函數的幫助下才可以確定處理器版本。
PowerPC 應用級指令集
表 1 列出了不同的指令類別以及每類的指令類型。
表 1. 指令類別
評論
查看更多