ARMv8
読み:アーム-ヴィーエイト
外語:ARMv8
ARM
命令セットアーキテクチャーVersion 8のこと。64ビット対応を特徴とする。
目次
概要
特徴
64ビット化
フォーカス
技術
アドレス空間
命令セット
互換性
A64
条件付き実行
コア
概要
AArch64ステート
と
AArch32ステート
の2つのステート(実行モード)を持ち、新命令セット「A64」が定義される。
旧来のARM命令セットは「A32」、ARMの短縮命令セット
Thumb命令
は「T32」と呼ばれ、この二つはAArch32の命令セットである。AArch32は
ARMv7
の延長上にあり、ARMv8はARMv7を完全に内包するとしている。
64ビットARM搭載の最初の純正のコアは、Cortex-A50シリーズの
Cortex-A53
/
Cortex-A57
であり、これらは2013(平成25)年4月2日にテープアウト(設計完了)したと発表されている。
特徴
64ビット化
AArch64は、31本の64ビット汎用レジスターと、1本の
ゼロレジスター
、32本の128ビットメディアレジスターを持つ。
従来、汎用レジスターに割り付けられていた、
スタックポインター
(r13)、リンクレジスター(r14)、
プログラムカウンター
(r15)は
汎用レジスター
から分離され、
専用レジスター
が用意された。
汎用レジスターはx0からx30までの31本。レジスターが64ビット長になるのは
64ビットマイクロプロセッサー
として必然だが、この数が倍に増やされるのはメモリーなどへの退避を減らし効率を上げるためであると説明されている。
フォーカス
64ビット化されたARMv8は、まずサーバー用途をフォーカスしていた。
ARM公式のARM Cortexコアよりも前に、まずサードパーティー製の64ビットプロセッサーが細々とサーバー用途に使われ始めた段階であった。
それに対してAppleは、
Apple A7
として2013(平成25)年に初めてスマートフォン分野に持ち込んだ。他社も2014(平成26)年に市場投入予定だが、それまでは独走状態である。
技術
アドレス空間
48ビット(256Tiバイト)の
仮想アドレス空間
44ビットの
物理アドレス空間
(Cortex-A57の場合)
命令セット
ステート(実行モード)と命令セットは、次の種類を持つ。
AArch64ステート
A64 ‐ 64ビットの命令セット
AArch32ステート
A32(またはARM) ‐ 32ビットの従来の命令セット
T32(またはThumb) ‐
Thumb-2命令
セット
「A64」の
オペコード
自体は32ビットで、これに32ビットまたは64ビットの
オペランド
が続くことがある。つまり32ビット、64ビット、96ビットの3パターンでの不定長となる。
RISCなのに可変長にするあたり、相変わらずARMはRISCらしくない。
互換性
AArch64ステートに対応するOSは64ビットOSとなるが、ARMv8は従来の32ビット命令を全てサポートしている。
従って、ARMv8を用いた64ビットOSでも、従来の32ビットアプリケーションをそのまま動作させることができる。
A64
32ビットから始まったARMは、64ビット化に伴って命令セットを一新した。
64ビット化では、64ビット演算による高速化や、従来の32ビット(4Giバイト)を超えるメモリー空間が使えるようになるなどのメリットがある。
しかし64ビットARMの
AArch64ステート
にとってまず重要な高速化は、命令セットを一新したことがその最大の要因となっている。従来のARM命令セット(A32/T32)はRISCとは思えないほどに複雑だったが、今回の命令セット(A64)ではモダンなRISC風へと変更されたため、より高速な処理が可能となったようである。
また、RISCで16本のレジスター(うち汎用レジスターは13本)はかなり少ないが、A64では汎用レジスターが倍以上の31本に増やされ効率化したり、プログラムカウンターなどを専用レジスタ化したり、モードごとのレジスター切り替えなどを簡略化するなどして効率化したことも大きい。
条件付き実行
ARMアーキテクチャーの特徴となっていた条件付き実行は、分岐、比較、選択など特定の命令のみとなり、全命令に条件が付くことはない。
従来、条件付き命令を使えば
ユークリッドの互除法
が僅か4命令で処理できることが「売り」となっていたが、現実には条件付き命令はあまり使われていない機能であり、また分岐予測の設計も複雑にしていたという。
64ビット命令セット(A64)では、64ビット命令だが命令長は32ビット長とした。しかし、単純に考えても、レジスターが倍に増え4ビットから5ビットに増えており、2つのソースと1つのデスティネーションで計3ビット分を新規に確保する必要があったため、有用でなかったこの条件フィールドは削除され、命令は簡素化されることになった。
RISCらしくなかったARMが少しRISCらしくなった、とも言える。ARMの歴史上で最も大きな変革であると言える。
コア
ARM Cortex
ARMv8-A
Cortex-A50シリーズ
Cortex-A53
(開発コードネームApollo)
Cortex-A57
(開発コードネームAtlas)
ARMv8-R
(ARMv8-M) (現時点では未発表)
再検索