ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
ARMアーキテクチャの実行モードのうち、ARMv8(及びそれ以降)における64ビットのステート(動作モード)。
従来のAArch32と、命令のフォーマットやレジスター構成、例外処理モデルなどを大きく変更している。
AArch64で採用された命令セットを「A64」という。
AArch64では、64ビット命令により、64ビットの仮想アドレス空間を提供する能力を持つ。
実際の性能はプロセッサーの設計次第で、例えばARM Cortex-A57では、64ビット仮想アドレス(実際に使用しているのはうち48ビット)と、44ビットの物理メモリー空間(16Tiバイト)が提供されている。
AArch64は、大容量メモリーが必要なサーバー用途も想定されているようだが、実際にAArch64(ARMv8)を最初に大々的に導入したのは、Appleのスマートフォン用プロセッサーApple A7だった。
AArch64は2つのステート(実行モード)を持ち、合わせて三つの命令セットを持つ。
後方互換性のため、従来のAArch32ステートの機能を持っている。
64ビット化したからといって、命令長も64ビット化すると、単純に考えてコードサイズはおよそ倍に増大することになり、また命令フェッチの非効率化などの悪影響が想定される。
しかしAArch64の命令セットA64では、命令は従来同様32ビット長に抑えられた。従って、コードサイズが倍になったりすることはない。
従来の32ビット命令は全ての命令に条件が付けられるなどしており、効率面では決して良くはなかった。
A64では、シンプルな命令体系となり、効率的になった。さらに命令デコーダーを2系列持ち、効率的な動作を支援する。
旧Arch32では、レジスターが16本(うち汎用レジスターは13本)だったが、AArch64では、汎用レジスターは倍以上の31本に増えた。RISCで16本は少なかったが、これを増やすことで効率的な動作を実現する。
レジスター数が増えると、コンパイラーの出力する処理も効率的となり、実行速度の高速化が期待できる。
また、旧Arch32は例外モードが多数あり、例外モードごとに汎用レジスターをバンク切り替えするという仕様があったが、AArch64ではこれも廃止した。AArch64にはバンキングはなく、これも効率的な動作に貢献する。
レジスター名は、英字1文字に番号を付して呼ぶ。
レジスター31は、殆どの状況で、ゼロレジスターとして機能する。つまり、読めばゼロ、書いた内容は破棄される。
ロード/ストアのベースレジスターとして使用される場合と、一部の算術演算命令でのみ、レジスター31は現在のモードのスタックポインターを参照する。割り込み処理など、動作モードが切り替わる際に、CPUは自動的にスタックポインターを切り替える。
例えばADD命令はsrcまたはdstにSPが指定可能で、スタックポインターへの代入は次のように書くことができる。
ADD SP, Xn, #0
アセンブリ言語においては、次のように書くことができる。
MOV SP, Xn
これはエイリアスであり、アセンブルした際には「ADD SP, Xn, #0」のコードが出力される。
V0からV31までのレジスターバンクがあり、次のように名前を付けて用いる。
nは0から31まで
nは0から31まで
A64では、殆どの整数命令で32ビット演算と64ビット演算が可能。
アセンブリ言語での表現では、整数演算でレジスターをWnと書けば32ビット演算、Xnと書けば64ビット演算となる。
レジスターバンク自体は64ビットであるが、32ビット演算を用いた場合、次のように動作する。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます