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

RISC-V VSHA2CL.VV 指令详解

指令手册Vector OP-VE (OPMVV)

向量 SHA-2 压缩两轮,读取状态组和消息调度常量;Zvknha 仅 SEW=32,Zvknhb 支持 SEW=32/64。

指令语法

vsha2cl.vv vd, vs2, vs1

语法 vsha2cl.vv vd, vs2, vs1;向量寄存器选择 v0–v31。没有立即数。固定 vm=1,不可掩码;vd 同时作为输入和输出。

32 位 OP-VE:funct6=101111[31:26],固定 vm=1[25],vs2[24:20],vs1[19:15],funct3=010,vd[11:7],opcode=1110111。

Zvknha 依赖 Zve32x,仅 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={c,d,g,h}、vs2={a,b,e,f};vs1 的低两字 [1:0]依次提供 W0(所选低字)、W1(所选高字)。两轮后仅把新 {a,b,e,f} 写入 vd;执行延迟必须与数据无关。

EGS=4、EGW=4*SEW;vl/vstart 非 4 的倍数、扩展不支持当前 SEW、或 vd 与 vs1/vs2 任一寄存器组重叠时编码保留。LMUL*VLEN<EGW 即使 vl=0 也引发非法指令异常。组按 LMUL 对齐;相同源寄存器读相同输入。

启用向量状态并使用合法受支持 vtype。prestart 保持,inactive/tail 遵守 vma/vta;vstart≥vl(含 vl=0)不更新任何目标元素。成功执行将 vstart 清零;非零 vstart 假定实现支持,否则允许非法指令异常。

ZvknhaZvknhb向量密码SHA-2

指令行为说明

VSHA2CL.VV 是向量 SHA-2 element-group 指令。它使用 vd 与 vs2 保存的当前状态以及 vs1 中的消息调度加常量执行两轮压缩,vd 同时作为输入和输出。Zvknha 下 SEW 必须为 32;Zvknhb 下 SEW 可为 32 或 64。 CH/CL 的区别是本指令选择 低两字 vs1[1:0];先使用所选对的低字,再使用高字。

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

该有界模型只展开一个 SHA-2 element group 的两轮 ISA 状态,不表示哈希协议、字节序转换过程或微架构。

执行环境:启用所选扩展与向量状态、合法受支持 vtype,LMUL=1;正常分支 VLEN≥8×SEW,仅展开组 0,元素 0 位于最低 SEW 位。容量不足分支表示 LMUL*VLEN<4×SEW。非零 vstart 假定实现支持;同名源输入组须一致。

31..26
funct6
101111
25
vm fixed
1
24..20
vs2
01000
19..15
vs1
01100
14..12
OPMVV
010
11..7
vd
00100
6..0
OP-VE
1110111
OP-VE OPMVV, funct6=101111, vm=1, Zvknha
v4[0..3] <- pending

快速理解与检索要点

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

SEW=32 对应 SHA-256;SEW=64 对应 SHA-512 且需要 Zvknhb。
寄存器组重叠限制是编码合法性的一部分。
vd 读取 {c,d,g,h},vs2 读取 {a,b,e,f};低两字 vs1[1:0] 提供两轮消息调度加常量,vd 写入新 {a,b,e,f}。
EGS=4、EGW=4*SEW;vl/vstart 非 4 的整数倍时编码保留。LMUL*VLEN<EGW 即使 vl=0 也引发非法指令异常。
支持 Zvknha 或 Zvknhb;分别依赖 Zve32x、Zve64x。执行延迟必须与输入数据无关。

向量执行上下文

语法 vsha2cl.vv vd, vs2, vs1;向量寄存器选择 v0–v31。没有立即数。固定 vm=1,不可掩码;vd 同时作为输入和输出。

32 位 OP-VE:funct6=101111[31:26],固定 vm=1[25],vs2[24:20],vs1[19:15],funct3=010,vd[11:7],opcode=1110111。

Zvknha 依赖 Zve32x,仅 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={c,d,g,h}、vs2={a,b,e,f};vs1 的低两字 [1:0]依次提供 W0(所选低字)、W1(所选高字)。两轮后仅把新 {a,b,e,f} 写入 vd;执行延迟必须与数据无关。

EGS=4、EGW=4*SEW;vl/vstart 非 4 的倍数、扩展不支持当前 SEW、或 vd 与 vs1/vs2 任一寄存器组重叠时编码保留。LMUL*VLEN<EGW 即使 vl=0 也引发非法指令异常。组按 LMUL 对齐;相同源寄存器读相同输入。

启用向量状态并使用合法受支持 vtype。prestart 保持,inactive/tail 遵守 vma/vta;vstart≥vl(含 vl=0)不更新任何目标元素。成功执行将 vstart 清零;非零 vstart 假定实现支持,否则允许非法指令异常。

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

常见使用场景

加密与密码

启用本页扩展与向量状态,合法受支持 vtype、LMUL=1、VLEN=256、vstart=0、无掩码;SEW=32, vl=4, v4={c,d,g,h}=0, v8={a,b,e,f}=0, v12=0: T1=T2=0 in both rounds; v4={a,b,e,f}=0。只列活动元素/组,尾部按 tu 保持;成功后 vstart=0。

向量化加速

启用本页扩展与向量状态,合法受支持 vtype、LMUL=1、VLEN=256、vstart=0、无掩码;SEW=32, vl=4, v4={c,d,g,h}=0, v8={a,b,e,f}=0, v12=0: T1=T2=0 in both rounds; v4={a,b,e,f}=0。只列活动元素/组,尾部按 tu 保持;成功后 vstart=0。

使用前检查清单

语法检查
  • 语法 vsha2cl.vv vd, vs2, vs1;向量寄存器选择 v0–v31。没有立即数。固定 vm=1,不可掩码;vd 同时作为输入和输出。
  • 32 位 OP-VE:funct6=101111[31:26],固定 vm=1[25],vs2[24:20],vs1[19:15],funct3=010,vd[11:7],opcode=1110111。
语义检查
  • Zvknha 依赖 Zve32x,仅 SEW=32(SHA-256);Zvknhb 依赖 Zve64x,支持 SEW=32/64(SHA-256/SHA-512)。vd={c,d,g,h}、vs2={a,b,e,f};vs1 的低两字 [1:0]依次提供 W0(所选低字)、W1(所选高字)。两轮后仅把新 {a,b,e,f} 写入 vd;执行延迟必须与数据无关。
  • EGS=4、EGW=4*SEW;vl/vstart 非 4 的倍数、扩展不支持当前 SEW、或 vd 与 vs1/vs2 任一寄存器组重叠时编码保留。LMUL*VLEN<EGW 即使 vl=0 也引发非法指令异常。组按 LMUL 对齐;相同源寄存器读相同输入。
  • 启用向量状态并使用合法受支持 vtype。prestart 保持,inactive/tail 遵守 vma/vta;vstart≥vl(含 vl=0)不更新任何目标元素。成功执行将 vstart 清零;非零 vstart 假定实现支持,否则允许非法指令异常。

容易混淆 / 常见误区

无 vm 操作数;该 element-group crypto 指令不可掩码执行。
vd 寄存器组不得与 vs1 或 vs2 重叠。
SHA-2 element group 使用 EGS=4;vl 与 vstart 必须按 element group 对齐。
本指令把各字作为小端字处理;处理完全部消息块后,最终哈希需要按标准转换为字内大端字节序。

常见问题

VSHA2CL.VV 是否支持 vm 掩码?

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

VSHA2CL.VV 的 SEW 怎么选?

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