マニュアルを読みながら、RVA23U64のプロファイルについてまとめていこう。
RVA23U64プロファイル
RVA23U64プロファイルは、64ビットアプリケーションプロセッサのユーザーモード実行環境で利用可能なISA機能を規定する。 本プロファイルは、アプリケーションプロセッサファミリの中で最も多くのソフトウェアがターゲットとする、最重要プロファイルである。
RVA23U64 Mandatory Base
- RV64IはRVA23U64の Mandatory Base ISAであり、リトルエンディアンである。
- Unprivileged アーキテクチャ仕様に従い、
ECALL命令は実行環境へのトラップを要求する。
必須拡張
RVA22U64で必須だった以下の拡張が含まれる。
- M: 整数の乗算・除算命令
- A: アトミック命令
- F: 単精度浮動小数点命令
- D: 倍精度浮動小数点命令
- C: 圧縮命令
- B: ビット操作命令
- Zicsr: CSR命令(F拡張の存在により暗黙的に含まれる)
- Zicntr: 基本的なカウンタとタイマー
- Zihpm: ハードウェア・パフォーマンス・カウンタ
- Ziccif: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、命令フェッチをサポートする必要があり、min(ILEN,XLEN) までの自然整列された 2 のべき乗サイズの命令フェッチ(つまり、RVA23 では 32 ビット)はアトミックでなければならない。
- ちゃんとしたドキュメントがない。
- ちなみに、ILENというのは最大命令長であり、だいたいの場合はILEN=32である。
- Ziccrse: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、RsrvEventualをサポートしなければならない
- RsrvEventualというのは、PMAの一つで、LR/SC(Load-Reserved/Store-Conditional)命令のサポートレベルを表す属性である。
- RsrvNone
- LR/SC がまったくサポートされない(予約操作自体が不可)。
- RsrvNonEventual
- LR/SC はサポートするが、「成功の保証(eventual success)」はない。周辺の競合状態が続くと、SC が何度実行しても成功しない可能性がある。
- RsrvEventual
- LR/SC をサポートし、かつ「最終的には成功が保証される」ことを意味する。すなわち、他のエージェントによる書き込み競合がなければ、SC はいずれ成功することがハードウェア的に保証される
- RsrvNone
- RsrvEventualというのは、PMAの一つで、LR/SC(Load-Reserved/Store-Conditional)命令のサポートレベルを表す属性である。
- Ziccamoa: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、A拡張の全アトミック命令をサポートしなければならない
- Zicclsm: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域へのミスアラインロード・ストアをサポートしなければならない
- Za64rs: 予約セットは連続し、自然にアラインされ、最大64バイトである
- LR/SC(Load-Reserved/Store-Conditional)命令における予約セット(reservation set)の最大サイズと整列要件
- LR/SC命令が操作対象とする予約セットは「連続していて、自然に整列(ナチュラルアライン)され、かつ最大64バイト以内」という制約を満たさなければならない。
- したがって、予約セット(reservation set)は「自然整列した64バイトの連続領域」(例えば0x40–0x7F)で定義され、
- LR が 0x40 で発行された場合 – 予約セットは [0x40, 0x40+64)、すなわち 0x40 から 0x7F までの範囲に張られる。
- 同じ予約セット内で SC を 0x48 に対して発行すると – 0x48 はこの 0x40–0x7F 範囲内に含まれるため、競合する他エージェントがいなければ SC は「成功」する可能性を持つ(最終的成功が保証される)
- Zihintpause: ポーズ・ヒント
- Zic64b: キャッシュ・ブロックは64バイトで、アドレス空間上で自然にアラインされている必要がある
- Zicbom: キャッシュ・ブロック管理命令
- Zicbop: キャッシュ・ブロック・プリフェッチ命令
- Zicboz: キャッシュ・ブロック・ゼロ命令
- Zfhmin: 半精度浮動小数点命令
- Zkt: データ独立な実行レイテンシ
新たに必須となった拡張(RVA23U64)
- V: ベクトル拡張(RVA22U64ではオプション)
- Zvfhmin: ベクトル最小半精度浮動小数点
- Zvbb: ベクトル基本ビット操作命令
- Zvkt: ベクトルデータ独立実行レイテンシ
- Zihintntl: 非テンポラル・ローカリティ・ヒント
- Zicond: 整数条件付き演算
- Zimop: 未確定演算(may-be-operations)
- Zcmop: 圧縮未確定演算
- Zcb: 追加圧縮命令
- Zfa: 追加浮動小数点命令
- Zawrs: 予約セット待機命令
- Supm: ポインタマスキング(PMLEN=0およびPMLEN=7の選択手段を最低限提供)
オプション拡張
ローカライズドオプション
- Zvkng: ベクトル暗号NISTアルゴリズム(GCM付き)
- Zvksg: ベクトル暗号ShangMiアルゴリズム(GCM付き)
RVA22でオプションだったスカラ暗号拡張(Zkn, Zks)はRVA23では非オプションとなった。ベクトル暗号が必須となり、より高速なためである。 GCM付きZvkng/Zvksgのみを標準化し、Zvbcは将来必須となる開発オプション、スカラZbcは拡張オプション(必須化の可能性は低い)である。
開発オプション
将来のRVAプロファイルで必須化を目指す開発オプション:
- Zabha: バイト・ハーフワードのアトミックメモリ操作
- Zacas: Compare-and-Swap命令
- Ziccamoc: 上記属性を持つメインメモリ領域はAMOCASQレベルのPMAサポートを提供
- ZiccamocはCompare-and-Swap命令の正しいサポートを保証する新拡張であり、特権アーキテクチャマニュアルのPMAセクションに追加予定。
- Zvbc: ベクトルキャリーレス乗算
- Zama16b: 自然整列16バイト境界をまたがない領域へのミスアラインロード・ストア・AMOはアトミック
- Zama16bはSm1p13で追加されたMisaligned Atomicity Granule機能の存在を示す新拡張であり、PMAセクションに追加予定。
拡張オプション
- Zfh: スカラ半精度浮動小数点(RVA22U64から継続)
- Zbc: スカラキャリーレス乗算
- Zicfilp: ランディングパッド
- Zicfiss: シャドウスタック
- Zvfh: ベクトル半精度浮動小数点
- Zfbfmin: スカラBF16変換
- Zvfbfmin: ベクトルBF16変換
- Zvfbfwma: ベクトルBF16ワイドニング乗算加算
移行オプション
RVA23U64には移行オプションは存在しない。
スカラ暗号はRVA23U64ではオプションではなくなったが、Zbc拡張は拡張オプションとして公開されている。