新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 處理器系列之PowerPC指令集

        處理器系列之PowerPC指令集

        作者: 時間:2018-01-12 來源:網絡 收藏

         

        本文引用地址:http://www.104case.com/article/201801/374368.htm

          加載和存儲指令

          所有加載和存儲指令的執行都使用 GPR 或者 GPR 和指令中的立即字段作為存儲器訪問的地址說明符。用指令生成的數據有效地址來更新基址寄存器(也就是 RA)是大部分加載和存儲指令的一個可選項。

          有用于以下方面的指令:

          字節、半字、字和雙字大小。

          在 GPR 或 FPR 與存儲器之間移動數據。

          在 GPR 或 FPR 與存儲器之間移動數據。

          特殊的存儲器訪問指令包括:

          多字加載/存儲

          即 lmw 和 stmw ,可以操作最多 31 個 32 位字。

          字符串指令

          這些指令可以操作最長 128 字節的字符串。

          內存同步指令

          這些用于實現內存同步。CR 的第 2 位(EQ 位) 設置用來記錄存儲操作的成功完成。內存同步指令包括:lwarx / ldarx 執行加載并設置內部的預留位,編程模型不必明確了解這些行為。如果設置了預留位,相應的存儲指令 stwcx. /stdcx. 執行條件存儲,并清除預留位。

          lwarx (加載字并預留變址)

          ldarx (加載雙字并預留變址)

          stwcx (存儲字條件變址)

          stdcx (存儲雙字條件變址)

          棧

           體系結構沒有關于本地存儲器的棧的概念。體系結構沒有定義壓入或者彈出指令,也沒有定義專門的棧指針寄存器。不過,有一個軟件標準可用于 C/C++ 程序,這個標準叫做嵌入式應用程序二進制接口( Embedded Application Binary Interface,EABI),它定義了棧寄存器和內存的約定。EABI 將 GPR1 預留為棧指針,GPR3 到 GPR7 用于函數參數傳遞,GPR3 用于函數返回值。

          需要為 C/C++ 提供接口的匯編語言程序必須遵循同樣的標準來保持約定。

          高速緩存管理指令

           體系結構包含了面向應用級高速緩存訪問的高速緩存管理指令。高速緩存指令在表 9 中列出。

          表 9. 高速緩存管理指令

            

         

          當將高速緩存處理代碼移植到不同的  實現時要當心。雖然高速緩存指令可能是跨不同實現而通用的,高速緩存的組織和大小可能會有變化。例如,假定高速緩存大小以對其進行刷新的代碼,在用于其他大小的高速緩存時可能需要進行修改。而且,各實現的高速緩存初始化可能不同。有一些實現提供了自動清除高速緩存標簽的硬件,而其他實現需要使用軟件循環來使高速緩存標簽無效。

          自修改代碼

          雖然編寫自修改代碼不是一個工業標準,但有些情況下它是必不可少的。下面的序列介紹了執行代碼修改用到的指令:

          存儲修改的指令。

          執行 dcbst 指令,強制包含有修改過的指令的高速緩存行進行存儲。

          執行 sync 指令,確保 dcbst 完成。

          執行 icbi 指令,使將要存放修改后指令的指令高速緩存行無效。

          執行 isync 指令,清除所有指令的指令管道,那些指令在高速緩存行被設為無效之前可能早已被取走了。

          現在可以運行修改后的指令了。當取這個指令時會發生指令高速緩存失敗,結果就會從存儲器中取得修改后的指令。

          計時器

          大部分實現都提供了一個 64 位時基,可以通過兩個 32 位寄存器讀取,或者通過一個 64 位寄存器讀取。各實現的計時器增量不同,SPR 數和訪問時基的指令也不同。所以,跨實現移植計時器代碼時要當心。另外的計時器可能也不同,但大多數實現都提供了至少一種遞減的可編程計時器。

          保持代碼的兼容性

          需要在多個實現上進行編程的 PowerPC 用戶通常會問及保持代碼兼容性的技巧。下面的建議將有助于盡量減少移植問題:

          盡可能使用 C 代碼。

          當今的 C 編譯器在很多情況下可以生成與直接手寫的匯編代碼在性能上相當的代碼。作為 Book I 代碼,C 代碼將保證代碼的兼容性。

          盡可能避免使用相關的匯編指令。

          盡量不要在 C 中嵌入相關的匯編指令,因為它們將更難被發現。分離開那些已知會包含設備相關寄存器或指令的代碼。這些通常是啟動次序和設備驅動程序,不過也可能包括浮點代碼(包括 long long 類型)。保持假定和依賴全部歸檔。

          使用處理器版本寄存器(PVR),但只在適當的時候用。

          跨差別較小的實現的通用代碼還好,PVR 可以用于做出判斷。但是,在需要進行較大修改的情況下(例如,PowerPC AS 相對于 Book E MMU 代碼),建議使用單獨的代碼庫(code base)。

          結束語

          PowerPC AS 和 PowerPC 都支持最初的 PowerPC 體系結構中定義的應用級基礎設施,同時為它們的具體目標市場提供了最佳的優化。

          就其兩種操作模式之一而言,PowerPC AS 實質上與最初的 PowerPC 相同,而 PowerPC Book E 在它的 Book III 級別的定義中,已經走向了不同的方向,為低價格、低功率以及體系結構靈活的嵌入式應用進行了最優化。當然,在 32 位的實現上還不能用雙字整數指令,在大部分嵌入式實現中浮點指令也只是通過軟件仿真提供支持。

          不過,這對應用程序二進制在 PowerPC 體系結構家族樹的分支中自由地遷移來說是一個非常有意義的機會。


        上一頁 1 2 3 4 下一頁

        關鍵詞: 處理器 PowerPC

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沾益县| 蒲城县| 淅川县| 佛山市| 华安县| 章丘市| 札达县| 开鲁县| 上高县| 沅江市| 遂宁市| 慈利县| 晴隆县| 同德县| 东乌| 通州区| 乌海市| 合水县| 德昌县| 宜春市| 苍山县| 远安县| 益阳市| 宁安市| 屯门区| 惠水县| 慈溪市| 东乡族自治县| 鹿泉市| 始兴县| 策勒县| 辽源市| 兴文县| 客服| 曲阜市| 湄潭县| 桃园市| 定州市| 牙克石市| 宿州市| 宁阳县|