AArch64

**AArch64** atau **ARM64** adalah ekstensi 64-bit dari keluarga arsitektur ARM.

Ini pertama kali diperkenalkan dengan arsitektur Armv8-A. Arm merilis ekstensi baru setiap tahun.

## Ekstensi dan fitur: ARMv8.x dan ARMv9.x
Diumumkan pada bulan Oktober 2011, **ARMv8-A** mewakili perubahan mendasar dalam arsitektur ARM. Ini menambahkan arsitektur 64 bit opsional, bernama "AArch64", dan set instruksi baru "A64" yang terkait. AArch64 menyediakan kompatibilitas ruang pengguna dengan arsitektur 32-bit yang ada ("AArch32"/ARMv7-A), dan set instruksi ("A32"). Set instruksi Thumb 16-32bit disebut dengan "T32" dan tidak memiliki lawan 64-bit. ARMv8-A memungkinkan aplikasi 32-bit untuk dijalankan dalam OS 64-bit, dan OS 32-bit untuk berada di bawah kendali dari hypervisor 64-bit. ARM mengumumkan inti Cortex-A53 dan Cortex- A57 pada 30 Oktober 2012. Apple adalah yang pertama kali merilis inti kompatibel ARMv8-A (Cyclone) dalam produk konsumen (iPhone 5S). AppliedMicro, menggunakan FPGA, adalah yang pertama untuk mendemonstrasikan ARMv8-A. SoC ARMv8A pertama dari Samsung yaitu Exynos 5433 yang digunakan dalam Galaxy Note 4, yang menampilkan dua kluster dari empat inti Cortex-A57 dan Cortex-A53 dalam konfigurasi big.LITTLE; tetapi hanya akan berjalan pada mode AArch32.

Untuk AArch32 dan AArch64, ARMv8-A membuat standar VFPv3/v4 dan SIMD (Neon) lanjutan. Itu juga menambahkan instruksi kriptografi yang mendukung AES, SHA-1/SHA-256 dan aritmetika bidang terbatas.

### Konvensi penamaan

* 64 + 32 bit
** Architecture: AArch64
** Spesifikasi: ARMv8-A
** Instruction sets: A64 + A32
** Suffixes: v8-A
* 32 + 16 (Thumb) bit
** Architecture: AArch32
** Spesifikasi: ARMv8-R / ARMv7-A
** Instruction sets: A32 + T32
** Suffixes: -A32 / -R / v7-A
** Contoh: ARMv8-R, Cortex-A32

### Fitur AArch64

* Set instruksi baru, A64
** Memiliki 31 register 64-bit tujuan umum.
** Memiliki register zero atau stack pointer (SP) khusus (tergantung pada instruksi).
** Penghitung program (PC) tidak lagi dapat diakses secara langsung sebagai register.
** Instruksi masih 32&nbsp;bit panjang dan sebagian besar sama dengan A32 (dengan instruksi LDM/STM dan sebagian besar eksekusi bersyarat dibatalkan).
*** Telah memasangkan beban/penyimpanan (sebagai pengganti LDM/STM).
*** Tidak ada predikasi untuk sebagian besar instruksi (kecuali cabang).
** Sebagian besar instruksi dapat menggunakan argumen 32-bit atau 64-bit.
** Alamat dianggap 64-bit.
* Advanced SIMD (Neon) ditingkatkan
** Memiliki register 32 × 128-bit (naik dari 16), juga dapat diakses via VFPv4.
** Mendukung format floating-point presisi ganda.
** Sepenuhnya sesuai dengan IEEE 754.
** AES mengenkripsi/mendekripsi dan instruksi hashing SHA-1/SHA-2 juga menggunakan register ini.
* Sistem pengecualian baru
** Lebih sedikit register dan mode yang dibelokkan.
* Terjemahan memori dari alamat virtual 48-bit berdasarkan Ekstensi Alamat Fisik Besar (LPAE) yang ada, yang dirancang agar mudah diperluas ke 64-bit.

Ekstensi: Petunjuk pengumpulan data (ARMv8.0-DGH)

AArch64 diperkenalkan di ARMv8-A dan disertakan dalam versi selanjutnya dari ARMv8-A. Itu juga diperkenalkan di ARMv8-R sebagai opsi, setelah diperkenalkan di ARMv8-A; itu tidak termasuk dalam ARMv8-M.

#### Format instruksi
Opcode utama untuk memilih grup mana yang termasuk dalam instruksi A64 adalah pada bit 25-28.

### ARMv8.1-A
Pada bulan Desember 2014, ARMv8.1-A, pembaruan dengan diumumkannya "manfaat tambahan dari v8.0". Perangkat tambahan jatuh ke dalam dua kategori: perubahan set instruksi, dan perubahan model pengecualian dan terjemahan memori.

Penyempurnaan set instruksi termasuk yang berikut:

* Satu set instruksi baca-tulis atomik AArch64.
* Tambahan pada set instruksi SIMD Lanjutan untuk AArch32 dan AArch64 untuk mengaktifkan peluang bagi beberapa pengoptimalan perpustakaan:
** Ditandatangani Saturating Rounding Doubling Multiply Accumulate, Returning High Half.
** Ditandatangani Saturating Rounding Doubling Multiply Subtract, Returning High Half.
** Instruksi ditambahkan dalam bentuk vektor dan skalar.
* Serangkaian instruksi pemuatan dan penyimpanan AArch64 yang dapat memberikan urutan akses memori yang terbatas pada wilayah alamat yang dapat dikonfigurasi.
* Instruksi CRC opsional di v8.0 menjadi persyaratan di ARMv8.1.

Penyempurnaan untuk model pengecualian dan sistem terjemahan memori termasuk yang berikut ini:

* Bit status Privileged Access Never (PAN) terbaru menyediakan kontrol yang mencegah akses istimewa ke data pengguna kecuali diaktifkan secara eksplisit.
* Peningkatan rentang VMID untuk virtualisasi; mendukung jumlah mesin virtual yang lebih banyak.
* Dukungan opsional untuk pembaruan perangkat keras dari bendera akses tabel halaman, dan standardisasi mekanisme bit kotor, pembaruan perangkat keras, dan opsional.
* Ekstensi Host Virtualisasi (VHE). Penyempurnaan ini meningkatkan kinerja hypervisor Tipe 2 dengan mengurangi overhead perangkat lunak yang terkait saat bertransisi antara sistem operasi Host dan Guest. Ekstensi memungkinkan OS Host untuk mengeksekusi di EL2, bukan EL1, tanpa modifikasi substansial.
* Mekanisme untuk membebaskan beberapa bit tabel terjemahan untuk penggunaan sistem operasi, di mana dukungan perangkat keras tidak diperlukan oleh OS.
* Top byte ignore untuk memory tagging.

### ARMv8.2-A
Pada bulan Januari 2016, ARMv8.2-A telah diumumkan. Perangkat tambahannya jatuh ke dalam empat kategori:

* Pemrosesan data half-precision floating-point opsional (setengah presisi sudah didukung, tetapi tidak untuk diproses, hanya sebagai format penyimpanan.)
* Peningkatan model memori
* Pengenalan Ekstensi Keandalan, Ketersediaan, dan Kemudahan Servis (Ekstensi RAS)
* Pengenalan profil statistik

#### Scalable Vector Extension (SVE)
Scalable Vector Extension (SVE) adalah "ekstensi opsional untuk arsitektur ARMv8.2-A dan yang lebih baru" yang dikembangkan secara khusus untuk vektorisasi beban kerja ilmiah komputasi performa tinggi. Spesifikasi yang memungkinkan panjang vektor variabel diimplementasikan dari 128 sampai 2048 bit. Ekstensi ini melengkapi, dan tidak menggantikan, ekstensi NEON.

Varian SVE 512-bit telah diimplementasikan pada superkomputer Fugaku menggunakan prosesor Fujitsu A64FX ARM. Ini bertujuan untuk menjadi superkomputer dengan kinerja tertinggi di dunia dengan "tujuan untuk memulai operasi penuh sekitar tahun 2021." Versi yang lebih fleksibel, 2x256 SVE, diimplementasikan oleh prosesor AWS Graviton3 ARM.

SVE didukung oleh kompiler GCC, dengan GCC 8 mendukung vektorisasi otomatis dan GCC 10 mendukung intrinsik C. Mulai bulan Juli 2020, LLVM dan  mendukung intrinsik C dan IR. Garpu LLVM ARM sendiri mendukung vektorisasi otomatis.

### ARMv8.3-A
Pada bulan Oktober 2016, ARMv8.3-A telah diumumkan. Perangkat tambahannya jatuh ke dalam enam kategori:

* Otentikasi penunjuk (hanya AArch64); ekstensi wajib (berdasarkan cipher blok baru, QARMA) ke arsitektur (kompiler perlu mengeksploitasi fitur keamanan, tetapi karena instruksi berada di ruang NOP, mereka kompatibel ke belakang meskipun tidak memberikan keamanan ekstra pada chip lama).
* Virtualisasi bersarang (khusus AArch64)
* Dukungan bilangan kompleks SIMD tingkat lanjut (AArch64 dan AArch32); misalnya rotasi dengan kelipatan 90 derajat.
* Instruksi FJCVTZS terbaru (Floating-point JavaScript Convert to Signed fixed-point, pembulatan menuju Nol).
* Perubahan pada model konsistensi memori (hanya AArch64); untuk mendukung model RCpc (Rilis Konsisten prosesor yang konsisten) (non-default) yang lebih lemah dari C++11/C11 (model konsistensi C++ 11/C11 default sudah didukung di ARMv8 sebelumnya).
* Dukungan mekanisme ID untuk cache yang terlihat sistem yang lebih besar (AArch64 dan AArch32)

Arsitektur ARMv8.3-A sekarang didukung oleh (setidaknya) kompiler GCC 7.

### ARMv8.4-A
Pada bulan November 2017, ARMv8.4-A telah diumumkan. Peningkatannya termasuk dalam kategori berikut:

* "Ekstensi kripto SHA3/SHA512/SM3/SM4"
* Dukungan virtualisasi yang ditingkatkan
* Kemampuan Partisi dan Pemantauan Memori (MPAM).
* Status EL2 Aman dan Monitor Aktivitas baru
* Petunjuk perkalian titik bilangan bulat (SDOT dan UDOT) yang ditandatangani dan tidak ditandatangani.

### ARMv8.5-A dan ARMv9.0-A
Pada bulan September 2018, ARMv8.5-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:

* Ekstensi Penandaan Memori (MTE)
* Indikator Target Cabang (BTI) untuk mengurangi "kemampuan penyerang untuk mengeksekusi kode arbitrer",
* Instruksi Penghasil Bilangan Acak – "menyediakan Bilangan Acak Deterministik dan Benar yang sesuai dengan berbagai Standar Nasional dan Internasional"

Pada tanggal 2 Agustus 2019, Google mengumumkan Android akan mengadopsi Ekstensi Penandaan Memori (MTE).

Pada bulan Maret 2021, ARMv9-A telah diumumkan. Baseline ARMv9-A adalah semua fitur yang ada di ARMv8.5. ARMv9-A juga menambahkan:

* Ekstensi Vektor yang Dapat Diskalakan 2 (SVE2). SVE2 dibangun di atas vektorisasi SVE yang dapat diskalakan untuk meningkatkan Paralelisme Tingkat Data (DLP) fine-grain, untuk memungkinkan lebih banyak pekerjaan dilakukan per instruksi. SVE2 bertujuan untuk membawa manfaat ini ke perangkat lunak yang lebih luas termasuk DSP dan kode multimedia SIMD yang saat ini menggunakan Neon. Kode pengembangan LLVM/Clang 9.0 dan GCC 10.0 diperbarui untuk mendukung SVE2.
* Ekstensi Memori Transaksional (TME). Mengikuti ekstensi x86, TME membawa dukungan untuk Hardware Transactional Memory (HTM) dan Transactional Lock Elision (TLE). TME bertujuan untuk menghadirkan konkurensi yang dapat diskalakan untuk meningkatkan Thread Level Parallelism (TLP) berbutir kasar, untuk memungkinkan lebih banyak pekerjaan dilakukan per utas. Kode pengembangan LLVM/Clang 9.0 dan GCC 10.0 diperbarui untuk mendukung TME.
* Arsitektur Komputasi Rahasia (CCA)

### ARMv8.6-A dan ARMv9.1-A
Pada bulan September 2019, ARMv8.6-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:

* Perkalian Matriks Umum (GEMM)
* dukungan format bfloat16
* Instruksi manipulasi matriks SIMD, BFDOT, BFMMLA, BFMLAL dan BFCVT
* perangkat tambahan untuk virtualisasi, manajemen sistem dan keamanan
* dan ekstensi berikut (yang LLVM 11 telah menambahkan dukungan untuk):
** Peningkatan Kontra Virtualisasi (ARMv8.6-ECV)
** Perangkap Berbutir Halus (ARMv8.6-FGT)
** Monitor Aktivitas virtualisasi (ARMv8.6-AMU)

Sebagai contoh, perangkap berbutir halus, instruksi Wait-for-Event (WFE), EnhancedPAC2 dan FPAC. Ekstensi bfloat16 untuk SVE dan Neon sebagian besar digunakan untuk pembelajaran mendalam.

### ARMv8.7-A dan ARMv9.2-A
Pada bulan September 2020, ARMv8.7-A telah diumumkan. Perangkat tambahannya termasuk dalam kategori berikut:

* Ekstensi Matriks yang Dapat Diskalakan (SME) (khusus ARMv9.2). SME menambahkan fitur baru untuk memproses matriks secara efisien, seperti:
** Penyimpanan ubin matriks
** Transposisi matriks dengan cepat
** Muat/simpan/sisipkan/ekstrak petak vektor
** Produk luar matriks dari vektor SVE
** SVE "mode streaming".
* Dukungan yang ditingkatkan untuk PCIe hot plug (AArch64)
* Pemuatan 64-byte atomik dan simpan ke akselerator (AArch64)
* Tunggu Instruksi (WFI) dan Tunggu Acara (WFE) dengan batas waktu (AArch64)
* Perekaman Branch-Record (khusus ARMv9.2)

### ARMv8.8-A dan ARMv9.3-A
Pada bulan September 2021, ARMv8.8-A dan ARMv9.3-A telah diumumkan. Perangkat tambahan mereka termasuk dalam kategori ini: 

* Interupsi non-maskable (AArch64)
* Petunjuk untuk mengoptimalkan operasi gaya memcpy() dan memset() (AArch64)
* Peningkatan ke PAC (AArch64)
* Cabang bersyarat yang diisyaratkan (AArch64)

LLVM 15 mendukung ARMv8.8-A dan ARMv9.3-A.

### ARMv8.9-A dan ARMv9.4-A
Pada September 2022, ARMv8.9-A dan ARMv9.4-A telah diumumkan, termasuk: 

* Peningkatan Arsitektur Sistem Memori Virtual (VMSA).
** Izin *inderection* dan overlay
** Pengerasan terjemahan
** Tabel terjemahan 128-bit (khusus ARMv9)
* Ekstensi Matriks yang Dapat Diskalakan 2 (SME2) (khusus ARMv9)
** Instruksi multi-vektor
** Predikat multi-vektor
** Kompresi berat 2b/4b
** 1b jaringan biner
** Rentang Prefetch
* Guarded Control Stack (GCS) (khusus ARMv9)
* Komputasi Rahasia
** Konteks Enkripsi Memori
** Penugasan Perangkat

## Armv8-R (arsitektur ''real-time'')
Dukungan AArch64 opsional telah ditambahkan ke profil Armv8-R, dengan inti Arm pertama yang mengimplementasikannya ialah Cortex-R82. Itu menambahkan set instruksi A64, dengan beberapa perubahan pada instruksi penghalang memori.

## Referensi