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 工具可用。