“向量加载/存储整个寄存器指令”的区别

问题描述 投票:0回答:1

在 RISC-V 向量扩展中,提供了在单个命令中加载/存储单个或多个向量寄存器的指令。

其中,目前可以从内存到v寄存器的加载指令有四种,分别是vl1re8/16/32/64.v。

但是,这四种类型的指令共享一个共同的加载范围,该范围由“VLEN 位”决定。 例如,vl1re8.v 指令将 VLEN/8 [byte] 存储到向量寄存器中,vl1re64.v 指令将 VLEN/64[dward] 存储到寄存器中。换句话说,加载到向量寄存器中的大小对于所有四种类型的指令都是相同的。

当VLEN小于64时,可能存在无法使用的指令。然而,当 VLEN 为 65 或更大时,使用任何指令获得的结果应该基本相同。 这种冗余的唯一可能的原因可能是从内存加载时存在对齐限制。

riscv
1个回答
0
投票

RVV 规范为您的问题提供了答案:

因为寄存器中的字节布局与内存中的字节布局相同,所以相同的数据 无论 EEW 为何,都写入目标寄存器组。因此,这就足够了 仅提供 EEW=8 变体。提供全套 EEW 变体,以便 编码的 EEW 可以用作提示来指示目标寄存器组接下来将是 使用此 EEW 进行访问,这有助于在内部重新排列数据的实现

对齐要求也不同,内存需要与EEW对齐。

允许基于与编码的 EEW 不对齐而引发未对齐的异常 简化了这些指令的实施。一些子集实现可能 不支持较小的 SEW 宽度,因此允许报告未对齐的异常 即使大于编码的 EEW,也支持最小的 SEW。极端不标准 例如,实现可能具有 SEWMIN>XLEN。软件环境可以 强制规定最低一致性要求以支持 ABI

© www.soinside.com 2019 - 2024. All rights reserved.