在最新的vspec中我们可以看到相关vset{i}vl{i}的内容
vsetvli rd, rs1, vtypei # rd = new vl, rs1 = AVL, vtypei = new vtype setting vsetivli rd, uimm, vtypei # rd = new vl, uimm = AVL, vtypei = new vtype setting vsetvl rd, rs1, rs2 # rd = new vl, rs1 = AVL, rs2 = new vtype value
Table 6. AVL used in vsetvli
and vsetvl
instructions
|
| AVL value | Effect on |
- | !x0 | Value in | Normal stripmining |
!x0 | x0 | ~0 | Set |
x0 | x0 | Value in | Keep existing |
AVL意思是应用向量长度, 也就是说对于要处理的数据的向量长度(可以是~0, 一直处理)
上面表的意思是, 对于vsetvli和vsetvl指令:
如果rs1 != 0 (x0), 也就是AVL(应用向量长度)=rs1, 此时进行正常的stripmining. 设置rd的值为vl
如果rs1 == 0,
①. 如果rd == 0 (x0), 保持vl为上次计算的vl
②. 如果rd != 0 (x0), 设置vl = VLMAX, 设置rd的值为vl
也是说对于vsetvli
如果rd为zero, 则只看AVL
vsetivli zero, 16, e32, m4, ta, mu
此时vl = vlmax, AVL = 16, 用来做stripmining
如果rs1为zero, 则把rd设为vlmax
vsetvli a1, zero, e64, m1, ta, mu
设置a1寄存器为vlmax
a1 = lmul * vlen / sew
AVL = ~0