Skip to content

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 平台上具有更强的性能优化能力和更完整的架构特性支持。