吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AArch64寄存器介紹

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-08-24 09:57 ? 次閱讀

作者簡介

周文嘉,目前就職于某國產 AI GPU 芯片公司,曾服務于 ARM、阿里巴巴、HTC 等公司,擁有 10 年以上工作經驗,主要從事系統軟件開發,涵蓋系統庫開發、指令集優化、Linux內核開發等,為某些開源社貢獻過一定數量的補丁,擔任 Free time team 創始人,致力于免費教育事業。

邵靖杰,目前就職于某國產大型機 ARM CPU 研究所,主要從事眾核處理器的系統級緩存研發工作。

張健,先后在 SUSE、華為、區塊鏈創業公司、寒武紀等公司工作,擔任工程師、架構師、技術合伙人等,研究方向包括 ARM、Linux 發行版、Linux 內核、RISC-V 和虛擬化。

……

目錄

1.2 AArch64 寄存器堆................................2

1.2.1 通用寄存器 ...................................2

1.2.2 特殊寄存器 ...................................2

1.2.3 系統控制寄存器 ...........................2

1.2.4 處理器狀態 ...................................3

1.2.5 函數調用標準 ...............................4

作為 RISC 架構,AArch64 提供了大量的通用寄存器。除通用寄存器之外,本節還會介紹特殊寄存器、系統控制寄存器、處理器狀態、函數調用標準。

1.2.1 通用寄存器

通用寄存器分為兩類。其中一類寄存器包括 X0~X30,用于普通的指令集,每個寄存器都有 64 位(Xn)和 32 位(Wn)兩種表示形式。其中 32 位的表示形式是 64 位表示形式的低 32位。另一類寄存器包括 V0~V31,用于浮點運算、SIMD、crypto 等領域。每個寄存器長度都是128 位(Qn),它們有 64 位(Dn)、32 位(Sn)、16 位(Hn)、8 位(Bn)這 4 種表示形式。以 X0 和 V0 為例,X0 是 64 位寄存器,它的低 32 位是 W0。V0 也稱為 Q0,Q0 是一個128 位的寄存器,它的低 64 位稱為 D0,它的低 32 位稱為 S0,它的低 16 位稱為 H0,它的低8 位稱為 B0,如圖 1.1 所示。

8f6f762a-22c7-11ed-ba43-dac502259ad0.png

1.2.2 特殊寄存器

XZR 和 WZR 分別對應 64 位與 32 位的零寄存器。對這些寄存器進行讀操作,將會獲取到0;對這些寄存器進行的寫操作將會被處理器忽略。與 ARM 的 32 位架構不同,PC 寄存器已經不再是一個通用寄存器,無法直接訪問。ARM 指令的長度是 4 字節,因此對于 ARMv8 上的純 ARM 指令來說,PC 寄存器是按字節對齊的。SP 寄存器也不再是一個通用寄存器,SP寄存器強制按 16 字節對齊。

1.2.3 系統控制寄存器

ARM 的系統控制寄存器都以“_ELx”為后綴,其中“x”表示某異常級別(Exception Level,EL)的一個數字,如 SCTLR_EL1。后綴的數字意味著能夠訪問該寄存器的最低異常級別,ARM的系統控制寄存器如表 1.1 所示。

8f7bcccc-22c7-11ed-ba43-dac502259ad0.png

MRS 和 MSR 指令用于讀寫系統控制寄存器,示例代碼如下。

MRS    X0, SCTLR_EL1     // X0 = SCTLR_EL1 MSR    SCTLR_EL1, X0     // SCTLR_EL1 = X0

常用的系統控制寄存器及其功能如表 1.2 所示。

8f9724ae-22c7-11ed-ba43-dac502259ad0.png

ARM 的系統控制寄存器數量龐大,詳細的介紹可以參考文檔 DDI0487F_b_ARMv8_arm.pdf。

1.2.4 處理器狀態

AArch64 通過 PSTATE(process state)的標志位來保存處理器的狀態,處理器執行指令的時候,可以讀取和設置這些標志位。這些標志位既可以通過 mrs/msr 指令進行訪問,也可以通過 DAIFSet、DAIFClr、SPSel、PAN、UAO 等指令直接訪問。PSTATE 寄存器的標志位如表 1.3 所示。

8fc3e278-22c7-11ed-ba43-dac502259ad0.png

1.2.5 函數調用標準

1.AArch64 基本指令集函數調用規則

AArch64 提供了 31 個 64 位的通用寄存器 X0~X30,SP 寄存器已經變成了一個專用寄存器。這些寄存器的描述如表 1.4 所示。

8fd4741c-22c7-11ed-ba43-dac502259ad0.png

8ff35d32-22c7-11ed-ba43-dac502259ad0.png

值得注意的是,X16 和 X17 寄存器在動態鏈接的時候,可能會被某些鏈接器用于實現特殊功能。X18 寄存器在 Darwin 和 Windows 平臺上會保留作為平臺寄存器使用。在代碼優化的時候,這 3 個寄存器要謹慎使用。

2.AArch64 NEON

指令集函數調用規則 AArch64 提供了 32 個 128 位的寄存器(V0~31),可以用來進行 SIMD 和浮點運算。其中,V0~V7 這 8 個寄存器用來傳遞參數和函數返回值,V8~V15 這 8 個寄存器需要由被調函數保存(只需要保存這些寄存器的低 64 位即可)。D8~D15 是 V8~V15 寄存器的低 64 位,因此通過如下的代碼片段保存 D8~D15 的內容,就可以在函數中使用 V0~V31 這 32 個寄存器了。

stp        d8, d9, [sp, -192]! 
stp        d10, d11, [sp, 16] stp        d12, d13, [sp, 32] stpd14,d15,[sp,48]

3.AArch64 SVE

指令集函數調用規則 如果平臺支持 SVE 擴展,那么 AArch64 會提供 32 個可變長的向量寄存器 Z0~Z31。每個寄存器都可以用來進行 SIMD 和浮點運算,其中 Z0~Z7 用來傳遞參數和函數返回值。Z8~Z15 這 8 個寄存器需要由被調函數保存(只需要保存這些寄存器的低 64 位即可)。AArch64 還為 SVE 提供了 16 個斷言寄存器 P0~P15,其中 P0~P3 這 4 個寄存器用來傳遞參數和函數返回值。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19407

    瀏覽量

    231180
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121157
  • aarch64
    +關注

    關注

    0

    文章

    7

    瀏覽量

    5068
  • 函數調用
    +關注

    關注

    0

    文章

    19

    瀏覽量

    2607

原文標題:1.2.5 函數調用標準 ...............................4

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    簡要分析AArch64的虛擬化

    的指令集:T32和A32。標準寄存器寬度為32位。AArch6464位執行狀態。有一個可用的指令集:A64。標準寄存器寬度為
    發表于 03-30 10:36

    在ARMv8中aarch64aarch32是怎樣進行切換的

    、boot-a64.Sfastmodel最開始執行程序,是在EL3,在EL3,設置scr_el3寄存器,設置EL2運行模式是non-secure,aarch32。設置elr_el3,以及spsr_el3
    發表于 04-01 15:09

    一文讀懂ARM AArch64 state的寄存器

    AArch64 state的寄存器寄存器分為一般寄存器和特殊寄存器,另外一些寄存器在特權執行模式
    發表于 05-09 09:37

    Hyp調試控制寄存器配置

    是:一個 Banked EL2 寄存器。在架構上映射到 AArch64 MDCR_EL2 寄存器。屬性請參閱 表 4-85 c1 寄存器摘要中的
    發表于 06-08 18:04

    如何在x86環境下基于Qemu和Docker快速搭建AARCH64開發環境

    概述近年來 Arm 服務的發展勢頭很猛,但大部分人的個人電腦還是 x86 環境,開發上存在不便。從 docker-hub 可以下載到一個名字叫 dev4arm64/aarch64
    發表于 07-11 15:18

    簡單研究一下Armv8-A的AArch64寄存器

    寄存器必須是系統寄存器。對于系統寄存器的訪問,也是通過MSR和MRS指令。本次介紹寄存器只是AArch
    發表于 09-20 14:54

    AArch64異常模型指南

    AArch64異常模型指南介紹了Armv8-A中的異常和特權模型Armv9-A。它涵蓋了Arm體系結構中不同類型的異常,以及處理與異常的關系。 這些內容面向底層代碼的開發人員,例如引導代碼或內核
    發表于 08-02 06:03

    AArch64自托管調試指南

    集成在Arm核心中的調試邏輯提供了觀察和控制CPU和系統環境,同時在深度嵌入式處理上執行軟件。手臂調試體系結構規范允許將調試邏輯合并到Arm體系結構中。 本指南介紹了調試,并介紹AArch
    發表于 08-02 10:05

    ARM通用中斷控制體系結構規范GIC體系結構版本3和版本4

    系統寄存器名稱,而不是同時列出AArch32和AArch64體系寄存器名稱。AArch64寄存器
    發表于 08-11 07:45

    AArch64平臺上性能下降的例子

    編者按:目前許多公司同時使用 x86 和 AArch64 2 種主流的服務。這兩種環境的算力相當,內存相同的情況下:相同版本的 JVM 和 Java 應用,相同的 JVM 參數,應用性
    的頭像 發表于 09-09 11:11 ?2506次閱讀

    kvm_arm64資料下載

    支持AArch64AArch32執行狀態 ■ 32-64位互通受限于異常邊界 ■ AArch64始終具有比AArch32更高的
    發表于 06-02 11:06 ?1次下載

    如何使用預裝程序創建并分發AArch64容器

    本文我們將探討如何使用預裝程序創建并分發 AArch64 容器。
    的頭像 發表于 09-30 10:57 ?1281次閱讀

    剖析Armv8-A的AArch64寄存器

    根據指令使用數據的方式, 指令系統可分為堆棧型、累加型和寄存器型。寄存器型又可以進一步分為寄存器-寄存器型和
    的頭像 發表于 01-30 16:45 ?2148次閱讀

    最新的Linux aarch64 LSA驅動程序

    電子發燒友網站提供《最新的Linux aarch64 LSA驅動程序.zip》資料免費下載
    發表于 08-23 15:46 ?2次下載
    最新的Linux <b class='flag-5'>aarch64</b> LSA驅動程序

    第四章:在 PC 交叉編譯 aarch64 的 tensorflow 開發環境并測試

    本文介紹了在 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發表于 08-25 11:38 ?1363次閱讀
    第四章:在 PC 交叉編譯 <b class='flag-5'>aarch64</b> 的 tensorflow 開發環境并測試
    太阳城百家乐| 百家乐官网玄机| 百家乐斗牛稳赚| 环球国际娱乐城| 大发888娱乐城 34hytrgwsdfpv| 百家乐作弊内幕| 现金百家乐官网信誉| 贡觉县| e乐博官网| 棋牌娱乐网,| 大发888大法8668| 百家乐五式缆投法| 布加迪百家乐官网的玩法技巧和规则 | 鸿博娱乐场| 大发888古怪猴子| 德州扑克平台| bet365忠实奖金| 凯斯百家乐的玩法技巧和规则| 什么事百家乐的路单| 天天百家乐官网的玩法技巧和规则| 百家乐官网路单破解器| 大发888大发娱乐城| 老虎机小游戏| 网上百家乐解码器| 百家乐庄和闲的赌法| 百家乐官网路单怎样| 娱乐城百家乐官网送白菜| 澳门百家乐官网技巧经| 立博百家乐官网游戏| 百家乐官网赢钱海立方| 温州百家乐官网真人网| 百家乐官网博彩金| 平顺县| 百家乐官网是如何骗人的| 通河县| 姚记娱乐城官网| 百家乐官网模拟投注器| 网页百家乐官网游戏| 济宁市| 百家乐官网等投注网改单| 百家乐官网送彩金平台|