読もうと思っていたRISC-V原典を読む時間が少し取れたのでざっと読みしたメモを残しておく。
RISC-Vとは
RISC-Vは過去のプロセッサアーキテクチャに対する反省をくりこんだ新しいプロセッサの命令セットアーキテクチャである。
RISC-Vの開発はRISC-V基金で成り立っていて、著名なユーザー企業や既存プロセッサアーキテクチャからの脱却を目指すファブレスメーカーからの支援を受けている。
RISC-V原典
RISC-Vの命令セットアーキテクチャの要点をまとめた書籍。コアのアーキテクトである、David PattersonとAndrew Watermanの著書で原題は「The RISC-V Reader: An Open Architecture Atlas」。
タイトルに関して言うと正直、内容からするとこちらの原題のほうがしっくりくるが「Atlas」という言葉がそれほど一般的な用語でもないので編集者も悩んだのかな、などと。
- 作者: デイビッド・パターソン,アンドリュー・ウォーターマン,成田光彰
- 出版社/メーカー: 日経BP社
- 発売日: 2018/10/18
- メディア: 単行本
- この商品を含むブログを見る
内容についてのメモを少々
RV32I 基本整数ISA
- ソフト開発がしやすいようにレジスタの本数を32本用意する。
- 遅延スロットは規定しない。仕様が変わるとすぐに変動するから。
- 条件つき実行は使用しない。複雑さの根源になる。
- 3ソースオペランドも極力使用しない。
- PCは特別扱いする。いつでもジャンプする可能性があると構造が複雑になる。
- 構造が単純なことを持って実行効率を向上する。
まぁ、納得の行く話かなと。プログラマ観点で見るとARMでPC相対で飛ぶときに24とか16とか足してるのもなにそれってよく思っている。Thumbにジャンプするときに末尾のビット汚すやつとかもね。
RV32M 乗算および除算
ARMの整数除算が最近までなかった、という話をちょうど最近していたところだったのでちょっと印象に残っている。
あと、ARMだと32x32->64の乗算が単一の命令で実現できたような気がする。RISC-Vでは2命令に分かれるんだな。
RV32FおよびRV32D:単精度および倍精度の浮動小数点
- 浮動小数点レジスタは32本。
- 倍精度でも32本。
- 整数レジスタとの間の転送が可能。(過去アーキテクチャに対する反省点)
- 積和演算では3ソースオペランドが発生する。R4形式という。
- 符号インジェクションという命令があって便利。
RV32A アトミック命令
アトミック系の命令は下記の2パターンある。
- AMO アトミックメモリ操作
- ロードリザーブド/ストアコンディショナル
ロードリザーブド/ストアコンディショナルでまぁ、十分なはずだけど、プログラマ的にはアトミックメモリ操作が便利なので追加しましたってことらしい。
RV64 64ビットアドレス命令
- RV64I RV64M RV64A RV64F/D RV64C(!) に対応している。
- RV64VはRV32Vと同じ。
- RV128というのもギャグかと思いきや、大規模メモリ利用のために真面目に検討している。
RV32/64 特権アーキテクチャ
特権関連
- 特権に関わるモードはM/S/Uの三階層になっていてモダンなPOSIX向けのアーキテクチャである。(m:マシンモード、S:スーパーバイザーモード、U:ユーザーモード)
- 一応、wfiという割り込み待ちの命令がある。
- (当然だが)割り込みをSモードに委譲することができる。
- PMPというメモリ保護機能がある
ARMとかと同じでモードは三階層。PMPは使うのかなこれ、、、いらなかったのでは。
ページング関連
- 32ビットでは4K->4M->4Gという構造でページ構造を定義する。
- 64ビットでは39ビットモードと48ビットモードがある。ページテーブルが深くなる。
- TLBキャッシュクリアをハードウェアに伝える仕組みがある。