開発日記

Erlangをダラダラ書きます。

RISC-V アーキテクチャ(1)

レジスタ

汎用レジスタ

32本(x0 - x31

x0 ... ゼロレジスタ

x1 ... リターンアドレス

x2 ... スタックポインタ

x3 ... グローバルポインタ

x4 ... スレッドポインタ

x5 - x7 ... 一時レジスタ

x8 ... 保存レジスタ / フレームポインタ

x9 ... 保存レジスタ

x10 - x17 ... 関数の引数や返り値用

x18 - x27 ... 保存レジスタ

ax28 - x31 ... 一時レジスタ

汎用レジスタ本数が少ないと?

  • 汎用レジスタの値をスタックに退避する回数が増える.

  • それに伴い,退避用の命令コードも増える.嫌だね.

汎用レジスタ本数が多いと?

  • チップ面積が増える.

  • 命令ビット内のレジスタ番号指定ビットが増える.

  • それに伴い,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

riscv.org

それでは.いろはにへとへと.