ベクトル命令における、マスク命令をどのように実行するのかについて考えたい。
ベクトル命令にはマスク命令という、各要素の比較を実行してその結果をマスクとしてベクトルレジスタに格納する命令がある。 ベクトルレジスタには、マスクフォーマットという、各要素の比較結果をLSB側に敷き詰める方式で書き込む。
したがって、VLEN!=DLENの場合には各DLENの計算結果をスタックして、最後に書き込む必要がある。 これを実現するのは意外と難しくて、例えばVLEN=512, DLEN=128の場合、4サイクルを用いて書き込むのだが、
- 0~3サイクルは単純に演算の結果をスタックする。同時に、ベクトル・レジスタのOldデータを書き込んでいく。
- 4サイクルは比較の結果を書き込む
という、合計5サイクルを実行する必要があり、そのための面倒な論理が必要になる。 これ以外にどのような方法があるのかわからないが、例えばAraなどはDLENの概念がないので、あまり参考にできない。もっと賢い実装はないのかなあ。