2. 实现中定义的常量参数
hart是什么意思?
每个hart支持定义了两个参数的向量扩展:
- $ELEN≥8$,且ELEN必须是2的指数。
ELEN:(任意操作可produce和consume的)向量元素的最大bit size。
- $ELEN≤VLEN≤2^{16}$,且VLEN必须是2的指数,
VLEN:单个向量寄存器中的bit数
在未来的扩展中可能ELEN>VLEN,因为一个元素可以使用来自多个向量寄存器的bit。
VLEN的上限允许软件知道索引满足16位。
向量化扩展支持编写二进制代码,在某些约束条件下,这些代码将在具有不同VLEN或ELEN值的harts上移植执行,前提是harts支持所需的元素类型和指令。
3. 向量化扩展编程模型
向量化扩展增加了32个向量寄存器和7个非特权的CSR到一个基准的RISC-V ISA中。

四个地址在0x00B-0x00E的CSR暂时为未来的向量CSR保留,其中一些可能被镜像到vcsr。
3.1 向量寄存器
向量扩展将32个结构向量寄存器v0-v31添加到基准的RISC-V ISA,每个向量寄存器都有一个固定的VLEN位状态。
3.2 mstatus中的向量上下文状态
向量上下文状态域VS(vector context status)已经被加入到mstatus[10:9],并且被隐藏(shadow)在sstatus[10:9]。它类似于浮点的上下文状态域FS。
为了执行任何向量指令或访问向量CSR,需要在mstatus.VS设置为Off时引发非法指令异常。
当mstatus.VS被设置为初始值(Initial)或者被清除(Clean)时,执行任何会更改向量状态(包括向量CSR)的指令,都会将mstatus.VS置为脏(Dirty)。即使向量状态没有被改变,一些实现也可能会将mstatus.VS从Initial或Clean更改为Dirty。
准确设置mstatus.VS是一种优化措施。软件通常会使用VS来减少上下文切换(context-swap)的开销。
如果mstatus.VS是Dirty,那么mstatus.SD就是1;否则,按照现有的规格设置mstatus.SD。
一些实现中可能有一个可写的misa.V域。类似于浮点单元的处理方式,即使misa.V被清除了,mstatus.VS仍可能存在。
当misa.V被清除时允许mstatus.VS存在,能支持向量模拟并简化在具有可写misa.V的系统中对mstatus.VS的处理。
3.3 vsstatus中的向量上下文状态
当hypervisor出现时,向量上下文状态域VS被添加到vsstatus[10:9]中。它类似于浮点上下文状态域FS。
当V=1且vsstatus.VS和mstatus.VS生效时,尝试去执行任何向量指令或者访问向量CSR,若vsstatus.VS或mstatus.VS被设置成了Off,会引发非法指令异常。
当V=1且vsstatus.VS和mstatus.VS都没被设置成Off,执行任何会更改向量状态(包括向量CSR)的指令,都会将mstatus.VS和vsstatus.VS置为Dirty。即使向量状态没有被改变,一些实现也可能在任意时刻将mstatus.VS或vsstatus.VS从Initial或Clean更改为Dirty。
如果vsstatus.VS是Dirty,则vsstatus.SD是1;否则按照现有的规格设置vsstatus.SD。
如果mstatus.VS是Dirty,那么mstatus.SD就是1;否则,按照现有的规格设置mstatus.SD。
在具有可写的misa.V的一些实现中,即使misa.V被清除了,vsstatus.VS仍可能存在。
3.4 向量寄存器类型vtype
4. 向量元素和向量寄存器之间的映射
4.1 LMUL=1
4.2 LMUL<1
4.3 LMUL>1
5. 向量指令格式
6. 配置设置指令vsetvli/vsetivli/vsetvl
7. 向量load和store
7.9 Vector Load/Store Whole Register指令
与unmasked unit-stride load and store instructions操作相似