首页/指令库/向量 AES 中间轮加密
VAESEM.VV

RISC-V VAESEM.VV 指令详解

指令手册OP-VE (32-bit)

向量 AES 中间轮加密:vd 中每个 128 位状态组使用 vs2 对应轮密钥组。

指令语法

vaesem.vv vd, vs2

vd、vs2 选择向量寄存器 v0–v31;没有立即数或第三源操作数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。

32 位 OP-VE:funct6=101000,vm=1,vs2[24:20],vs1=00010[19:15],funct3=010,vd[11:7],opcode=1110111。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vd 每个活动状态组经 SubBytes → ShiftRows → MixColumns 后与 vs2 对应组异或;同宽源/目的可以重叠。

从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

Zvkned向量密码AES

指令行为说明

vaesem.vv 对 vd 中每个活动的 128 位状态元素组依次执行 SubBytes、ShiftRows、MixColumns,再与 vs2 中对应的轮密钥元素组异或并写回 vd。要求 Zvkned、SEW=32;没有 v0.t 掩码操作数。

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

受限教学模型只展示官方 ISA 可见字段、状态与条件,不模拟完整密码协议或微架构。

vaesem.vv
fixed 101000 / vm=1 / vs1=00010vs2=v16vs1=00010funct3=010vd=v8opcode=1110111
执行数据路径

state -> SubBytes, ShiftRows, MixColumns, then AddRoundKey -> vd

结果待定

快速理解与检索要点

向量 AES 中间轮加密:vd 中每个 128 位状态组使用 vs2 对应轮密钥组。

执行 AES 中间轮加密,包含 SubBytes、ShiftRows、MixColumns 和轮密钥异或。
该 element-group 密码指令没有 vm 掩码操作数,按 element group 粒度执行。
SEW=32,EGW=128,EGS=4;vl 和 vstart 必须是 4 的倍数,且 LMUL*VLEN 必须容纳至少一个 element group。
执行延迟必须与操作数据无关;保留编码不承诺正常写回或固定异常行为。

向量执行上下文

vd、vs2 选择向量寄存器 v0–v31;没有立即数或第三源操作数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。

32 位 OP-VE:funct6=101000,vm=1,vs2[24:20],vs1=00010[19:15],funct3=010,vd[11:7],opcode=1110111。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vd 每个活动状态组经 SubBytes → ShiftRows → MixColumns 后与 vs2 对应组异或;同宽源/目的可以重叠。

从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

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

常见使用场景

加密与密码

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 与 v16 的输入元素组均为零。按基础示例的轮号与本页规则计算,得到 v8=0x63636363636363636363636363636363。

向量化加速

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 与 v16 的输入元素组均为零。按基础示例的轮号与本页规则计算,得到 v8=0x63636363636363636363636363636363。

使用前检查清单

语法检查
  • vd、vs2 选择向量寄存器 v0–v31;没有立即数或第三源操作数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。
  • 32 位 OP-VE:funct6=101000,vm=1,vs2[24:20],vs1=00010[19:15],funct3=010,vd[11:7],opcode=1110111。
语义检查
  • 要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vd 每个活动状态组经 SubBytes → ShiftRows → MixColumns 后与 vs2 对应组异或;同宽源/目的可以重叠。
  • 从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

容易混淆 / 常见误区

没有 vm 操作数;该 element-group crypto 指令不可掩码执行。
SEW 必须为 32,且每个 element group 为 128 位。
vd 同时是输入状态和目的寄存器。
SEW=32、EGW=128、EGS=4;vl 和 vstart 必须是 4 的整数倍,且 LMUL*VLEN 至少覆盖 128 位 element group。

常见问题

VAESEM.VV 是否总能带 v0.t 掩码?

不能。该类 element-group 密码指令没有 vm 操作数;不要把普通 RVV 掩码语法套到页面示例中。

VAESEM.VV 的元素宽度由什么决定?

仅定义 SEW=32,以 EGW=128、EGS=4 的元素组执行。其它 SEW、非 4 倍数的 vl 或 vstart 均为保留编码;LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。