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ビットとなります。
その場合に指定できるレジスタは以下になります。
復習のためレジスタの説明を再掲しておきます。
こちらはそれなりに制限となりますが、命令長が半分になるメリットがあります。