AArch64とは - わかりやすく解説 Weblio辞書 (original) (raw)

ARMv8 Cortex-A57/A53 MPCore big.LITTLE CPUチップ

AArch64(ARM Architecture 64-bit)またはARM64は、ARMアーキテクチャの64ビット命令セットである。

最初に、ARMv8-A(英語版)として導入された。Armは毎年新しい拡張機能をリリースしている[1]

概要

ARMv8-Aから採用されたAArch64アーキテクチャでは、汎用レジスタが全て64ビットとなり、レジスタの数も16個から31個に増加している。サーバ用途を考慮して、仮想化支援命令や暗号支援命令が追加され、SIMD拡張命令であるNEONも大幅に強化されている。

命令セットの特徴

汎用レジスタの増加と64ビット化に伴い、命令セットは完全に再定義されている。コード効率を重視し、命令長は32ビットのままに保たれ、32ビットARMの特徴であった条件付き実行命令の大半は削除された。これにより、一般的なRISC命令セットに近づいたが、依然としてコードサイズを小さくするための工夫が随所に施されている。

AArch64モードにおける命令セットはA64と呼ばれ、その特徴は以下の通りである。

即値シフト付きオペランドは、従来の32ビットARM命令セットにおいて「フレキシブル第2オペランド(Flexible second operand)」と呼ばれていたものに相当する。多くの基本的な演算命令では、入力オペランドの1つに対して即値左シフト、即値論理右シフト、即値算術右シフト、シフトなしの4つから選択することができ、演算命令と即値シフト命令を一体化できる。ただし、従来とは異なりローテートはサポートされていない。

汎用レジスタの数が倍増したため、多くの基本命令から条件付き実行機能は削除されたが、それでも比較的豊富な条件付き実行命令が定義されている。代表的なものには、条件付き比較(CCMP)、条件付きインクリメント(CINC)、条件付き選択(CSEL; いわゆるCMOV)などが存在する。

Compare-and-Branch命令では、PC相対分岐においてゼロフラグを参照する場合に限り、比較と条件分岐を1命令で行うことが可能である(CBZ/CBNZ)。これは従来のThumb-2命令セットでのみ定義されていたもので、A64モードでは基本命令として定義されている。

符号拡張/ゼロ拡張付き命令では、算術演算や比較命令において、入力オペランドの1つを8、16、32ビットから32または64ビットに符号/ゼロ拡張するバージョンが用意されている。

汎用レジスタは64ビット幅であるが、多くの演算命令にはレジスタの下位32ビットのみを参照する32ビット命令が用意されている。この場合、レジスタの部分書き換えが発生しないように、演算結果の32ビットの値は暗黙のゼロ拡張が行われた上で64ビットレジスタに格納される。

Advanced SIMD and Floating-point 命令

A64命令セットでは、従来のVFPとAdvanced SIMD(NEON)が統合され、1つの命令体系となった。これにより、名称はAdvanced SIMD and Floating-point命令と呼ばれるようになった。

主な変更点は、倍精度浮動小数点演算への対応、IEEE754への準拠、レジスタ本数の増加の3点である。レジスタについては、128ビットのレジスタが32本に増加しており、依然として64ビットレジスタとしてアクセスすることも可能であるが、64ビットレジスタは128ビットレジスタの下位64ビットにマッピングされている。

VFPとAdvanced SIMDの統合に伴い、従来はVFPが担っていたスカラの浮動小数点演算命令は、SIMDレジスタのうち下位の32/64ビットにのみ作用する命令として再定義されている。例えば浮動小数点加算命令については

fadd s2, s1, s0 ; s2 <= s0 + s1(単精度スカラ) fadd d2, d1, d0 ; d2 <= d0 + d1(倍精度スカラ) fadd v2.4s, v1.4s, v0.4s ; [v2] <= [v0] + [v1](単精度x4 SIMD) fadd v2.2d, v1.2d, v0.2d ; [v2] <= [v0] + [v1](倍精度x2 SIMD)

のようなバリエーションが命令のニーモニックを保ちつつ、オペランドのプレフィックス (s, d, v) とサフィックスを変更することによって記述可能になっている(サフィックスについては、一部の環境向けのアセンブラではニーモニック側に付加する省略記法も許されるようである)。これはx86プロセッサのSSE命令セットがスカラ命令とSIMD命令の双方を備えているのとよく似ている。

Scalable Vector Extension

Scalable Vector Extension (SVE) は、Armv8.2-Aで追加されたSIMD命令セット。富岳に使われたA64FXArm Neoverse V1[2](AWS Graviton3[3])などで実装されている[4]。次の特徴がある[4]

Scalable Vector Extension 2 (SVE2) は、Armv9.0-Aで追加されたSIMD命令セット[5]。SVEを発展させて汎用化し[6]、Advanced SIMD (NEON)のスーパーセットとなった[7]。SVEとは異なり、SVE2はArmv9-Aでは実装が必須となり[8]、Arm Cortex-X2等で実装されている[9]。ただし、Arm Cortex-X2, X3, X4, Neoverse V2で採用しているベクトル長はAdvanced SIMDと同じく128ビットで、特に長くはしていない[10][11][12][13]

Scalable Matrix Extension

Scalable Matrix Extension (SME) は、Armv9.2-Aで追加されたSIMD命令セット。Scalable Vector Extension は(1次元)ベクトルを対象とするのに対して、Scalable Matrix Extension は(2次元)行列を対象とする[14]。Apple M4等で実装されていて[15]、Apple M4はベクトル長として512ビットを採用[16]

Scalable Matrix Extension 2 (SME2) は、Armv9.3-Aで追加されたSIMD命令セット。Arm C1 CPU などで実装されている。[17][18]

Scalable Matrix Extension 2.1 (SME2.1) は、Armv9.4-Aで追加されたSIMD命令セット。[19]

Armv8.xおよびArmv9.x拡張機能

2011年10月に発表された[20] Armv8-Aは、ARMアーキテクチャの根本的な変化を示した。これは、「AArch64」という名前のオプションの64ビットアーキテクチャと、関連する新しい「A64」命令セットを追加した。AArch64は、既存の32ビットアーキテクチャ("AArch32"/ARMv7-A)および命令セット("A32")とのユーザースペース互換性を提供する。16ビットのThumb命令セットは「T32」と呼ばれ、64ビットの命令セットがない。Armv8-Aを使用すると、32ビットアプリケーションを64ビットOSで実行し、32ビットOSを64ビットハイパーバイザーの制御下に置くことができる[21]。ARMは、2012年10月30日にCortex-A53およびCortex-A57コアを発表した[22]

Appleは、消費者向け製品(iPhone 5s)でArmv8-A互換コア(Cyclone)を最初にリリースした。AppliedMicroは、シリコンチップ化される前のArmv8-A アーキテクチャをFPGAに構築し、64ビットLinuxを実行する最初のデモを行った[23]Samsungの最初のArmv8-A SoCは、Galaxy Note 4で使用されているExynos 5433であり、big.LITTLE構成の4つのCortex-A57コアとCortex-A53コアの2つのクラスターを備えている。ただし、AArch32モードでのみ実行される[24]

AArch32とAArch64の両方に対して、Armv8-AはVFPv3/v4とAdvanced SIMD (NEON)を標準としている。また、AESSHA-1/SHA-256、および有限体演算(英語版)をサポートする暗号化命令も追加する[25]

命名規則

AArch64の機能

拡張:データ収集のヒント(Armv8.0-DGH)

AArch64はArmv8-Aで導入され、後続のバージョンに含まれている。AArch64は、Armv8-Aへの導入後にオプションとしてArmv8-Rにも導入された。Armv8-Mには含まれていない。

命令エンコード

A64命令は以下の表のビットアサインに基づいてエンコードされる。命令はグルーピングされており、主にビット25から28が命令の所属グループを表現している。

A64命令エンコード[27]

タイプ ビット
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 0000 op1
SME命令 1 op0 0000 op1 op2 op3
未割当 0001
SVE命令 op0 0010 op1 op2 op3 op4
未割当 0011
データ処理(即値) 100 op0
分岐/例外生成/システム命令 op0 101 op1 op2
ロード・ストア命令 op0 1 op1 0 op2 op3 op4
データ処理(レジスタ) op0 op1 101 op2 op3
データ処理(浮動小数/SIMD) op0 111 op1 op2 op3

Armv8.1-A

2014年12月、「v8.0を超える増分メリット」をもたらすアップデートであるArmv8.1-A[28]が発表された。拡張機能は2つのカテゴリ、すなわち命令セットの変更、および例外モデルとメモリ変換の変更に分類される。

命令セットの機能強化には、次のものが含まれる。

例外モデルとメモリ変換システムの機能強化には、次のものが含まれる。

Armv8.2-A

2016年1月、Armv8.2-Aが発表された[30]。その機能強化は、次の4つのカテゴリに分類される。

Scalable Vector Extension(SVE)

スケーラブルベクター拡張機能(SVE)は、特にハイパフォーマンスコンピューティングの科学的ワークロードのベクトル化のために開発された「Armv8.2-Aアーキテクチャ以降のオプションの拡張機能」である[31][32]。この仕様では、128から2048ビットの可変ベクトル長を実装できる。当初は、この拡張機能は、NEON拡張機能を補完するものであり、これに置き換わるものではなかったが、SVE2からはNEONのスーパーセットとなった[33]

512ビットのSVEの一種は、富士通A64FX ARMプロセッサを使用して富岳スーパーコンピュータに実装されている。富岳は、2021年に本格稼働を開始し、当時世界最高性能のスーパーコンピュータとなった[34]

SVEはGCCコンパイラによってサポートされており、GCC 8は自動ベクトル化をサポートし[32]、GCC10はC組み込み関数をサポートしている。2020年7月の時点で、LLVMclangはCとIRの組み込み関数をサポートしている。ARM独自のLLVMフォークは、自動ベクトル化をサポートしている[35]

Armv8.3-A

2016年10月、Armv8.3-Aが発表された。その機能強化は6つのカテゴリに分類される[36]

Armv8.3-Aアーキテクチャは(少なくとも)GCC7コンパイラでサポートされるようになった[40]

Armv8.4-A

2017年11月、Armv8.4-Aが発表された。この拡張機能は次のカテゴリに分類される[41][42][43]

Armv8.5-AおよびArmv9.0-A[44]

2018年9月、Armv8.5-Aが発表された。その拡張機能は次のカテゴリに分類される[45][46]

2019年8月2日、GoogleAndroidがMemory Tagging Extension(MTE)を採用すると発表した。[48]

2021年3月、Armv9-Aが発表された。Armv9-Aのベースラインは、Armv8.5のすべての機能である[49][50][51]。Armv9-Aは以下も追加している。

Armv8.6-AおよびArmv9.1-A[44]

2019年9月、Armv8.6-Aが発表された。その拡張機能は次のカテゴリに分類される[56]

たとえば、きめ細かいトラップ、Wait-for-Event(WFE)命令、EnhancedPAC2、FPACなどがある。SVEおよびNEONのBfloat16拡張機能は、主に深層学習で使用するためのものである[58]

Armv8.7-AおよびArmv9.2-A[44]

2020年9月、Armv8.7-Aが発表された。

Armv8.8-AおよびArmv9.3-A[44]

2021年9月、Armv8.8-AおよびArmv9.3-Aが発表された。

Armv8.9-AおよびArmv9.4-A[44]

2022年9月、ARMv8.9-AとARMv9.4-Aが発表された。[60]

Armv9.5-A[61]

2023年10月、ARMv9.5-Aが発表された。

Armv9.6-A[62]

2024年10月、ARMv9.6-Aが発表された。

Armv9.7-A

2025年9月、ARMv9.7-Aが発表された。

Armv8-R(リアルタイムアーキテクチャ)

オプションのAArch64サポートがArmv8-Rプロファイルに追加され、最初のARMコアがCortex-R82を実装した[63]。A64命令セットが追加され、メモリバリア命令にいくつかの変更が加えられている[64]

脚注

  1. ^Overview”. Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 2022年8月24日閲覧。
  2. ^Neoverse V1”. 2024年6月12日閲覧。
  3. ^Faster ML inference with AWS Graviton3”. community.arm.com. 2024年6月12日閲覧。
  4. ^ a bARM、Hot ChipsでHPC用のスケーラブル・ベクトル拡張を公表”. HPCwire Japan (2016年8月28日). 2022年1月2日閲覧。
  5. ^Overview - Learn the architecture - Introducing SVE2”. 2024年6月2日閲覧。
  6. ^ 株式会社インプレス (2021年3月31日). “Arm、10年ぶりの新アーキテクチャ「Armv9」。富岳のSVE改良版やコンフィデンシャルコンピューティング機能追加”. PC Watch. 2022年1月2日閲覧。
  7. ^Learn the architecture - Introducing SVE2”. 2024年6月2日閲覧。
  8. ^machine/arch-armv9: remove crc and sve tunes, they are mandatory - Patchwork”. patchwork.yoctoproject.org. 2024年6月12日閲覧。
  9. ^The Cortex-X2: More Performance, Deeper OoO - Arm Announces Mobile Armv9 CPU Microarchitectures: Cortex-X2, Cortex-A710 & Cortex-A510”. 2024年6月1日閲覧。
  10. ^Arm Cortex‑X2 Core Technical Reference Manual”. 2024年6月1日閲覧。
  11. ^Arm Cortex-X3 Core Technical Reference Manual”. 2024年6月1日閲覧。
  12. ^Arm Cortex-X4 Core Technical Reference Manual”. 2024年6月1日閲覧。
  13. ^Arm Neoverse V2 Core Software Optimization Guide”. 2024年6月2日閲覧。
  14. ^Scalable Matrix Extension for the Armv9-A Architecture”. community.arm.com. 2024年5月31日閲覧。
  15. ^Overview | Hello SME documentation”. scalable.uni-jena.de. 2024年6月1日閲覧。
  16. ^Vector Length - Microbenchmarks | Hello SME documentation”. scalable.uni-jena.de. 2024年6月1日閲覧。
  17. ^Arm A-Profile Architecture Developments 2022”. community.arm.com. 2024年5月31日閲覧。
  18. ^Arm C1-Premium CPU - サブプレミアムモバイルSoC向けのサブフラッグシップCPU – Arm”. 2025年10月6日閲覧。
  19. ^The Armv9.4 architecture extension - Feature names in A-profile architecture”. 2025年10月6日閲覧。
  20. ^ “ARM Discloses Technical Details Of The Next Version Of The ARM Architecture” (Press release). Arm Holdings. 27 October 2011. 2019年1月1日時点のオリジナルよりアーカイブ. 2013年9月20日閲覧.
  21. ^ Grisenthwaite (2011年). “ARMv8-A Technology Preview”. 2011年11月11日時点のオリジナルよりアーカイブ。2011年10月31日閲覧。
  22. ^ “ARM Launches Cortex-A50 Series, the World's Most Energy-Efficient 64-bit Processors” (Press release). Arm Holdings. 2012年10月31日閲覧.
  23. ^ “AppliedMicro Showcases World's First 64-bit ARM v8 Core” (Press release). AppliedMicro. 28 October 2011. 2014年2月11日閲覧.
  24. ^Samsung's Exynos 5433 is an A57/A53 ARM SoC”. AnandTech. 2014年9月17日閲覧。
  25. ^ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension”. ARM. 2016年9月11日閲覧。
  26. ^Cortex-A32 Processor – ARM”. 2016年12月18日閲覧。
  27. ^Top-level encodings for A64 - Arm A-profile A64 Instruction Set Architecture”. ARM. 2022年5月8日閲覧。
  28. ^ Brash (2014年12月2日). “The ARMv8-A architecture and its ongoing development”. 2015年1月23日閲覧。
  29. ^Top-byte ignore (TBI)”. WikiChip. 2022年7月17日閲覧。
  30. ^ Brash (2016年1月5日). “ARMv8-A architecture evolution”. 2016年6月7日閲覧。
  31. ^ “The scalable vector extension sve for the Armv8 a architecture” (英語). Arm Community. (2016年8月22日). https://community.arm.com/processors/b/blog/posts/technology-update-the-scalable-vector-extension-sve-for-the-armv8-a-architecture 2018年7月8日閲覧。
  32. ^ a bGCC 8 Release Series – Changes, New Features, and Fixes – GNU Project – Free Software Foundation (FSF)” (英語). gcc.gnu.org. 2018年7月9日閲覧。
  33. ^Learn the architecture - Introducing SVE2”. 2024年6月1日閲覧。
  34. ^ “Fujitsu Completes Post-K Supercomputer CPU Prototype, Begins Functionality Trials – Fujitsu Global” (Press release) (英語). 2018年7月8日閲覧.
  35. ^⚙ D71712 Downstream SVE/SVE2 implementation (LLVM)”. reviews.llvm.org. 2020年9月5日閲覧。
  36. ^ David Brash (2016年10月26日). “ARMv8-A architecture – 2016 additions”. 2022年7月17日閲覧。
  37. ^[Ping~,AArch64 Add commandline support for -march=armv8.3-a]”. 2022年8月24日閲覧。 “pointer authentication extension is defined to be mandatory extension on ARMv8.3-A and is not optional”
  38. ^Qualcomm releases whitepaper detailing pointer authentication on ARMv8.3” (2017年1月10日). 2022年8月24日閲覧。
  39. ^A64 Floating-point Instructions: FJCVTZS”. arm.com. 2019年7月11日閲覧。
  40. ^GCC 7 Release Series – Changes, New Features, and Fixes”. 2022年8月24日閲覧。 “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.”
  41. ^Introducing 2017's extensions to the Arm Architecture” (英語). community.arm.com. 2019年6月15日閲覧。
  42. ^Exploring dot product machine learning” (英語). community.arm.com. 2019年6月15日閲覧。
  43. ^ARM Preps ARMv8.4-A Support For GCC Compiler – Phoronix” (英語). www.phoronix.com. 2018年1月14日閲覧。
  44. ^ a b c d eArmv8.x and Armv9.x extensions and features”. Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 2022年5月4日閲覧。
  45. ^Arm Architecture Armv8.5-A Announcement – Processors blog – Processors – Arm Community” (英語). community.arm.com. 2019年4月26日閲覧。
  46. ^Arm Architecture Reference Manual Armv8, for Armv8-A architecture profile” (英語). ARM Developer. 2019年8月6日閲覧。
  47. ^Arm MTE architecture: Enhancing memory safety” (英語). community.arm.com. 2021年7月27日閲覧。
  48. ^Adopting the Arm Memory Tagging Extension in Android” (英語). Google Online Security Blog. 2019年8月6日閲覧。
  49. ^Arm's solution to the future needs of AI, security and specialized computing is v9” (英語). Arm | The Architecture for the Digital World. 2021年7月27日閲覧。
  50. ^ Schor (2021年3月30日). “Arm Launches ARMv9” (英語). WikiChip Fuse. 2021年7月27日閲覧。
  51. ^ Frumusanu. “Arm Announces Armv9 Architecture: SVE2, Security, and the Next Decade”. www.anandtech.com. 2021年7月27日閲覧。
  52. ^ a b cArm releases SVE2 and TME for A-profile architecture – Processors blog – Processors – Arm Community” (英語). community.arm.com. 2019年5月25日閲覧。
  53. ^ a bArm SVE2 Support Aligning For GCC 10, LLVM Clang 9.0 – Phoronix”. www.phoronix.com. 2019年5月26日閲覧。
  54. ^Unlocking the power of data with Arm CCA” (英語). community.arm.com. 2021年7月27日閲覧。
  55. ^Arm Introduces Its Confidential Compute Architecture” (英語). WikiChip Fuse (2021年6月23日). 2021年7月27日閲覧。
  56. ^Arm A profile architecture update 2019” (英語). community.arm.com. 2019年9月26日閲覧。
  57. ^LLVM 11.0.0 Release Notes”. releases.llvm.org. 2021年3月11日閲覧。
  58. ^BFloat16 extensions for Armv8-A” (英語). community.arm.com. 2019年8月30日閲覧。
  59. ^Scalable Matrix Extension for the Armv9-A Architecture” (英語). community.arm.com. 2021年7月27日閲覧。
  60. ^Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community” (英語). community.arm.com. 2022年12月9日閲覧。
  61. ^Arm A-Profile Architecture Developments 2023 - Architectures and Processors blog - Arm Community blogs - Arm Community” (英語). community.arm.com (2023年10月5日). 2025年1月23日閲覧。
  62. ^Arm A-Profile Architecture Developments 2024 - Architectures and Processors blog - Arm Community blogs - Arm Community” (英語). community.arm.com (2024年10月1日). 2025年1月23日閲覧。
  63. ^ Frumusanu (2020年9月3日). “ARM Announced Cortex-R82: First 64-bit Real Time Processor”. AnandTech. 2022年7月17日閲覧。
  64. ^Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile”. Arm Ltd. 2022年7月17日閲覧。
プロセッサアーキテクチャ
CISC 過去 MC6800 MC68000 TRONCHIP PDP VAX 現行 x86 IA-32 x64 AMD64 Intel 64 z/Architecture
RISC 過去 Alpha AMD Am29000 Apollo PRISM PA-RISC IA-64 Intel i960 MC88000 現行 ARM AArch32 AArch64 Atmel AVR Atmel AVR32 Analog Devices Blackfin DLX LatticeMico8 LatticeMico32 M32R MicroBlaze MIPS Altera Nios II OpenRISC PicoBlaze PIC Power RISC-V SPARC SuperH