RISC-V アーキテクチャ(1)
レジスタ長
汎用レジスタ
32本(x0 - x31)
x0 ... ゼロレジスタ
x1 ... リターンアドレス
x2 ... スタックポインタ
x3 ... グローバルポインタ
x4 ... スレッドポインタ
x5 - x7 ... 一時レジスタ
x8 ... 保存レジスタ / フレームポインタ
x9 ... 保存レジスタ
x10 - x17 ... 関数の引数や返り値用
x18 - x27 ... 保存レジスタ
汎用レジスタ本数が少ないと?
汎用レジスタの値をスタックに退避する回数が増える.
それに伴い,退避用の命令コードも増える.嫌だね.
汎用レジスタ本数が多いと?
チップ面積が増える.
命令ビット内のレジスタ番号指定ビットが増える.
それに伴い,OPコードや即値に割り当てられるビット数が減る.嫌だね.
ちなみにプログラムカウンタは汎用レジスタンスとは別で用意されている.
基本命令と命令形式
基本命令
RV32I
RV64I(RV32Iを内包)
RV128I(RV64を内包)
6種類の命令形式
R形式 ... 2つのレジスタを対象とした命令(add,sub)
I形式 ... 短い即値とロード用(addi,lw,jalr,ecall,csr)
S形式 ... ストア用(store)
B形式 ... 条件分岐用(beq,bne)
U形式 ... 長い即値用(lui,auipc)
J形式 ... 無条件ジャンプ(jal)
拡張命令
13種類
M ... 整数乗除算命令
A ... 不可分に行うメモリ操作命令
F ... 単精度浮動小数点演算命令
D ... 倍精度浮動小数点演算命令命令
Q ... 4倍精度浮動小数点演算命令
L ... 10進浮動小数点演算命令
C ... 圧縮形式命令(16ビット)
V ... ベクタ演算命令
B ... ビット操作命令
T ... トランザクション・メモリ操作命令(並列実行の同期処理)
P ... SIMD命令
J ... 動的に変化する言語に対応(動的チェックやガベージコレクタなど)
N ... ユーザレベルでの割り込みと例外処理(組み込みUNIX)
推奨ISA
RV32IMAFD = RV32G
RV64IMAFD = RV64G
それでは.いろはにへとへと.