首页/指令库/VSM4K.VI
VSM4K.VI

RISC-V VSM4K.VI 指令详解

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

向量 SM4 密钥扩展:uimm[2:0] 选择轮组,一次生成接下来的四个轮密钥。

指令语法

vsm4k.vi vd, vs2, uimm

语法 vsm4k.vi vd, vs2, uimm;v0–v31 为向量寄存器,uimm 为 0–31 的 5 位无符号立即数。固定 vm=1,不可加入 v0.t 掩码。

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

Zvksed 依赖 Zve32x,仅 SEW=32。vs2 提供四个轮密钥;uimm[2:0] 选择 CK 常量轮组,uimm[4:3] 忽略。经 S-box 和循环左移 13/23 位生成接下来四个轮密钥;vd 只作输出。花括号按高元素索引到低索引排列。

EGS=4、EGW=128。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。没有额外的 vd/vs2 重叠禁令;同名源读取相同原值。组遵守 LMUL 对齐;.vs 标量组的 EMUL=ceil(EGW/VLEN)。

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

Zvksed向量密码SM4

指令行为说明

从 vs2 向 vd 生成四个新轮密钥。uimm[2:0] 选择轮组,uimm[4:3] 忽略。SEW=32、EGW=128、EGS=4。

VSM4K.VI 指令解析与执行动画

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

vsm4k.vi

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

以下列表按元素索引从低到高排列;只展示活动组,tail 按 tu 保持。 vs2[rk0..rk3]=[0,1,2,3].

funct6=100001vm=1vs2=01000uimm=00000OPMVV=010vd=00100OP-VE=1110111
执行数据路径

OP-VE -> funct6 100001 -> vsm4k.vi

结果待定

快速理解与检索要点

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

VSM4K.VI 使用 128 位 element group;uimm[2:0] 选择轮组,uimm[4:3] 被忽略。
官方语法没有 vm,不能添加 v0.t 掩码。

向量执行上下文

语法 vsm4k.vi vd, vs2, uimm;v0–v31 为向量寄存器,uimm 为 0–31 的 5 位无符号立即数。固定 vm=1,不可加入 v0.t 掩码。

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

Zvksed 依赖 Zve32x,仅 SEW=32。vs2 提供四个轮密钥;uimm[2:0] 选择 CK 常量轮组,uimm[4:3] 忽略。经 S-box 和循环左移 13/23 位生成接下来四个轮密钥;vd 只作输出。花括号按高元素索引到低索引排列。

EGS=4、EGW=128。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。没有额外的 vd/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;按语法指定的寄存器组预置输入。示例 uimm=0。按本页元素组数据流计算,动画列出初值与结果;成功后 vstart=0。

向量化加速

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

使用前检查清单

语法检查
  • 语法 vsm4k.vi vd, vs2, uimm;v0–v31 为向量寄存器,uimm 为 0–31 的 5 位无符号立即数。固定 vm=1,不可加入 v0.t 掩码。
  • 32 位 OP-VE:funct6=100001[31:26]、vm=1[25]、vs2[24:20]、uimm[19:15]、OPMVV=010[14:12]、vd[11:7]、opcode=1110111[6:0]。
语义检查
  • Zvksed 依赖 Zve32x,仅 SEW=32。vs2 提供四个轮密钥;uimm[2:0] 选择 CK 常量轮组,uimm[4:3] 忽略。经 S-box 和循环左移 13/23 位生成接下来四个轮密钥;vd 只作输出。花括号按高元素索引到低索引排列。
  • EGS=4、EGW=128。vl/vstart 非 EGS 的整数倍或不支持的 SEW 属保留编码;LMUL*VLEN<EGW 即使 vl=0 也触发非法指令异常。没有额外的 vd/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 指令不可掩码执行。
SEW 必须为 32,vl/vstart 必须是 EGS=4 的整数倍。
uimm[2:0] 是轮组号;uimm[4:3] 被忽略,且本指令没有额外的 vd/vs2 重叠保留条件。

常见问题

VSM4K.VI 是否逐元素可掩码?

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

VSM4K.VI 的 vtype 关键限制是什么?

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