首页/指令库/VSHA2MS.VV
VSHA2MS.VV

RISC-V VSHA2MS.VV 指令详解

指令手册V-type (OP-VE / OPMVV)

向量 SHA-2 消息调度扩展,产生后续 4 个消息字;Zvknha 仅 SEW=32,Zvknhb 支持 SEW=32/64。

指令语法

vsha2ms.vv vd, vs2, vs1

语法 vsha2ms.vv vd, vs2, vs1;v0–v31 为向量寄存器,无立即数。固定 vm=1,不可加入 v0.t 掩码。

32 位 OP-VE:funct6=101101[31:26]、vm=1[25]、vs2[24:20]、vs1[19:15]、OPMVV=010[14:12]、vd[11:7]、opcode=1110111[6:0]。

Zvknha 依赖 Zve32x,仅支持 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={W3,W2,W1,W0}、vs2={W11,W10,W9,W4}、vs1={W15,W14,未使用,W12},生成 W16–W19 写回 vd。初始消息字需软件交换字节,后续调度字无需再交换。花括号按高元素索引到低索引排列。

EGS=4、EGW=4*SEW。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。vd 不得与 vs1/vs2 任一组重叠。组遵守 LMUL 对齐;.vs 标量组的 EMUL=ceil(EGW/VLEN)。

启用向量状态,使用合法受支持 vtype。仅处理 vstart/EGS≤i<vl/EGS 的活动组;prestart 保持、tail 遵守 vta。vstart≥vl(含 vl=0)不更新目标元素;成功执行清零 vstart,非零 vstart 假定实现支持。执行延迟必须与数据无关。

ZvknhaZvknhb向量密码SHA-2

指令行为说明

计算下一组四个 SHA-2 调度字。Zvknha 仅支持 SEW=32;Zvknhb 支持 SEW=32/64。vd 同时提供输入并接收输出。

VSHA2MS.VV 指令解析与执行动画

有界模型展示一个 element group 的官方 ISA 可见数据流,不模拟密码协议或微架构。

vsha2ms.vv

固定 vm=1,OP-VE,OPMVV;EGS=4,EGW=128。

以下列表按元素索引从低到高排列;只展示活动组,tail 按 tu 保持。 vd[0..3]=[0,1,2,3]; vs2[0..3]=[4,9,10,11]; vs1[0..3]=[12,13,14,15]. 数值是已完成端序转换的 SHA 消息字。

funct6=101101vm=1vs2=01000vs1=01100OPMVV=010vd=00100OP-VE=1110111
执行数据路径

OP-VE -> funct6 101101 -> vsha2ms.vv

结果待定

快速理解与检索要点

VSHA2MS.VV 属于向量 SHA-2 element-group 指令,不能按普通逐元素算术或带 v0.t 掩码的指令理解。

SEW=32 对应 SHA-256;SEW=64 对应 SHA-512 且需要 Zvknhb。
寄存器组重叠限制是编码合法性的一部分。

向量执行上下文

语法 vsha2ms.vv vd, vs2, vs1;v0–v31 为向量寄存器,无立即数。固定 vm=1,不可加入 v0.t 掩码。

32 位 OP-VE:funct6=101101[31:26]、vm=1[25]、vs2[24:20]、vs1[19:15]、OPMVV=010[14:12]、vd[11:7]、opcode=1110111[6:0]。

Zvknha 依赖 Zve32x,仅支持 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={W3,W2,W1,W0}、vs2={W11,W10,W9,W4}、vs1={W15,W14,未使用,W12},生成 W16–W19 写回 vd。初始消息字需软件交换字节,后续调度字无需再交换。花括号按高元素索引到低索引排列。

EGS=4、EGW=4*SEW。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。vd 不得与 vs1/vs2 任一组重叠。组遵守 LMUL 对齐;.vs 标量组的 EMUL=ceil(EGW/VLEN)。

启用向量状态,使用合法受支持 vtype。仅处理 vstart/EGS≤i<vl/EGS 的活动组;prestart 保持、tail 遵守 vta。vstart≥vl(含 vl=0)不更新目标元素;成功执行清零 vstart,非零 vstart 假定实现支持。执行延迟必须与数据无关。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 33

常见使用场景

加密与密码

启用本页扩展与向量状态,合法 vtype、SEW=32、VLEN=256、LMUL=1、vl=4、vstart=0、tu;按语法指定的寄存器组预置输入。按本页元素组数据流计算,动画列出初值与结果;成功后 vstart=0。

向量化加速

启用本页扩展与向量状态,合法 vtype、SEW=32、VLEN=256、LMUL=1、vl=4、vstart=0、tu;按语法指定的寄存器组预置输入。按本页元素组数据流计算,动画列出初值与结果;成功后 vstart=0。

使用前检查清单

语法检查
  • 语法 vsha2ms.vv vd, vs2, vs1;v0–v31 为向量寄存器,无立即数。固定 vm=1,不可加入 v0.t 掩码。
  • 32 位 OP-VE:funct6=101101[31:26]、vm=1[25]、vs2[24:20]、vs1[19:15]、OPMVV=010[14:12]、vd[11:7]、opcode=1110111[6:0]。
语义检查
  • Zvknha 依赖 Zve32x,仅支持 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={W3,W2,W1,W0}、vs2={W11,W10,W9,W4}、vs1={W15,W14,未使用,W12},生成 W16–W19 写回 vd。初始消息字需软件交换字节,后续调度字无需再交换。花括号按高元素索引到低索引排列。
  • EGS=4、EGW=4*SEW。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。vd 不得与 vs1/vs2 任一组重叠。组遵守 LMUL 对齐;.vs 标量组的 EMUL=ceil(EGW/VLEN)。
  • 启用向量状态,使用合法受支持 vtype。仅处理 vstart/EGS≤i<vl/EGS 的活动组;prestart 保持、tail 遵守 vta。vstart≥vl(含 vl=0)不更新目标元素;成功执行清零 vstart,非零 vstart 假定实现支持。执行延迟必须与数据无关。

容易混淆 / 常见误区

无 vm 操作数;该 element-group crypto 指令不可掩码执行。
vd 寄存器组不得与 vs1 或 vs2 重叠。
SHA-2 element group 使用 EGS=4;vl 与 vstart 必须按 element group 对齐。
初始 16 个消息字需由软件从大端字节序转换;本指令产生的后续调度字不需再次交换字节。

常见问题

VSHA2MS.VV 是否支持 vm 掩码?

不支持。官方语法没有 vm 操作数。

VSHA2MS.VV 的 SEW 怎么选?

由当前 vtype 决定,但必须满足 Zvknha/Zvknhb 对 SEW=32 或 64 的限制。