RISC-V Vector ExtensionのGitHubリポジトリに静かにv0.9のタグが打たれた。 v0.8とv0.9の間にどれだけの差分があるか、調べておかなければならない。
- v0.8のタグの付いたRevision
- v0.9のタグの付いたRevision
という訳でGitリポジトリの差分を取ってざっくりと変更点をチェックしていく。
git diff -w 0.8..0.9 ./v-spec.adoc
変更点
- 要素シフトのための命令追加。これまで
slideup
、slidedown
の亜種は整数レジスタとの間のみ通信する命令であったが、vfslide1up
,vfslide1down
命令が追加された。
vfslide1up.vf vd, vs2, rs1, vm # vd[0] = f[rs1], vd[i+1] = vs2[i] vfslide1down.vf vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1] = f[rs1]
- 整数拡張命令。SEW/2のサイズからSEWに拡張する命令が新規追加された。
- 整数と浮動小数点の変換命令のバリエーション追加。fcsrを無視してC言語/Javaでデフォルトとなるtruncateの丸めモードを使用する命令の追加。
# Convert float to unsigned integer, truncating. vfcvt.rtz.xu.f.v vd, vs2, vm # Convert float to signed integer, truncating. vfcvt.rtz.x.f.v vd, vs2, vm # Convert float to double-width unsigned integer, truncating. vfwcvt.rtz.xu.f.v vd, vs2, vm # Convert float to double-width signed integer, truncating. vfwcvt.rtz.x.f.v vd, vs2, vm # Convert double-width float to unsigned integer, truncating. vfncvt.rtz.xu.f.w vd, vs2, vm # Convert double-width float to signed integer, truncating. vfncvt.rtz.x.f.w vd, vs2, vm
- ロードストア命令のバリエーション変更。
vlw.v
,vlh.v
,vlb.v
,vle.v
などのバリエーションだったが、取り扱うビット数によってバリエーションが変わる方式に変更。まあ確かに、この方が分かりやすい。
Unit-stride Load | Strided Load | Indexed Load | Unit-stride Store | Strided Store | Indexed- Ordered Store | Indexed- Unordred Store | |
---|---|---|---|---|---|---|---|
8-bit | vle8.v | vlse8.v | vlxei8.v | vse8.v | vsse8.v | vsxei8.v | vsuxei8.v |
16-bit | vle16.v | vlse16.v | vlxei16.v | vse16.v | vsse16.v | vsxei16.v | vsuxei16.v |
32-bit | vle32.v | vlse32.v | vlxei32.v | vse32.v | vsse32.v | vsxei32.v | vsuxei32.v |
64-bit | vle64.v | vlse64.v | vlxei64.v | vse64.v | vsse64.v | vsxei64.v | vsuxei64.v |
128-bit | vle128.v | vlse128.v | vlxei128.v | vse128.v | vsse128.v | vsxei128.v | vsuxei128.v |
256-bit | vle256.v | vlse256.v | vlxei256.v | vse256.v | vsse256.v | vsxei256.v | vsuxei256.v |
512-bit | vle512.v | vlse512.v | vlxei512.v | vse512.v | vsse512.v | vsxei512.v | vsuxei512.v |
1024-bit | vle1024.v | vlse1024.v | vlxei1024.v | vse1024.v | vsse1024.v | vsxei1024.v | vsuxei1024.v |
- アトミック命令も同様。ビットサイズに応じてバリエーションが変更された。
8-bit | 16-bit | 32-bit | 64-bit | |
---|---|---|---|---|
Amoswap | vamoswapei8.v | vamoswapei16.v | vamoswapei32.v | vamoswapei64.v |
Amoadd | vamoaddei8.v | vamoaddei16.v | vamoaddei32.v | vamoaddei64.v |
Amoxor | vamoxorei8.v | vamoxorei16.v | vamoxorei32.v | vamoxorei64.v |
Amoand | vamoandei8.v | vamoandei16.v | vamoandei32.v | vamoandei64.v |
Amoor | vamoorei8.v | vamoorei16.v | vamoorei32.v | vamoorei64.v |
Amomin | vamominei8.v | vamominei16.v | vamominei32.v | vamominei64.v |
Amomax | vamomaxei8.v | vamomaxei16.v | vamomaxei32.v | vamomaxei64.v |
Amominu | vamominuei8.v | vamominuei16.v | vamominuei32.v | vamominuei64.v |
Amomaxu | vamomaxuei8.v | vamomaxuei16.v | vamomaxuei32.v | vamomaxuei64.v |
このvma
, vta
の扱い方だが、ベクトルレジスタ内のinactive要素とtail要素をどのように取り扱うかということを規定している。
vtype.vta | vtype.vma | Tail Elements | Inactive Elements |
---|---|---|---|
0 | 0 | undisturbed | undisturbed |
0 | 1 | undisturbed | agnostic |
1 | 0 | agnostic | undisturbed |
1 | 1 | agnostic | agnostic |
Undisturbedの場合は、その要素は前の値から変更しない。一方でAgnosticの場合は、前の値から変更しないか、All-1を書き込むかのどちらかとなる。これは実装に依存する。また、vma
, vta
のビットフィールド自体もRead Onlyなので、OoOのポリシに従って便利な方を選べばよい。