RISC-Vは組込みからハイエンドなコンピューティング領域まで幅広いレンジを
サポートしようとしています。

しかし、RV32IやRV32Eだけでは、ローエンドな組込み開発では駄目でしょう。

組込みシステムで使用されるマイコンは、メモリ量が小さく、

32ビット命令だけでは正直コードサイズが大きくて、競争力がなかったと思います。

 

そこで、Compressed 命令(以後、C命令)が重要と考えています。

以下のC命令を持ちます。

 

RV32I基本命令と比べて、3つのポイントが目につきます。

・命令の前にC.という名前がついている

・レジスタの指定が2つになった。

・レジスタの指定が5ビットでなく3ビットの命令がある。

 

名前については、Compress命令というのが分かりやすくなるので良いですね。

残りの2点について見ていきましょう。

 

ADD命令とC.ADD命令を見てみましょう。

ADD命令は、2つの入力となるレジスタをrs1とrs2で指定し、演算結果をrdに格納します。

C.ADDは、rs1とrdが同じレジスタとなります。

他の32ビットマイコンの16ビット命令も、こうした制限があるので定石と言えます。

実際にコンパイルをした結果で見てみましょう。ここでもIAR社のEmbedded Workbench for RISC-V(EWRISC-V)を使ってみました。簡単な加算の関数です。


この例では、2個の加算をする単純な関数ですが、以下のような結果となります。

こうした簡単なケースでは、コードサイズが半分になってしまいます。

 

もう一つの「レジスタの指定が5ビットでなく3ビットの命令がある」方は、

詳細を見てみましょう。

rs',rd'となっている部分が3ビットとなります。

その場合に指定できるレジスタは以下になります。

復習のためレジスタの説明を再掲しておきます。

こちらはそれなりに制限となりますが、命令長が半分になるメリットがあります。