ARM64 Feature
GCC 14/15/16 对 ARM64 (AArch64) 架构特性的支持
参考链接
架构级别支持
| 架构级别 |
GCC 版本 |
说明 |
generic |
GCC 14+ |
通用的优化目标 |
generic-armv8-a |
GCC 14+ |
Armv8-A 系列通用优化 |
generic-armv9-a |
GCC 14+ |
Armv9-A 系列通用优化 |
armv9.5-a |
GCC 15+ |
新增架构级别 |
armv9.6-a |
GCC 16+ |
新增架构级别 |
CPU 支持对比
GCC 14 新增 CPU
| CPU |
GCC 标识符 |
说明 |
| Ampere-1B |
ampere1b |
Ampere 处理器 |
| Arm Cortex-A520 |
cortex-a520 |
Arm Cortex 系列 |
| Arm Cortex-A720 |
cortex-a720 |
Arm Cortex 系列 |
| Arm Cortex-X4 |
cortex-x4 |
Arm Cortex 系列 |
| Microsoft Cobalt-100 |
cobalt-100 |
Microsoft 处理器 |
GCC 15 新增 CPU
| CPU |
GCC 标识符 |
说明 |
| Apple A12 |
apple-a12 |
Apple 处理器 |
| Apple M1 |
apple-m1 |
Apple Silicon M1 |
| Apple M2 |
apple-m2 |
Apple Silicon M2 |
| Apple M3 |
apple-m3 |
Apple Silicon M3 |
| Arm Cortex-A520AE |
cortex-a520ae |
Auto Enhanced 版本 |
| Arm Cortex-A720AE |
cortex-a720ae |
Auto Enhanced 版本 |
| Arm Cortex-A725 |
cortex-a725 |
Arm Cortex 系列 |
| Arm Cortex-X925 |
cortex-x925 |
Arm Cortex 系列 |
| Arm Cortex-R82AE |
cortex-r82ae |
Real-time 处理器 |
| Arm Neoverse N3 |
neoverse-n3 |
服务器处理器 |
| Arm Neoverse V3 |
neoverse-v3 |
服务器处理器 |
| Arm Neoverse V3AE |
neoverse-v3ae |
Auto Enhanced 版本 |
| FUJITSU-MONAKA |
fujitsu-monaka |
Fujitsu 处理器 |
| NVIDIA Grace |
grace |
NVIDIA Grace CPU |
| NVIDIA Olympus |
olympus |
NVIDIA 处理器 |
| Qualcomm Oryon-1 |
oryon-1 |
Qualcomm 处理器 |
GCC 16 新增 CPU
| CPU |
GCC 标识符 |
说明 |
| Ampere1c |
ampere1c |
Ampere 处理器 |
| Apple M4 |
apple-m4 |
Apple Silicon M4 |
| Apple M5 |
apple-m5 |
Apple Silicon M5 |
| Arm AGI CPU |
armagicpu |
Arm AI GPU CPU |
| Arm C1 Nano |
c1-nano |
Arm C1 系列 Nano |
| Arm C1 Pro |
c1-pro |
Arm C1 系列 Pro |
| Arm C1 Premium |
c1-premium |
Arm C1 系列 Premium |
| Arm C1 Ultra |
c1-ultra |
Arm C1 系列 Ultra |
| Arm Cortex-A320 |
cortex-a320 |
Arm Cortex 系列 |
| Hisilicon hip12 |
hip12 |
海思处理器 |
| NVIDIA GB10 |
gb10 |
NVIDIA 处理器 |
特性支持对比
GCC 14 新增特性
| 特性 |
-march 修饰符 |
说明 |
| SME |
+sme |
Streaming Matrix Extensions |
| SME2 |
+sme2 |
SME 第二版 |
| LSE2 |
+lse2 |
大系统扩展 2 (128-bit atomic) |
| RCPC3 |
+rcpc3 |
Release Consistent Processor Consistency |
GCC 15 新增特性
| 特性 |
-march 修饰符 |
默认启用 |
说明 |
| CPA |
+cpa |
Armv9.5-A+ |
Conditional Pointer Authentication |
| FAMINMAX |
+faminmax |
Armv9.5-A+ |
Floating-point Min/Max |
| FP8 |
+fp8 |
- |
8-bit Floating Point |
| FP8DOT2 |
+fp8dot2 |
- |
FP8 2-way Dot Product |
| FP8DOT4 |
+fp8dot4 |
- |
FP8 4-way Dot Product |
| FP8FMA |
+fp8fma |
- |
FP8 Fused Multiply-Add |
| LUT |
+lut |
Armv9.5-A+ |
Lookup Table |
| SME_B16B16 |
+sme-b16b16 |
- |
SME BFloat16 |
| SME_F16F16 |
+sme-f16f16 |
- |
SME Half Precision |
| SME2p1 |
+sme2p1 |
- |
SME2.1 |
| SVE_B16B16 |
+sve-b16b16 |
- |
SVE BFloat16 |
| SVE2p1 |
+sve2p1 |
Armv9.4-A+ |
SVE2.1 |
| WFXT |
+wfxt |
Armv8.7-A+ |
Wait For Independent Time |
| XS |
+xs |
Armv8.7-A+ |
XS Instructions |
| FCMA |
+fcma |
Armv8.3-A+ |
Floating-point Complex Math |
| FRINTTS |
+frintts |
Armv8.5-A+ |
Floating-point Round Instructions |
| JSCVT |
+jscvt |
Armv8.3-A+ |
JavaScript Convert |
| LRCPC2 |
+rcpc2 |
Armv8.4-A+ |
RCPC 第二版 |
| FLAGM2 |
+flagm2 |
Armv8.5-A+ |
Flag Manipulation 2 |
| SSVE_FP8DOT2 |
+ssve-fp8dot2 |
- |
Streaming SVE FP8 Dot2 |
| SSVE_FP8DOT4 |
+ssve-fp8dot4 |
- |
Streaming SVE FP8 Dot4 |
| SSVE_FP8FMA |
+ssve-fp8fma |
- |
Streaming SVE FP8 FMA |
| GCS |
-mbranch-protection=gcs |
- |
Guarded Control Stack |
GCC 16 新增特性
| 特性 |
-march 修饰符 |
默认启用 |
说明 |
| CMPBR |
+cmpbr |
Armv9.6-A+ |
Compare and Branch |
| F16F32DOT |
+f16f32dot |
- |
Half to Single Dot Product |
| F16F32MM |
+f16f32mm |
- |
Half to Single Matrix Multiply |
| F16MM |
+f16mm |
- |
Half Precision Matrix Multiply |
| F8F16MM |
+f8f16mm |
- |
FP8 to Half Matrix Multiply |
| F8F32MM |
+f8f32mm |
- |
FP8 to Single Matrix Multiply |
| FPRCVT |
+fprcvt |
- |
FP Register Convert |
| GCIE |
+gcie |
- |
Guarded Control Stack IE |
| LSCP |
+lscp |
- |
Load/Store Conditional Pair |
| LSFE |
+lsfe |
- |
Load/Store Floating-point Exponential |
| LSUI |
+lsui |
Armv9.6-A+ |
Load/Store Unsigned Integer |
| MOPS_GO |
+mops-go |
- |
Memory Operations GO |
| MPAMv2 |
+mpamv2 |
- |
Memory System Resource Partitioning |
| MTETC |
+mtetc |
- |
MTE Tag Check |
| OCCMO |
+occmo |
Armv9.6-A+ |
Occurrence Counter |
| PCDPHINT |
+pcdphint |
- |
Preload Data Hint |
| POE2 |
+poe2 |
- |
Permission Overlay Extension 2 |
| PoPS |
+pops |
- |
Point of Presence Stack |
| SME_F8F16 |
+sme-f8f16 |
- |
SME FP8 to Half |
| SME_F8F32 |
+sme-f8f32 |
- |
SME FP8 to Single |
| SME_LUTv2 |
+sme-lutv2 |
- |
SME Lookup Table v2 |
| SME_MOP4 |
+sme-mop4 |
- |
SME Matrix Operation 4 |
| SME_TMOP |
+sme-tmop |
- |
SME Transposed Matrix Operation |
| SME2p2 |
+sme2p2 |
- |
SME2.2 |
| SME2p3 |
+sme2p3 |
- |
SME2.3 |
| SSVE_AES |
+ssve-aes |
- |
Streaming SVE AES |
| SSVE_BitPerm |
+ssve-bitperm |
- |
Streaming SVE Bit Permutation |
| SSVE_FEXPA |
+ssve-fexpa |
- |
Streaming SVE Floating-point Exponential |
| SVE_AES2 |
+sve-aes2 |
- |
SVE AES2 |
| SVE_B16MM |
+sve-b16mm |
- |
SVE BFloat16 Matrix Multiply |
| SVE_BFSCALE |
+sve-bfscale |
- |
SVE BFloat16 Scale |
| SVE_F16F32MM |
+sve-f16f32mm |
- |
SVE Half to Single MM |
| SVE2p2 |
+sve2p2 |
- |
SVE2.2 |
| SVE2p3 |
+sve2p3 |
- |
SVE2.3 |
| TEV |
+tev |
- |
Trace Event |
| TLBID |
+tlbid |
- |
TLB Invalidate |
ACLE (Arm C Language Extensions) 支持
GCC 14 ACLE 新增
- Function Multiversioning Specification (Beta)
- Memory prefetch intrinsics
- Special register intrinsics (128-bit extension
+d128)
- NEON-SVE Bridge intrinsics (
arm_neon_sve_bridge.h)
- 更多 intrinsics 无需指定更高架构级别
GCC 15 ACLE 新增
- Guarded control stacks intrinsics
- Lookup table intrinsics (
__ARM_FEATURE_LUT)
- FAMINMAX intrinsics (
__ARM_FEATURE_FAMINMAX)
- FP8 系列 intrinsics (
__ARM_FEATURE_FP8*)
- SVE2.1 intrinsics (
__ARM_FEATURE_SVE2p1)
- SME2.1 intrinsics (
__ARM_FEATURE_SME2p1)
- SVE/SME BFloat16 intrinsics
- SVE vector operators (
__ARM_FEATURE_SVE_VECTOR_OPERATORS==2)
__fma / __fmaf intrinsics
__chkfeat intrinsic
GCC 16 ACLE 新增
__sqrt / __sqrtf intrinsics
__atomic_store_with_stshh intrinsic
__pldir intrinsic
- Build attributes 支持 (
__ARM_BUILDATTR64_FV)
- Function Multi Versioning 正式支持 (
__HAVE_FUNCTION_MULTI_VERSIONING)
- SME2 FP8 conversions intrinsics
- SVE floating-point matrix multiply intrinsics
- FP8 multiply-add long intrinsics
- SVE/SME LUTv2 intrinsics
- Packed boolean vectors (C/C++ SVE booleans)
优化改进
GCC 14 优化
- AArch64 特定寄存器分配优化 (
-mearly-ra=)
- Load/store-pair 指令融合优化 (
-mearly-ldp-fusion, -mlate-ldp-fusion)
- 自动使用 strided vector register operands (SME)
- 减少 Advanced SIMD 和 SVE 代码中的冗余移动
GCC 15 优化
- 自动使用 AArch64 CRC 指令
- 自动使用 saturating vector arithmetic 指令
- 改进 population count 代码生成
- 改进浮点和 vector immediates 处理
- 改进 vector permutations 处理
- 更多 SVE 指令优化 Advanced SIMD 代码
- SVE ACLE intrinsics folding 和 simplification
- 改进 CPU-specific tuning
- 改进寄存器分配(消除 vector moves)
- 128-bit atomic operations 扩展支持 LRCPC3
GCC 16 优化
- 自动向量化 ISA 选择 (
-mautovec-preference)
- MTE stack tagging (
-fsanitize=memtag)
- ARM SPE profiler 支持
- 64-bit x-register 转 32-bit w-register 优化(针对特定 CPU)
- C++ spaceship operator (
<=>) 优化
- preserve_none 调用约定支持
- Build attributes 用于标记 GCS 代码
重要变更说明
弃用和移除
| 版本 |
弃用/移除内容 |
| GCC 14 |
Xeon Phi (Knight Landing/Mill) CPU 支持 - 将在 GCC 15 移除 |
| GCC 15 |
ILP32 (-mabi=ilp32) 支持弃用 - 将在未来版本移除 |
| GCC 15 |
Xeon Phi CPU 支持移除 |
| GCC 16 |
PC relative literal loads (-mpc-relative-literal-loads) 弃用 |
新增目标支持
| 版本 |
新目标 |
| GCC 15 |
AArch64 MinGW (aarch64-w64-mingw32) |
命令行选项变更
GCC 14:
- -mtp= 支持更改 TPIDR 寄存器用于 TLS 访问
- -mearly-ra= (默认 -O2+ 启用)
- -mearly-ldp-fusion / -mlate-ldp-fusion
GCC 15:
- -mbranch-protection=gcs 支持 GCS
- -mcpu=native 改进对未知 heterogeneous systems 处理
- -mfix-cortex-a53-* 在不兼容架构时静默忽略
- SME 修饰符 +sme 不再隐式启用 SVE(但 GCC 尚不支持无 SVE 的 SME)
GCC 16:
- -mautovec-preference 自动向量化 ISA 选择
- -menable-sysreg-checking 系统寄存器访问检查
- SME without SVE 正式支持
编译示例
# GCC 14: 编译支持 SME2 的代码
gcc -march=armv9-a+sme2 -O2 program.c
# GCC 15: 编译支持 FP8 的代码
gcc -march=armv9.5-a+fp8 -O2 program.c
# GCC 16: 编译支持 MTE stack tagging 的代码
gcc -march=armv9.6-a -fsanitize=memtag -O2 program.c
# 使用 generic 架构级别
gcc -march=generic-armv9-a -O2 program.c
# 指定 CPU 优化
gcc -mcpu=neoverse-v3 -O2 program.c
预定义宏检测
// 检测 SME 支持
#ifdef __ARM_FEATURE_SME
// SME 可用
#endif
// 检测 SVE2 支持
#ifdef __ARM_FEATURE_SVE2
// SVE2 可用
#endif
// 检测 FP8 支持 (GCC 15+)
#ifdef __ARM_FEATURE_FP8
// FP8 可用
#endif
// 检测 Function Multi Versioning (GCC 16+)
#ifdef __HAVE_FUNCTION_MULTI_VERSIONING
// FMV 正式支持
#endif
总结
GCC 14/15/16 对 ARM64 架构的支持持续增强:
- CPU 支持: 从 Cortex-A520/A720/X4 到 Apple M4/M5, NVIDIA Grace, Qualcomm Oryon
- 架构级别: 从 generic 到 armv9.6-a
- 特性扩展: SME/SME2, FP8, SVE2.1/2.2/2.3, GCS, MTE 等大量新特性
- ACLE 支持: 持续扩展 intrinsics 和预定义宏
- 优化改进: 寄存器分配、指令融合、自动向量化等
这些改进使得 GCC 在 ARM64 平台上具有更强的性能优化能力和更完整的架构特性支持。