POWERPC ELF HWCAPs

本文件描述了 powerpc ELF HWCAP 的用法和語義。

1. 簡介

某些硬體或軟體特性僅在某些 CPU 實現上可用,並且/或者在某些核心配置中可用,但沒有其他發現機制可供使用者空間程式碼使用。 核心透過一組稱為 HWCAP 的標誌將這些特性的存在暴露給使用者空間,這些標誌在輔助向量中公開。

使用者空間軟體可以透過獲取輔助向量的 AT_HWCAP 或 AT_HWCAP2 條目,並測試是否設定了相關標誌來測試特性,例如:

bool floating_point_is_present(void)
{
        unsigned long HWCAPs = getauxval(AT_HWCAP);
        if (HWCAPs & PPC_FEATURE_HAS_FPU)
                return true;

        return false;
}

如果軟體依賴於 HWCAP 描述的特性,則應檢查相關的 HWCAP 標誌,以驗證該特性是否存在,然後再嘗試使用該特性。

HWCAP 是測試特性存在性的首選方法,而不是透過其他方式進行探測,因為其他方式可能不可靠或可能導致不可預測的行為。

面向特定平臺的軟體不一定需要測試必需或隱含的特性。 例如,如果程式需要 FPU、VMX、VSX,則沒有必要測試這些 HWCAP,並且如果編譯器生成需要這些特性的程式碼,則可能無法這樣做。

2. 工具

Power ISA 使用術語“工具”來描述一類指令、暫存器、中斷等。 工具的存在與否表明此類是否可用,但具體細節取決於 ISA 版本。 例如,如果 VSX 工具可用,則 v3.0B 和 v3.1B ISA 版本之間可以使用的 VSX 指令有所不同。

3. 類別

v3.0 之前的 Power ISA 使用術語“類別”來描述某些可能可選或互斥的指令和操作模式類別,HWCAP 標誌的確切含義可能取決於上下文,例如,BOOKE 特性的存在意味著伺服器類別未實現。

4. HWCAP 分配

HWCAP 的分配如 Power Architecture 64-Bit ELF V2 ABI Specification 中所述(這將反映在核心的 uapi 標頭中)。

5. AT_HWCAP 中公開的 HWCAP

PPC_FEATURE_32

32 位 CPU

PPC_FEATURE_64

64 位 CPU(使用者空間可能在 32 位模式下執行)。

PPC_FEATURE_601_INSTR

處理器是 PowerPC 601。 自 f0ed73f3fa2c (“powerpc: Remove PowerPC 601”) 以來核心未使用

PPC_FEATURE_HAS_ALTIVEC

向量(又名 Altivec、VMX)工具可用。

PPC_FEATURE_HAS_FPU

浮點工具可用。

PPC_FEATURE_HAS_MMU

記憶體管理單元存在並且已啟用。

PPC_FEATURE_HAS_4xxMAC

處理器是 40x 或 44x 系列。 自 732b32daef80 (“powerpc: Remove core support for 40x”) 以來核心未使用

PPC_FEATURE_UNIFIED_CACHE

處理器具有統一的 L1 指令和資料快取,如 NXP e200 中所發現的那樣。 自 39c8bf2b3cc1 (“powerpc: Retire e200 core (mpc555x processor)”) 以來核心未使用

PPC_FEATURE_HAS_SPE

訊號處理引擎工具可用。

PPC_FEATURE_HAS_EFP_SINGLE

嵌入式浮點單精度運算可用。

PPC_FEATURE_HAS_EFP_DOUBLE

嵌入式浮點雙精度運算可用。

PPC_FEATURE_NO_TB

時間基址工具(mftb 指令)不可用。 這是一個 601 特定的 HWCAP,因此如果已知執行的處理器不是 601,透過其他 HWCAP 或其他方式,則在使用時間基址之前不需要測試此位。 自 f0ed73f3fa2c (“powerpc: Remove PowerPC 601”) 以來核心未使用

PPC_FEATURE_POWER4

處理器是 POWER4 或 PPC970/FX/MP。 POWER4 支援已從核心中刪除,自 471d7ff8b51b (“powerpc/64s: Remove POWER4 support”)

PPC_FEATURE_POWER5

處理器是 POWER5。

PPC_FEATURE_POWER5_PLUS

處理器是 POWER5+。

PPC_FEATURE_CELL

處理器是 Cell。

PPC_FEATURE_BOOKE

處理器實現了嵌入式類別 (“BookE”) 架構。

PPC_FEATURE_SMT

處理器實現了 SMT。

PPC_FEATURE_ICACHE_SNOOP

處理器 icache 與 dcache 一致,並且指令儲存可以與資料儲存保持一致,以便使用該序列執行指令(如 POWER9 處理器使用者手冊,4.6.2.2 指令快取塊無效 (icbi) 中所述)

sync
icbi (to any address)
isync
PPC_FEATURE_ARCH_2_05

處理器支援 v2.05 使用者級架構。 支援更高架構的處理器不設定此特性。

PPC_FEATURE_PA6T

處理器是 PA6T。

PPC_FEATURE_HAS_DFP

DFP 工具可用。

PPC_FEATURE_POWER6_EXT

處理器是 POWER6。

PPC_FEATURE_ARCH_2_06

處理器支援 v2.06 使用者級架構。 支援更高架構的處理器也設定此特性。

PPC_FEATURE_HAS_VSX

VSX 工具可用。

PPC_FEATURE_PSERIES_PERFMON_COMPAT

處理器支援 0xE0-0xFF 範圍內的架構 PMU 事件。

PPC_FEATURE_TRUE_LE

處理器支援真正的小端模式。

PPC_FEATURE_PPC_LE

處理器支援“PowerPC 小端”,它使用地址篡改來使儲存訪問看起來是小端,但資料以不同的格式儲存,不適合由未在此模式下執行的其他代理訪問。

6. AT_HWCAP2 中公開的 HWCAP

PPC_FEATURE2_ARCH_2_07

處理器支援 v2.07 使用者級架構。 支援更高架構的處理器也設定此特性。

PPC_FEATURE2_HTM

事務記憶體特性可用。

PPC_FEATURE2_DSCR

DSCR 工具可用。

PPC_FEATURE2_EBB

EBB 工具可用。

PPC_FEATURE2_ISEL

isel 指令可用。 這已被 ARCH_2_07 及更高版本取代。

PPC_FEATURE2_TAR

TAR 工具可用。

PPC_FEATURE2_VEC_CRYPTO

v2.07 加密指令可用。

PPC_FEATURE2_HTM_NOSC

如果在事務狀態下呼叫系統呼叫,則系統呼叫將失敗,請參見Power Architecture 64 位 Linux 系統呼叫 ABI

PPC_FEATURE2_ARCH_3_00

處理器支援 v3.0B / v3.0C 使用者級架構。 支援更高架構的處理器也設定此特性。

PPC_FEATURE2_HAS_IEEE128

IEEE 128 位二進位制浮點數支援使用 VSX 四精度指令和資料型別。

PPC_FEATURE2_DARN

darn 指令可用。

PPC_FEATURE2_SCV

scv 0 指令可用於系統呼叫,請參見Power Architecture 64 位 Linux 系統呼叫 ABI

PPC_FEATURE2_HTM_NO_SUSPEND

提供了一種不支援掛起的有限事務記憶體工具,請參見事務記憶體支援

PPC_FEATURE2_ARCH_3_1

處理器支援 v3.1 使用者級架構。 支援更高架構的處理器也設定此特性。

PPC_FEATURE2_MMA

MMA 工具可用。