AArch64

**AArch64** 또는 **ARM64**는 널리 사용되는 컴퓨터 프로세서 설계 세트인 ARM 아키텍처의 64비트 버전이다. 2011년 ARMv8 아키텍처와 함께 도입되었으며 나중에 ARMv9 시리즈의 일부가 되었다. AArch64를 사용하면 프로세서가 이전의 32비트 버전보다 더 많은 메모리를 처리하고 더 빠른 계산을 수행할 수 있다. 이는 AArch32로 알려진 이전 32비트 모드와 함께 작동하도록 설계되어 광범위한 소프트웨어와의 호환성을 허용한다. AArch64를 사용하는 장치에는 스마트폰, 태블릿, 개인용 컴퓨터 및 서버가 포함된다. AArch64 아키텍처는 성능, 보안 및 고급 컴퓨팅 작업에 대한 지원을 개선하는 업데이트를 통해 계속 진화하고 있다.

## AArch64 실행 상태

ARMv8-A, ARMv8-R 및 ARMv9-A에서 "실행 상태"(Execution state)는 프로세서 환경의 주요 특성을 정의한다. 여기에는 기본 프로세서 레지스터에 사용되는 비트 수, 지원되는 명령어 집합 및 프로세서 실행 환경의 기타 측면이 포함된다. 이러한 버전의 ARM 아키텍처는 64비트 AArch64 상태와 32비트 AArch32 상태의 두 가지 실행 상태를 지원한다.

### 명명 규칙
* 64비트:
** 실행 상태: AArch64
** 명령어 집합: A64
* 32비트:
** 실행 상태: AArch32
** 명령어 집합: A32 + T32
** 예: ARMv8-R, Cortex-A32

### AArch64 기능
* 새로운 명령어 집합, A64:
** 31개의 범용 64비트 레지스터를 가짐
** 전용 제로(zero) 또는 스택 포인터(SP) 레지스터를 가짐 (명령어에 따라 다름)
** 프로그램 카운터(PC)는 더 이상 레지스터로 직접 접근할 수 없음
** 명령어는 여전히 32비트 길이며 대부분 A32와 동일함 (LDM/STM 명령어 및 대부분의 조건부 실행은 제외됨)
*** 쌍을 이룬 로드/스토어(LDM/STM 대신)를 가짐
*** 대부분의 명령어(분기 제외)에 대해 프레디케이션이 없음
** 대부분의 명령어는 32비트 또는 64비트 인수를 취할 수 있음
** 주소는 64비트로 간주됨
* 향상된 고급 SIMD (Neon):
** 32 × 128비트 레지스터를 가짐 (16개에서 증가), VFPv4를 통해서도 접근 가능
** 배정밀도 부동소수점수 지원
** IEEE 754 완벽 준수
** AES 암호화/복호화 및 SHA-1/SHA-2 해싱 명령어도 이 레지스터를 사용함
* 새로운 예외 시스템:
** 뱅크드(banked) 레지스터와 모드가 줄어듦
* 64비트로 쉽게 확장되도록 설계된 기존의 대용량 물리 주소 확장(LPAE)을 기반으로 한 48비트 가상 주소로부터의 메모리 변환

확장: 데이터 수집 힌트 (ARMv8.0-DGH).

AArch64는 ARMv8-A에서 도입되었으며 이후 버전의 ARMv8-A 및 모든 버전의 ARMv9-A에 포함되어 있다. 또한 ARMv8-A 도입 이후 ARMv8-R에서도 옵션으로 도입되었으나, ARMv8-M에는 포함되지 않는다.

#### A64 명령어 형식
A64 명령어가 속한 그룹을 선택하기 위한 주요 연산 코드(opcode)는 25~28비트에 위치한다.

## ARM-A (애플리케이션 아키텍처)

[섬네일|[ARM Cortex-A57|Cortex-A57/A53 MPCore Big.LITTLE CPU 칩을 장착한 Armv8-A 플랫폼]]
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를 지원할 수 있다.

### ARMv8.1-A
2014년 12월, "v8.0에 비해 점진적인 이점"을 가진 업데이트인 ARMv8.1-A가 발표되었다. 향상된 기능은 명령어 집합의 변경과 예외 모델 및 메모리 변환의 변경이라는 두 가지 범주로 나뉜다.

명령어 집합의 향상된 기능은 다음과 같다.

* AArch64 원자적 읽기-쓰기 명령어 세트.
* 일부 라이브러리 최적화를 가능하게 하기 위해 AArch32 및 AArch64 모두를 위한 고급 SIMD 명령어 집합 추가:
** Signed Saturating Rounding Doubling Multiply Accumulate, Returning High Half.
** Signed Saturating Rounding Doubling Multiply Subtract, Returning High Half.
** 명령어가 벡터 및 스칼라 형식으로 추가됨.
* 구성 가능한 주소 영역으로 제한된 메모리 접근 순서를 제공할 수 있는 AArch64 로드 및 스토어 명령어 세트.
* v8.0의 선택적 CRC 명령어가 ARMv8.1에서 필수 사항이 됨.

예외 모델 및 메모리 변환 시스템의 향상된 기능은 다음과 같다.

* 새로운 PAN(Privileged Access Never) 상태 비트는 명시적으로 활성화되지 않는 한 사용자 데이터에 대한 특권 접근을 방지하는 제어 기능을 제공함.
* 가상화를 위한 VMID 범위 증가; 더 많은 수의 가상 머신 지원.
* 페이지 테이블 접근 플래그의 하드웨어 업데이트에 대한 선택적 지원 및 선택적인 하드웨어 업데이트 더티 비트 메커니즘의 표준화.
* 가상화 호스트 확장(Virtualization Host Extensions, VHE). 이러한 향상된 기능은 호스트와 게스트 운영 체제 간의 전환 시 발생하는 소프트웨어 오버헤드를 줄여 유형 2 하이퍼바이저의 성능을 개선함. 이 확장을 통해 호스트 OS는 실질적인 수정 없이 EL1 대신 EL2에서 실행될 수 있음.
* OS에 하드웨어 지원이 필요하지 않은 경우 운영 체제 용도로 일부 변환 테이블 비트를 해제하는 메커니즘.
* 메모리 태깅을 위한 Top byte ignore.

### ARMv8.2-A
ARMv8.2-A는 2016년 1월에 발표되었다. 향상된 기능은 네 가지 범주로 나뉜다.

* 선택적 반정밀도 부동소수점 데이터 처리 (반정밀도는 이미 지원되었지만 처리가 아닌 저장 형식으로만 지원되었음.)
* 메모리 모델 향상.
* RAS 확장(RAS Extension) 도입.
* 통계적 프로파일링 도입.

#### 확장형 벡터 확장 (SVE)
확장형 벡터 확장(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 포크는 자동 벡터화를 지원한다.

### ARMv8.3-A
2016년 10월, ARMv8.3-A가 발표되었다. 향상된 기능은 여섯 가지 범주로 나뉜다.

* 포인터 인증 (PAC) (AArch64 전용); 새로운 블록 암호인 QARMA를 기반으로 하는 아키텍처의 필수 확장(컴파일러는 보안 기능을 활용해야 하지만, 명령어가 NOP 공간에 있으므로 이전 칩에서 추가 보안을 제공하지는 않지만 하위 호환성을 유지함).
* 중첩 가상화 (AArch64 전용).
* 고급 SIMD 복소수 지원 (AArch64 및 AArch32); 예: 90도 배수 회전.
* 새로운 FJCVTZS (Floating-point 자바스크립트 Convert to Signed fixed-point, rounding toward Zero) 명령어.
* C++11/C11의 (비기본) 약한 RCpc(Release Consistent processor consistent) 모델을 지원하기 위한 메모리 일관성 모델의 변경 (AArch64 전용) (기본 C++11/C11 일관성 모델은 이전 ARMv8에서 이미 지원되었음).
* 대규모 시스템 가시성 캐시를 위한 ID 메커니즘 지원 (AArch64 및 AArch32).

ARMv8.3-A 아키텍처는 이제 최소 GCC 7.0에서 지원된다.

### ARMv8.4-A
2017년 11월, ARMv8.4-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.

* "SHA3 / SHA512 / SM3 / SM4 암호화 확장", 즉 선택적 명령어.
* 가상화 지원 개선.
* 메모리 파티셔닝 및 모니터링 (MPAM) 기능.
* 새로운 Secure EL2 상태 및 활동 모니터.
* 부호 있는 및 부호 없는 정수 스칼라곱(SDOT 및 UDOT) 명령어.

### ARMv8.5-A 및 ARMv9.0-A

2018년 9월, ARMv8.5-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
* 메모리 태깅 확장 (MTE) (AArch64).
* "공격자가 임의의 코드를 실행할 수 있는 능력"을 줄이기 위한 분기 타겟 표시기 (BTI) (AArch64). 포인터 인증과 마찬가지로 관련 명령어는 이전 버전의 ARMv8-A에서 무연산(no-ops)이다.
* 난수 생성기 명령어 – "다양한 국내 및 국제 표준을 준수하는 결정론적 및 진정 난수 제공".

2019년 8월 2일, 구글은 안드로이드가 메모리 태깅 확장(MTE)을 채택할 것이라고 발표했다.

2021년 3월, ARMv9-A가 발표되었다. ARMv9-A의 기준선은 ARMv8.5의 모든 기능이다. ARMv9-A는 또한 다음을 추가한다.

* 확장형 벡터 확장 2 (SVE2). SVE2는 명령어당 더 많은 작업을 수행할 수 있도록 미세한 데이터 레벨 병렬성(DLP)을 높이기 위해 SVE의 확장 가능한 벡터화를 기반으로 구축되었다. SVE2의 목표는 현재 NEON을 사용하는 DSP 및 멀티미디어 SIMD 코드를 포함한 더 광범위한 소프트웨어에 이러한 이점을 제공하는 것이다. LLVM/클랭 9.0 및 GCC 10.0은 SVE2를 지원하도록 업데이트되었다.
* 트랜잭셔널 메모리 확장 (TME). x86 확장을 따라 TME는 하드웨어 트랜잭셔널 메모리 (HTM) 및 트랜잭셔널 락 엘리전(TLE) 지원을 제공한다. TME는 스레드당 더 많은 작업을 수행할 수 있도록 거친 스레드 레벨 병렬성(TLP)을 높이기 위해 확장 가능한 동시성을 제공하는 것을 목표로 한다. LLVM/클랭 9.0 및 GCC 10.0은 TME를 지원하도록 업데이트되었다.
* 기밀 컴퓨팅 아키텍처 (CCA).

### ARMv8.6-A 및 ARMv9.1-A

2019년 9월, ARMv8.6-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
* 일반 행렬 곱셈 (GEMM).
* Bfloat16 형식 지원.
* SIMD 행렬 조작 명령어 (NEON에 추가됨):
** BFDOT* (BFloat16 스칼라곱)
** BFMMLA (BFloat16 행렬 곱셈 및 누산)
** BFMLAL* (BFloat16 곱셈 및 누산, long으로 확장)
** BFCVT* (BFloat16 변환)
* 가상화, 시스템 관리 및 보안을 위한 향상된 기능.
* 그리고 다음 확장 기능 (LLVM 11에서 이미 지원 추가됨):
** 향상된 카운터 가상화 (ARMv8.6-ECV).
** 미세 트랩 (ARMv8.6-FGT).
** 활동 모니터 가상화 (ARMv8.6-AMU).

예를 들어, 미세 트랩, WFE(Wait-for-Event) 명령어, EnhancedPAC2 및 FPAC가 있다. SVE 및 Neon을 위한 bfloat16 확장은 주로 딥 러닝 용도이다.

### ARMv8.7-A 및 ARMv9.2-A

2020년 9월, ARMv8.7-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
* 확장형 행렬 확장 (SME) (ARMv9.2 전용). SME는 다음과 같이 행렬을 효율적으로 처리하기 위한 새로운 기능을 추가한다.
** 행렬 타일 저장소.
** 즉석(On-the-fly) 행렬 전치.
** 타일 벡터 로드/스토어/삽입/추출.
** SVE 벡터의 행렬 외적.
** "스트리밍 모드" SVE.
* PCIe 핫 플러그에 대한 향상된 지원 (AArch64).
* 가속기에 대한 원자적 64바이트 로드 및 스토어 (AArch64).
* 타임아웃이 있는 WFI(Wait For Interrupt) 및 WFE(Wait For Event) (AArch64).
* 분기 기록 기록 (ARMv9.2 전용).
* 콜 스택 레코더.

### ARMv8.8-A 및 ARMv9.3-A

2021년 9월, ARMv8.8-A 및 ARMv9.3-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
* 마스크 불가능 인터럽트 (AArch64).
* memcpy() 및 memset() 스타일 작업을 최적화하기 위한 명령어 (AArch64).
* PAC의 향상된 기능 (AArch64).
* 힌트가 포함된 조건부 분기 (AArch64).

LLVM 15는 ARMv8.8-A 및 ARMv9.3-A를 지원한다.

### ARMv8.9-A 및 ARMv9.4-A

2022년 9월, ARMv8.9-A 및 ARMv9.4-A가 발표되었으며 다음을 포함한다.

* 가상 메모리 시스템 아키텍처 (VMSA) 향상.
** 권한 간접 참조 및 오버레이.
** 변환 강화(Translation hardening).
** 128비트 변환 테이블 (ARMv9 전용).
* 확장형 행렬 확장 2 (SME2) (ARMv9 전용).
** 다중 벡터 명령어.
** 다중 벡터 프레디케이트(predicates).
** 2b/4b 가중치 압축.
** 1b 이진 네트워크.
** 범위 프리페치(Range Prefetch).
* 가드 제어 스택 (GCS) (ARMv9 전용).
* 기밀 컴퓨팅.
** 메모리 암호화 컨텍스트.
** 장치 할당.

### ARMv9.5-A

2023년 10월, ARMv9.5-A가 발표되었으며 다음을 포함한다.

* 다음에 추가된 FP8 지원 (E5M2 및 E4M3 형식):
** SME2
** SVE2
** 고급 SIMD (Neon)
* 하드웨어 더티 상태 추적 구조(FEAT_HDBSS)를 이용한 가상 머신의 라이브 마이그레이션
* 체크 포인트 산술
* 포인터 인증 코드를 생성하거나 확인할 때 PC와 SP의 조합을 수정자로 사용하는 기능 지원.
* 영역 관리 확장(RME) 활성화 설계 지원, 과립 보호 테이블(Granule Protection Tables)에서 비보안 전용 지원 및 특정 물리 주소 공간(PAS)을 비활성화하는 기능.
* EL3 구성 쓰기 트랩.
* 링크 연결 없이 주소 범위 및 불일치 트리거에 대한 중단점 지원.
* EL3에서 EL2 또는 EL1로 SError를 효율적으로 위임하는 기능 지원.

### ARMv9.6-A

2024년 10월, ARMv9.6-A가 발표되었으며 다음을 포함한다.

* 구조적 희소성 및 쿼터 타일(quarter tile) 연산을 통한 SME 효율성 개선
* 멀티 칩렛 및 멀티 칩 시스템에서 공유 메모리 컴퓨터 시스템을 더 잘 지원하기 위한 MPAM 도메인
* 가상 머신에서의 추적 및 통계적 프로파일링을 위한 하이퍼바이저 메모리 제어
* 캐싱 및 데이터 배치 개선
* 기밀 컴퓨팅을 위한 세밀한 데이터 격리
* EL1 시스템 레지스터의 비트 단위 잠금
* 대규모 메모리 시스템을 위한 과립 보호 테이블(GPT)의 확장성 개선
* 확장/축소 및 첫 번째/마지막 활성 요소를 찾기 위한 새로운 SVE 명령어
* OS가 애플리케이션 메모리와 상호작용할 수 있도록 하는 추가적인 비특권 로드 및 스토어 명령어 (LDL(U)R* 및 STL(U)R*)
* EL3에서 정의되지 않은 명령어 예외 주입

### ARMv9.7-A

2025년 10월, ARMv9.7-A가 발표되었으며 다음을 포함한다.

* 타겟 메모리 무효화 브로드캐스트
* 유연한 리소스 관리 (MPAMv2)
* 인공지능을 위한 6비트 데이터 유형
* 비디오 코덱
* GICv5

## ARM-R (실시간 아키텍처)
**ARM-R** 아키텍처, 특히 Armv8-R 프로파일은 예측 가능하고 결정론적인 동작이 필수적인 실시간 애플리케이션의 요구 사항을 해결하도록 설계되었다. 이 프로파일은 실시간 제약이 중요한 임베디드 시스템에서 고성능, 신뢰성 및 효율성을 제공하는 데 중점을 둔다.

Armv8-R 프로파일에 선택적인 AArch64 지원이 도입되면서 실시간 기능이 더욱 향상되었다. Cortex-R82는 이 확장된 지원을 구현한 최초의 프로세서로, 실시간 영역에 여러 가지 새로운 기능과 개선 사항을 가져왔다.

## 각주

## 외부 링크
* Arm Developer

분류:ARM 아키텍처
분류:64비트 컴퓨터