さて、話を戻すとそんな訳でもともとはRavenのために開発されたRISC-Vの命令セットであるが、3カ月という短い期間ながら新しいOpen StandardなISAとなるべく設計された、というのはこちらにもある通り。
主要な設計目標は、こちらである。基本はBase+Extensionsという構成で、このBaseをなるべく小さくするとともに変更をやめ(Frozen)、また用途に応じた命令は全部拡張に追いやる、ということで命令セットの一貫性とサポートの容易性を狙っている。そのBase Instructionはこちらにもあるように、RV32E/RV32I/RV64I/RV128Iの4種類である。基本はRV32Eで、
という扱いだ。命令セットのフォーマットは写真8にあるように32bitの固定長で、3オペランド命令にも対応する。例えばadd t0, t1, t2といった具合だ。
ただ面白いというか割り切ったな、という感じなのは、例えばこのadd命令、ISAのレベルではオーバーフローチェックは行わない事になっている。オーバーフローチェックは条件分岐で代替できる(から命令セットではサポートしない)というのがRISC-Vのコンセプトなので、実際にはきちんとadd命令を実行する場合、
add t0, t1, t2
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow
という4命令を実行してoverflowチェックを行う必要がある。
これはどう考えても遅くなりそうなものだが、実はこの辺りもちゃんと抜け道がある。いわゆるMicro-ops Fusion/Macro-Op Fusionの活用だ(写真9)。このケースで言えば、適切な内部アーキテクチャであればこれをMacro-Op Fusionでまとめられる事を前提に(写真10)、「Macro-Opで高速化が可能なものについては命令セットレベルでは何もしない」という割り切りを見せている。
ちなみに拡張命令については割愛するが、本稿に関係しそうな一つだけ。Base Instructionに関しては圧縮フォーマットをサポートする(写真11)。これによって命令を16bit Aliginmentで取り込むことが可能で、例えばデコーダーは700ゲート程度で開発できるようになる、とする。この圧縮フォーマットは、Thumb-2とほとんど同程度な程に高効率、とされる(写真12)。
Copyright © ITmedia, Inc. All Rights Reserved.