| 발표 | 2011년 |
|---|---|
| 버전 | ARMv8-A, ARMv8-R, ARMv9-A |
| 인코딩 | AArch64/A64 및 AArch32/A32는 32비트 명령어를 사용하며, AArch32/T32 (Thumb-2)는 16비트와 32비트 혼합 명령어를 사용함 |
| 엔디언 | 데이터에 대해서만 바이엔디언 (기본값은 리틀 엔디언, 명령어는 리틀 엔디언) |
| 확장 | |
| 레지스터 | |
| 범용 목적 | 31 × 64비트 정수 레지스터 |
| 부동소수점 | 32 × 128비트 레지스터 (스칼라 32 및 64비트 부동소수점 또는 SIMD 부동소수점 또는 정수용, 또는 암호화용) |
AArch64 또는 ARM64는 널리 사용되는 컴퓨터 프로세서 설계 세트인 ARM 아키텍처의 64비트 버전이다. 2011년 ARMv8 아키텍처와 함께 도입되었으며 나중에 ARMv9 시리즈의 일부가 되었다. AArch64를 사용하면 프로세서가 이전의 32비트 버전보다 더 많은 메모리를 처리하고 더 빠른 계산을 수행할 수 있다. 이는 AArch32로 알려진 이전 32비트 모드와 함께 작동하도록 설계되어 광범위한 소프트웨어와의 호환성을 허용한다. AArch64를 사용하는 장치에는 스마트폰, 태블릿, 개인용 컴퓨터 및 서버가 포함된다. AArch64 아키텍처는 성능, 보안 및 고급 컴퓨팅 작업에 대한 지원을 개선하는 업데이트를 통해 계속 진화하고 있다.
ARMv8-A, ARMv8-R 및 ARMv9-A에서 "실행 상태"(Execution state)는 프로세서 환경의 주요 특성을 정의한다. 여기에는 기본 프로세서 레지스터에 사용되는 비트 수, 지원되는 명령어 집합 및 프로세서 실행 환경의 기타 측면이 포함된다. 이러한 버전의 ARM 아키텍처는 64비트 AArch64 상태와 32비트 AArch32 상태의 두 가지 실행 상태를 지원한다.
확장: 데이터 수집 힌트 (ARMv8.0-DGH).
AArch64는 ARMv8-A에서 도입되었으며 이후 버전의 ARMv8-A 및 모든 버전의 ARMv9-A에 포함되어 있다. 또한 ARMv8-A 도입 이후 ARMv8-R에서도 옵션으로 도입되었으나, ARMv8-M에는 포함되지 않는다.
A64 명령어가 속한 그룹을 선택하기 위한 주요 연산 코드(opcode)는 25~28비트에 위치한다.
| 유형 | 비트 | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 예약됨 | 0 | op0 | 0 | 0 | 0 | 0 | op1 | |||||||||||||||||||||||||
| SME | 1 | op0 | 0 | 0 | 0 | 0 | 가변적 | |||||||||||||||||||||||||
| 미할당 | 0 | 0 | 0 | 1 | ||||||||||||||||||||||||||||
| SVE | 0 | 0 | 1 | 0 | 가변적 | |||||||||||||||||||||||||||
| 미할당 | 0 | 0 | 1 | 1 | ||||||||||||||||||||||||||||
| 데이터 처리 — 즉시 PC-상대 | op | immlo | 1 | 0 | 0 | 0 | 0 | immhi | Rd | |||||||||||||||||||||||
| 데이터 처리 — 즉시 기타 | sf | 1 | 0 | 0 | 01–11 | Rd | ||||||||||||||||||||||||||
| 분기 + 시스템 명령어 | op0 | 1 | 0 | 1 | op1 | op2 | ||||||||||||||||||||||||||
| 로드 및 스토어 명령어 | op0 | 1 | op1 | 0 | op2 | op3 | op4 | |||||||||||||||||||||||||
| 데이터 처리 — 레지스터 | sf | op0 | op1 | 1 | 0 | 1 | op2 | op3 | ||||||||||||||||||||||||
| 데이터 처리 — 부동소수점 및 SIMD | op0 | 1 | 1 | 1 | op1 | op2 | op3 | |||||||||||||||||||||||||

2011년 10월에 발표된 ARMv8-A는 ARM 아키텍처의 근본적인 변화를 나타낸다. 이는 "AArch64"라고 불리는 선택적 64비트 실행 상태와 관련 새로운 "A64" 명령어 집합을 추가하며, 기존의 32비트 "A32"(오리지널 32비트 ARM) 및 "T32"(Thumb/Thumb-2) 명령어 집합을 지원하는 32비트 실행 상태인 "AArch32"도 함께 지원한다. 후자의 명령어 집합은 기존의 32비트 ARMv7-A 아키텍처와 사용자 공간 호환성을 제공한다. ARMv8-A를 사용하면 64비트 OS에서 32비트 애플리케이션을 실행할 수 있으며, 32비트 OS를 64비트 하이퍼바이저의 제어 하에 둘 수 있다. ARM은 2012년 10월 30일에 Cortex-A53 및 Cortex-A57 코어를 발표했다. 애플은 소비자 제품(iPhone 5S)에 ARMv8-A 호환 코어(Cyclone)를 최초로 출시했다. AppliedMicro는 FPGA를 사용하여 ARMv8-A를 최초로 시연했다. 삼성전자의 첫 번째 ARMv8-A SoC는 갤럭시 노트4에 사용된 엑시노스 5433으로, Big.LITTLE 구성의 Cortex-A57 및 Cortex-A53 코어 4개씩 두 개의 클러스터를 특징으로 하지만 AArch32 모드에서만 실행된다. ARMv8-A는 AArch32와 AArch64 모두에서 VFPv3/v4 및 고급 SIMD(Neon)를 표준 기능으로 포함한다. 또한 AES, SHA-1/SHA-256 및 유한체 산술을 지원하는 암호화 명령어를 추가한다.
ARMv8-A 프로세서는 AArch32와 AArch64 중 하나 또는 둘 다를 지원할 수 있다. 낮은 예외 레벨에서는 AArch32와 AArch64를 지원하고 높은 예외 레벨에서는 AArch64만 지원할 수도 있다. 예를 들어, ARM Cortex-A32는 AArch32만 지원하고, ARM Cortex-A34는 AArch64만 지원하며, ARM Cortex-A72는 AArch64와 AArch32를 모두 지원한다. ARMv9-A 프로세서는 모든 예외 레벨에서 AArch64를 지원해야 하며, EL0에서 AArch32를 지원할 수 있다.
2014년 12월, "v8.0에 비해 점진적인 이점"을 가진 업데이트인 ARMv8.1-A가 발표되었다. 향상된 기능은 명령어 집합의 변경과 예외 모델 및 메모리 변환의 변경이라는 두 가지 범주로 나뉜다.
명령어 집합의 향상된 기능은 다음과 같다.
예외 모델 및 메모리 변환 시스템의 향상된 기능은 다음과 같다.
ARMv8.2-A는 2016년 1월에 발표되었다. 향상된 기능은 네 가지 범주로 나뉜다.
확장형 벡터 확장(Scalable Vector Extension, SVE)은 고능성 컴퓨팅 과학 워크로드의 벡터화를 위해 특별히 개발된 "ARMv8.2-A 아키텍처 이상에 대한 선택적 확장"으로 라이선스가 부여된다. 사양에 따라 ARM 라이선스 사용자는 128비트 배수로 128에서 2048비트 사이의 하드코딩된 아키텍처 레지스터 너비를 선택할 수 있다. 이 확장은 NEON 확장을 보완하며 이를 대체하지 않는다.
512비트 SVE 변체는 후지쯔 A64FX ARM 프로세서를 사용하는 후가쿠 슈퍼컴퓨터에서 이미 구현되었다. 이 컴퓨터는 2020년 6월부터 2022년 5월까지 2년 동안 세계에서 가장 빠른 슈퍼컴퓨터였다. 더 유연한 버전인 2x256 SVE는 AWS Graviton3 ARM 프로세서에 의해 구현되었다.
SVE는 GCC에서 지원되며, GCC 8은 자동 벡터화를 지원하고 GCC 10은 C 인트린직(intrinsics)을 지원한다. 2020년 7월 현재 LLVM과 클랭은 C 및 IR 인트린직을 지원한다. ARM 자체 LLVM 포크는 자동 벡터화를 지원한다.
2016년 10월, ARMv8.3-A가 발표되었다. 향상된 기능은 여섯 가지 범주로 나뉜다.
ARMv8.3-A 아키텍처는 이제 최소 GCC 7.0에서 지원된다.
2017년 11월, ARMv8.4-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
2018년 9월, ARMv8.5-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
2019년 8월 2일, 구글은 안드로이드가 메모리 태깅 확장(MTE)을 채택할 것이라고 발표했다.
2021년 3월, ARMv9-A가 발표되었다. ARMv9-A의 기준선은 ARMv8.5의 모든 기능이다. ARMv9-A는 또한 다음을 추가한다.
2019년 9월, ARMv8.6-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
예를 들어, 미세 트랩, WFE(Wait-for-Event) 명령어, EnhancedPAC2 및 FPAC가 있다. SVE 및 Neon을 위한 bfloat16 확장은 주로 딥 러닝 용도이다.
2020년 9월, ARMv8.7-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
2021년 9월, ARMv8.8-A 및 ARMv9.3-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
LLVM 15는 ARMv8.8-A 및 ARMv9.3-A를 지원한다.
2022년 9월, ARMv8.9-A 및 ARMv9.4-A가 발표되었으며 다음을 포함한다.
2023년 10월, ARMv9.5-A가 발표되었으며 다음을 포함한다.
2024년 10월, ARMv9.6-A가 발표되었으며 다음을 포함한다.
2025년 10월, ARMv9.7-A가 발표되었으며 다음을 포함한다.
ARM-R 아키텍처, 특히 Armv8-R 프로파일은 예측 가능하고 결정론적인 동작이 필수적인 실시간 애플리케이션의 요구 사항을 해결하도록 설계되었다. 이 프로파일은 실시간 제약이 중요한 임베디드 시스템에서 고성능, 신뢰성 및 효율성을 제공하는 데 중점을 둔다.
Armv8-R 프로파일에 선택적인 AArch64 지원이 도입되면서 실시간 기능이 더욱 향상되었다. Cortex-R82는 이 확장된 지원을 구현한 최초의 프로세서로, 실시간 영역에 여러 가지 새로운 기능과 개선 사항을 가져왔다.
pointer authentication extension is defined to be mandatory extension on ARMv8.3-A and is not optional
The ARMv8.3-A architecture is now supported. It can be used by specifying the -march=armv8.3-a option. [..] The option -msign-return-address= is supported to enable return address protection using ARMv8.3-A Pointer Authentication Extensions.