AArch64
![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/ARMCortexA57A53.jpg/256px-ARMCortexA57A53.jpg)
AArch64 o ARM64 és l'extensió de 64 bits de la família d'arquitectures ARM.
Es va introduir per primera vegada amb l'arquitectura Armv8-A. Arm llança una nova extensió cada any.[1]
Extensions i funcions ARMv8.x i ARMv9.x
Anunciat l'octubre de 2011, ARMv8-A representa un canvi fonamental a l'arquitectura ARM. Afegeix una arquitectura opcional de 64 bits, anomenada "AArch64", i el nou conjunt d'instruccions "A64" associat. AArch64 proporciona compatibilitat amb l'espai d'usuari amb l'arquitectura de 32 bits existent ("AArch32" / ARMv7-A) i el conjunt d'instruccions ("A32"). El conjunt d'instruccions Thumb de 16-32 bits s'anomena "T32" i no té una contrapartida de 64 bits. ARMv8-A permet executar aplicacions de 32 bits en un sistema operatiu de 64 bits i un sistema operatiu de 32 bits sota el control d'un hipervisor de 64 bits.[2] ARM va anunciar els seus nuclis Cortex-A53 i Cortex-A57 el 30 d'octubre de 2012. Apple va ser la primera a llançar un nucli compatible amb ARMv8-A (Cyclone) en un producte de consum (iPhone 5S). AppliedMicro, utilitzant una FPGA, va ser el primer a fer una demostració d'ARMv8-A. El primer SoC ARMv8-A de Samsung és l'Exynos 5433 utilitzat al Galaxy Note 4, que inclou dos grups de quatre nuclis Cortex-A57 i Cortex-A53 en un gran.PETIT configuració; però només s'executarà en mode AArch32.[3]
Tant per a AArch32 com per a AArch64, ARMv8-A fa que VFPv3/v4 i SIMD avançat (Neon) sigui estàndard. També afegeix instruccions de criptografia compatibles amb AES, SHA-1/SH-256 i aritmètica de camps finits.[4]
ARMv8.1-A
El desembre de 2014, ARMv8.1-A [5] es va anunciar una actualització amb "avantatges incrementals respecte a la v8.0". Les millores es divideixen en dues categories: canvis al conjunt d'instruccions i canvis al model d'excepció i la traducció de memòria.
Les millores del conjunt d'instruccions inclouen les següents:
- Un conjunt d'instruccions de lectura-escriptura atòmiques AArch64.
- Addicions al conjunt d'instruccions SIMD avançades tant per a AArch32 com per a AArch64 per habilitar oportunitats per a algunes optimitzacions de biblioteca:
- Signat Saturació Arrodonit Doblar Multiplicar Acumular, retornant la meitat alta.
- Signat Saturació Arrodonit Doblament Multiplicació Resta, retornant la meitat alta.
- Les instruccions s'afegeixen en formes vectorials i escalars.
- Un conjunt d'instruccions de càrrega i emmagatzematge AArch64 que poden proporcionar un ordre d'accés a la memòria limitat a regions d'adreces configurables.
- Les instruccions CRC opcionals de la v8.0 esdevenen un requisit a ARMv8.1.
ARMv8.2-A
El gener de 2016, es va anunciar ARMv8.2-A.[6] Les seves millores es divideixen en quatre categories:
- Processament de dades de punt flotant de mitja precisió opcional (la mitja precisió ja era compatible, però no per al processament, només com a format d'emmagatzematge).
- Millores del model de memòria
- Introducció de l'extensió de fiabilitat, disponibilitat i servei (extensió RAS)
- Introducció de perfils estadístics
ARMv8.3-A
L'octubre de 2016, es va anunciar ARMv8.3-A. Les seves millores es divideixen en sis categories: [7]
- Autenticació de punter (només AArch64); extensió obligatòria (basada en un nou xifratge de blocs, QARMA) a l'arquitectura (els compiladors necessiten explotar la funció de seguretat, però com que les instruccions es troben a l'espai NOP, són compatibles cap enrere encara que no proporcionen seguretat addicional als xips més antics).
- Virtualització imbricada (només AArch64)
- Suport avançat de números complexos SIMD (AArch64 i AArch32); per exemple, rotacions per múltiples de 90 graus.
- Nova instrucció FJCVTZS (Converteix JavaScript de coma flotant a punt fix signat, arrodonint cap a zero).
- Un canvi al model de consistència de memòria (només AArch64); per donar suport al model RCpc (no predeterminat) més feble (processador coherent de llançament) de C++11/C11 (el model de coherència C++11/C11 per defecte ja era compatible amb l'ARMv8 anterior).
- Suport del mecanisme d'identificació per a memòria cau més grans visibles al sistema (AArch64 i AArch32)
ARMv8.4-A
El novembre de 2017, es va anunciar ARMv8.4-A. Les seves millores van caure en aquestes categories: [8][9][10]
- "Extensions criptogràfiques SHA3 / SHA512 / SM3 / SM4 "
- Suport de virtualització millorat
- Capacitats de monitorització i particions de memòria (MPAM).
- Un nou estat segur EL2 i monitors d'activitat
- Instruccions de producte de punts enters signats i sense signar (SDOT i UDOT).
ARMv8.5-A i ARMv9.0-A
El setembre de 2018, es va anunciar ARMv8.5-A. Les seves millores van caure en aquestes categories: [11][12][13]
- Extensió d'etiquetatge de memòria (MTE)
- Indicadors d'objectiu de branca (BTI) per reduir "la capacitat d'un atacant per executar codi arbitrari",
- Instruccions del generador de números aleatoris: "proporciona números aleatoris deterministes i veritables conformes a diversos estàndards nacionals i internacionals"
ARMv8.6-A i ARMv9.1-A
El setembre de 2019, es va anunciar ARMv8.6-A. Les seves millores van caure en aquestes categories: [14][15]
- Multiplicació de matrius generals (GEMM)
- suport de format bfloat16
- Instruccions de manipulació de matrius SIMD, BFDOT, BFMMLA, BFMLAL i BFCVT
- millores per a la virtualització, la gestió del sistema i la seguretat
- i les següents extensions (que LLVM 11 ja va afegir suport per a [16]):
- Virtualització de comptador millorada (ARMv8.6-ECV)
- Trampes de gra fi (ARMv8.6-FGT)
- Virtualització de monitors d'activitat (ARMv8.6-AMU)
ARMv8.7-A i ARMv9.2-A
El setembre de 2020, es va anunciar ARMv8.7-A. Les seves millores van caure en aquestes categories: [17][18]
- Extensió de matriu escalable (SME) (només ARMv9.2). SME afegeix noves funcions per processar matrius de manera eficient, com ara:
- Emmagatzematge de rajoles Matrix
- Transposició de matrius sobre la marxa
- Carregar/emmagatzemar/inserir/extreure vectors de rajoles
- Producte exterior de la matriu de vectors SVE
- "Mode de streaming" SVE
- Suport millorat per a connexió en calent PCIe (AArch64)
- Càrrega atòmica de 64 bytes i emmagatzematge als acceleradors (AArch64)
- Wait For Instruction (WFI) i Wait For Event (WFE) amb temps d'espera (AArch64)
- Enregistrament Branch-Record (només ARMv9.2)
ARMv8.8-A i ARMv9.3-A
El setembre de 2021, es van anunciar ARMv8.8-A i ARMv9.3-A. Les seves millores van caure en aquestes categories: [19][20]
- Interrupcions no emmascarables (AArch64)
- Instruccions per optimitzar les operacions d'estil memcpy() i memset() (AArch64)
- Millores al PAC (AArch64)
- Branques condicionals indicades (AArch64)
ARMv8.9-A i ARMv9.4-A
El setembre de 2022, es van anunciar ARMv8.9-A i ARMv9.4-A, incloent: [21]
- Millores de l'arquitectura del sistema de memòria virtual (VMSA).
- Permisos indirectes i superposicions
- Enduriment de la traducció
- Taules de traducció de 128 bits (només ARMv9)
- Extensió de matriu escalable 2 (SME2) (només ARMv9)
- Instruccions multi-vector
- Predicats multi-vectors
- Compressió de pes 2b/4b
- 1b xarxes binàries
- Recollida prèvia de rang
- Pila de control vigilat (GCS) (només ARMv9)
- Informàtica confidencial
- Contextos de xifratge de memòria
- Assignació del dispositiu
Referències
- ↑ «Overview» (en anglès). Learn the architecture: Understanding the Armv8.x and Armv9.x extensions.
- ↑ Grisenthwaite, Richard. «ARMv8-A Technology Preview» (en anglès). Arxivat de l'original el 11 November 2011. [Consulta: 31 octubre 2011].
- ↑ «Samsung's Exynos 5433 is an A57/A53 ARM SoC» (en anglès). AnandTech. [Consulta: 17 setembre 2014].
- ↑ «ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension» (en anglès). ARM. [Consulta: 11 setembre 2016].
- ↑ Brash, David. «The ARMv8-A architecture and its ongoing development» (en anglès), 2 December 2014. [Consulta: 23 gener 2015].
- ↑ Brash, David. «ARMv8-A architecture evolution» (en anglès), 05-01-2016. [Consulta: 7 juny 2016].
- ↑ David Brash. «ARMv8-A architecture – 2016 additions» (en anglès), 26-10-2016.
- ↑ «Introducing 2017's extensions to the Arm Architecture» (en anglès). community.arm.com. [Consulta: 15 juny 2019].
- ↑ «Exploring dot product machine learning» (en anglès). community.arm.com. [Consulta: 15 juny 2019].
- ↑ «ARM Preps ARMv8.4-A Support For GCC Compiler – Phoronix» (en anglès). www.phoronix.com. [Consulta: 14 gener 2018].
- ↑ «ARMv8.x and ARMv9.x extensions and features» (en anglès). Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions.
- ↑ «Arm Architecture ARMv8.5-A Announcement – Processors blog – Processors – Arm Community» (en anglès). community.arm.com. [Consulta: 26 abril 2019].
- ↑ «Arm Architecture Reference Manual ARMv8, for ARMv8-A architecture profile» (en anglès). ARM Developer. [Consulta: 6 agost 2019].
- ↑ «ARMv8.x and ARMv9.x extensions and features» (en anglès). Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions.
- ↑ «Arm A profile architecture update 2019» (en anglès). community.arm.com. [Consulta: 26 setembre 2019].
- ↑ «LLVM 11.0.0 Release Notes» (en anglès). releases.llvm.org. [Consulta: 11 març 2021].
- ↑ «ARMv8.x and ARMv9.x extensions and features» (en anglès). Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions.
- ↑ Weidmann, Martin. «Arm A-Profile Architecture Developments 2020» (en anglès). community.arm.com. ARM, 21-09-2020. [Consulta: 28 setembre 2022].
- ↑ «ARMv8.x and ARMv9.x extensions and features» (en anglès). Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions.
- ↑ Weidmann, Martin. «Arm A-Profile Architecture Developments 2021» (en anglès). community.arm.com. ARM, 08-09-2021. [Consulta: 28 setembre 2022].
- ↑ «Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community» (en anglès). community.arm.com. [Consulta: 9 desembre 2022].