FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vの圧縮拡張命令Zc*拡張について

fprox.blogspot.com

RVC命令に追加して、新たに定義されているZc*拡張について調査する。

RISC-V Zc*拡張には、6種類の拡張命令があるらしい。

  • Zca: Zcf / Zcd以外の既存のRVC命令
  • Zcf: 既存の単精度RVCメモリアクセス命令
  • Zcd: 既存の倍精度RVCメモリアクセス命令
  • Zcb
  • Zcmp
  • Zcmt

Zcb拡張

Zcb拡張には12の命令が含まれている。

  • 5つのロード/ストア操作
  • 5つの符号/ゼロ拡張操作
  • 1つの乗算命令
  • 1つのビット/NOT命令

オペランドは3ビットのレジスタエンコーディングに限定され、(x8-x15)をターゲットにすることができる。 基本的にはすべての命令は32ビットの等価の命令に置き換えることができるが、Base ISAに変換されるというわけではない。たとえばBit Manipulationなどの命令に置き換わる可能性もある。

Zcbのロードストア命令は、既存のRVC拡張で定義されている32-bit/64-bitのメモリアクセス命令だけでなく、8-bit/16-bitのメモリアクセスもサポートしている。さらに、符号拡張またはゼロ拡張も定義されている。

Zcmp拡張

Zcmpは6つの新しい命令を導入している。 そのうち4つは関数読み出しと関数から戻るためのコードを小さくするように設計されている。 Push / Pop / PopRet / PopRetz命令により、スタックフレームを操作することができる。

残りの2つの命令はa0/a1レジスタと任意の場所のレジスタの値を移動することができる命令である。

Zcmt拡張

ジャンプテーブルに格納されているアドレスへのインデックス付きジャンプ。ジャンプターゲットは256エントリまで格納することができる。 これには、新たな制御レジスタであるJVTを使ってどこにテーブルが存在しているかの制御を行う。