RISC-V
カリフォルニア大バークレー発の オープンな RISC 系命令セットアーキテクチャ (ISA)。使用にライセンス料が不要で、非営利団体が中立に管理する。『LLVMとRISC-Vによる低レイヤプログラミングの基礎』の読書を通じた整理。ISA 一般の位置づけは cpu-architecture-isa。
基本設計
- RISC = 命令をシンプルに保つ (対する CISC は多機能命令で clock が低くなりがち。x86 は内部でマイクロ ops に分解)。
- これまでの ISA にあった HW 実装上の非効率を排除。命令数が少なくコードサイズを抑えられ高速化にも寄与。
- XLEN = レジスタ長。32/64/128bit のレジスタを各32本持つ (組み込み向けは16本)。128bit ISA は意図的に未定義。
- リトルエンディアン (Intel と同様。MIPS/ARM は両対応)。
- オーバーフローでフラグが立たない設計 → ユーザー側で検査が必要。
命令
- 比較は汎用レジスタへ格納 (
SLT/SLTI)。x86 のようなフラグレジスタを使わない。 - 分岐:
BEQ(条件),J(ジャンプ),JAL(リンクレジスタに PC 退避してジャンプ = 関数呼び出し),JR(リンクレジスタへ戻る = return)。標準では戻りアドレス用にx1を使う規約。 - ロード:
LW/LH/LB(4/2/1 byte, アライン違反でミスアライン例外)。 - アトミック:
LR.W/SC.W(Load Reserved / Store Conditional, 成功するまで繰り返し)、AMO系 (amoadd等)。 - CSR 操作命令で制御レジスタを操作。例外時は
mepc(PC),mcause(要因),mtval(付随情報)。
命令セット構成
- 基本:
RV32I/RV32E(組み込み)/RV64I/RV128I/RVWMP(メモリモデル)。 - 拡張は独立性が高く基本に載せる。
G = IMAFD_Zicsr_Zifencei(Zicsr= CSR制御拡張,Zifencei= 命令フェッチのフェンス拡張)。一般的にはRVC(短縮命令) を加えたRV64GC。RVC でコードサイズを圧縮。 - J-type 等は即値ビットを
imm[20|10:1|11|19:12]のように並べ替えて符号化する。
特権モードと ABI
- 特権モード: マシン(M) / スーパーバイザ(S) / ユーザー(U)。OS が資源 (disk 等) にアクセスする際に特権モードへ移行。ハイパーバイザ用モードも検討中。
- 呼び出し規約 (ABI): 引数は reg 8個まで (超過は mem)、戻り値は reg 2つまで。
t= caller saved、s= callee saved。
ツールチェーン
- Compiler Explorer (godbolt) でアセンブリ確認、
RDCYCLEでサイクル数測定。 pk(OS 機能printf等の肩代わり)、spike(命令エミュレータ):spike pk <prog>で実行。