RISC-Vのプロファイルについて、RVAに続いてRVBという謎のプロファイルが追加されていたので調査することにした。
RVAというのはRISC-Vのプロファイルのうちアプリケーション・プロセッサ向けのものである。 一方で、RVBというのもアプリケーション・プロセッサ向けのプロファイルであり、どの拡張を挿入すべきかで違いはあるのだが、その目的が良く分からない。
以下のブログも参考にしている:
まず、RVA (RVA23U64) プロファイルで必要となる命令拡張についてリストアップしてみよう。
- Mandatory : M / A / F / D / C / Zicsr / Zicntr / Zihpm / Ziccif / Ziccrse / Ziccamoa / Zicclsm / Za64rs / Zihintpause / Zba / Zbb / Zbs / Zic64b / Zicbom / Zicbop / Zicboz / Zfhmin / Zkt / V / Zvfmin / Zvbb / Zvkt / Zihintntl / Zicond / Zimop / Zcmop / Zcb / Zfa / Zawrs / Supm
- Optional : Zvkng / Zvksg / Zabha / ZZacas / Ziccamoc / Zvbc / Zama16b / Zfh / Zbc / Zvfh / Zfbfmin / Zvfbfmin / Zvfbfwma
RVA23S64で必要となる拡張命令をリストアップしてみる。
- Mandatory : Zifencei / Ss1p13 / Svbare / Sv39 / Svade / Ssccptr / Sstvecd / Sstvala / Sscouuterenw / Svpbmt / Svinval / Svnapot / Sstc / Sscofpmf / Ssnpm / Ssu64xl / H / Ssstateen / Shcounterenw / Shcounterenw / Shvstavala / Shtvala / Shvstvecd / Shvsatpa / Shgatpa
- Optional : Sv48 / Sv57 / Svadu / Zkr / Sdext / Ssstrict / Svvptc / Sspm
もう訳が分からん。各命令拡張の詳細については、それぞれの仕様書を確認してほしい。
次に、RVB (RVB23U64) プロファイルについてリストアップしてみる。
- Mandatory : M / A / F / D / C / Zicsr / Zicntr / Zihpm / Ziccif / Ziccrse / Ziccamoa / Zicclsm / Za64rs / Zihintpause / Zba / Zbb / Zbs / Zic64b / Zicbom / Zicbop / Zicboz / Zkt / Zihintntl / Zicond / Zimop / Zcmop / Zcb / Zfa / Zawrs
- Optional :
- RVA23U64と同様 : Zvbc / Zvkng / Zvksg
- RVA23U64には登場しない : Zvkg / Zvknc / Zvksc / Zkn / Zks
- RVB24U64ではMandatoryになる予定 : Zabha / ZZacas / Ziccamoc / Zama16b
- RVA23U64ではMandatoryのもの : Zfhmin / V / Zvfmin / Zvbb / Zvkt / Supm
- RVA23U64でもexpansion optionのもの : Zfh / Zbc / Zvfh / Zfbfmin / Zvfbfmin / Zvfbfwma
- RVA23U64からRVA24U64でMandatoryになる予定だが、RVBではその予定ではないもの : Zvbc
RVB23S64で必要となる拡張命令をリストアップしてみる。
- Mandatory : Zifencei / Ss1p13 / Svbare / Sv39 / Svade / Ssccptr / Sstvecd / Sstvala / Sscouuterenw / Svpbmt / Svinval / Svnapot / Sstc / Sscofpmf / Ssu64xl
- Optional : Ssnpm / Sspm / H / Ssstateen / Shcounterenw / Shcounterenw / Shvstavala / Shtvala / Shvstvecd / Shvsatpa / Shgatpa
- RVA23S64でも同様 : Sv48 / Sv57 / Svadu / Zkr / Sdext / Ssstrict / Svvptc
ここまでリストアップしてみて、RVBの目的というのは何なのかというのを考えてみたが、良く分からない。
上記のブログでは、
RVB purpose: giving more flexibility to companies that are ready to develop custom software for their RISC-V implementation
これはRVBの目的である、RISC-V実装用のカスタムソフトウェアを開発する準備ができている企業により柔軟性を与えるという目的
これがどのような意味を持つのかが不明瞭で、ではRVAとRVBをどのように使い分ければよいのかも記載されていない。 せっかくプロファイルで仕様をまとめたのに、また分断化しそうで不安な点もありそうだ。
追記:プロファイルの全体をマップしたGoogle Spreadsheetがあるそうだ。