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

RISC-V VSM4R.VV 指令详解

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

向量 SM4 四轮加密/解密;作为不可掩码的 element-group 密码指令执行。

指令语法

vsm4r.vv vd, vs2

语法 vsm4r.vv vd, vs2;vd 提供当前四字状态并接收下一状态,vs2 提供对应组四个轮密钥;向量寄存器为 v0–v31,不能添加 v0.t。

32 位 OP-VE:funct6=101000、vm=1、vs1字段固定10000、OPMVV=010、opcode=1110111。Zvksed 依赖 Zve32x。

执行四轮:B=x1 XOR x2 XOR x3 XOR rk;S=逐字节SM4 S-box(B);下一字=x0 XOR S XOR ROL32(S,2/10/18/24)。解密按相反次序提供轮密钥。

SEW=32、EGS=4、EGW=128;vl/vstart非4倍数或其它SEW为保留。LMUL*VLEN<128即使vl=0也引发非法指令。vd/vs2可同宽重叠并读原值,组按LMUL对齐。

启用向量状态和合法vtype;仅活动组执行,prestart保持、tail按vta。vstart≥vl不更新目标;成功将vstart清零,非零vstart须实现支持。执行延迟必须与数据无关。

Zvksed向量密码SM4

指令行为说明

VSM4R.VV 属于 Zvksed:从 vd 读取四个32位当前状态字,从 vs2 对应元素组读取四个轮密钥,按 SM4 S-box、循环移位和异或执行四轮,将下一四字状态写回 vd。SEW=32、EGS=4、EGW=128;固定 vm=1,不可掩码。解密使用相反顺序的轮密钥。

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

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

vsm4r.vv

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

以下列表按元素索引从低到高排列;只展示活动组,tail 按 tu 保持。 vd[x0..x3]=[0,1,2,3]; vs2[rk0..rk3]=[4,5,6,7]. .vv 从 vs2 读取与当前 vd 状态组对应的轮密钥组。

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

OP-VE -> funct6 101000 -> vsm4r.vv

结果待定

快速理解与检索要点

VSM4R.VV 是 SM4 向量密码指令,按 element group 执行,不能逐元素独立套用普通整数公式。

32 位 OP-VE:funct6=101000、vm=1、vs1=10000、funct3=010(OPMVV)、opcode=1110111。vd 同时作输入和输出;.vv 的 vs2 读取对应轮密钥组,允许与 vd 同宽重叠并读取原值。
Zvksed 依赖 Zve32x。SEW≠32、vl/vstart 非4的整数倍为保留编码;LMUL*VLEN<128 即使 vl=0 也引发非法指令异常。组须满足 LMUL 对齐。
仅处理 vstart/4≤i<vl/4 的组;prestart 保持,tail 遵守 vta。vstart≥vl(含vl=0)不更新目标,成功完成后 vstart=0;要求启用向量状态和合法 vtype。执行延迟必须与数据无关。

向量执行上下文

语法 vsm4r.vv vd, vs2;vd 提供当前四字状态并接收下一状态,vs2 提供对应组四个轮密钥;向量寄存器为 v0–v31,不能添加 v0.t。

32 位 OP-VE:funct6=101000、vm=1、vs1字段固定10000、OPMVV=010、opcode=1110111。Zvksed 依赖 Zve32x。

执行四轮:B=x1 XOR x2 XOR x3 XOR rk;S=逐字节SM4 S-box(B);下一字=x0 XOR S XOR ROL32(S,2/10/18/24)。解密按相反次序提供轮密钥。

SEW=32、EGS=4、EGW=128;vl/vstart非4倍数或其它SEW为保留。LMUL*VLEN<128即使vl=0也引发非法指令。vd/vs2可同宽重叠并读原值,组按LMUL对齐。

启用向量状态和合法vtype;仅活动组执行,prestart保持、tail按vta。vstart≥vl不更新目标;成功将vstart清零,非零vstart须实现支持。执行延迟必须与数据无关。

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

常见使用场景

SM4 四轮状态变换

启用本页扩展与向量状态,合法 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。

使用前检查清单

语法检查
  • 语法 vsm4r.vv vd, vs2;vd 提供当前四字状态并接收下一状态,vs2 提供对应组四个轮密钥;向量寄存器为 v0–v31,不能添加 v0.t。
  • 32 位 OP-VE:funct6=101000、vm=1、vs1字段固定10000、OPMVV=010、opcode=1110111。Zvksed 依赖 Zve32x。
语义检查
  • 执行四轮:B=x1 XOR x2 XOR x3 XOR rk;S=逐字节SM4 S-box(B);下一字=x0 XOR S XOR ROL32(S,2/10/18/24)。解密按相反次序提供轮密钥。
  • SEW=32、EGS=4、EGW=128;vl/vstart非4倍数或其它SEW为保留。LMUL*VLEN<128即使vl=0也引发非法指令。vd/vs2可同宽重叠并读原值,组按LMUL对齐。
  • 启用向量状态和合法vtype;仅活动组执行,prestart保持、tail按vta。vstart≥vl不更新目标;成功将vstart清零,非零vstart须实现支持。执行延迟必须与数据无关。

容易混淆 / 常见误区

无 vm 操作数;该 element-group crypto 指令不可掩码执行。
SEW 必须为 32,vl/vstart 必须是 EGS=4 的整数倍。
VSM4R.VV 允许 vd 与 vs2 寄存器组重叠;该重叠保留条件只适用于 .vs 形式。

常见问题

VSM4R.VV 是否逐元素可掩码?

不是。它是 element-group 密码指令,官方语法无 vm。

VSM4R.VV 的 vtype 关键限制是什么?

SEW 必须为 32,且 LMUL*VLEN 要能覆盖 128 位 element group。