首页/指令库/VAESDF-VS
VAESDF.VS

RISC-V VAESDF.VS 指令详解

指令手册OP-VE vector-scalar form

向量 AES 末轮解密:所有 128 位状态组使用 vs2 中一个标量轮密钥组。

指令语法

vaesdf.vs vd, vs2

vd 同时提供旧状态并接收新状态;vs2 提供 128 位轮密钥组。操作数是向量寄存器,没有 v0.t 或整数标量源。

32 位 OP-VE:opcode=1110111,funct6=101001,vm=1,vs1=00001,funct3=010;vs1 字段不是源操作数。

要求 Zvkned,SEW=32、EGW=128、EGS=4。逆行移位后逆字节替换,再异或 vs2 元素组 0;vd 与此标量密钥组重叠的编码保留;最终轮没有 InvMixColumns。

vl 与 vstart 必须是 4 的整数倍,否则编码保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常;其它 SEW 的编码保留。

Zvkned向量密码AES

指令行为说明

vaesdf.vs 执行 AES 末轮解密操作。它以 128 位 element group 为单位读取 vd 中的状态,依次应用 InvShiftRows 和 InvSubBytes,再与 vs2 中一个标量 128 位轮密钥 element group 异或,并将新状态写回 vd。SEW 必须为 32。

VAESDF.VS 指令解析与执行动画

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

vaesdf.vs
fixed 101001 / vm=1 / vs1=00001vs2=v16vs1=00001funct3=010vd=v8opcode=1110111
执行数据路径

state -> InvShiftRows, InvSubBytes, then AddRoundKey -> vd

结果待定

快速理解与检索要点

VAESDF.VS 对 vd 中的 128 位状态组执行逆行移位、逆字节替换,然后与 vs2 的标量轮密钥组异或;SEW=32。

执行 AES 最终轮解密:InvShiftRows、InvSubBytes 后与轮密钥异或;SEW 必须为 32,element group 为 128 位。
该 element-group 密码指令没有 vm 掩码操作数,按 element group 粒度执行。
SEW=32,EGW=128,EGS=4;vl 和 vstart 必须是 4 的倍数,且 LMUL*VLEN 必须容纳至少一个 element group。

向量执行上下文

vd 同时提供旧状态并接收新状态;vs2 提供 128 位轮密钥组。操作数是向量寄存器,没有 v0.t 或整数标量源。

32 位 OP-VE:opcode=1110111,funct6=101001,vm=1,vs1=00001,funct3=010;vs1 字段不是源操作数。

要求 Zvkned,SEW=32、EGW=128、EGS=4。逆行移位后逆字节替换,再异或 vs2 元素组 0;vd 与此标量密钥组重叠的编码保留;最终轮没有 InvMixColumns。

vl 与 vstart 必须是 4 的整数倍,否则编码保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常;其它 SEW 的编码保留。

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=0x52525252525252525252525252525252。

向量化加速

Zvkned,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0,v8 状态与 v16 密钥均为零:成功后 v8=0x52525252525252525252525252525252。

使用前检查清单

语法检查
  • vd 同时提供旧状态并接收新状态;vs2 提供 128 位轮密钥组。操作数是向量寄存器,没有 v0.t 或整数标量源。
  • 32 位 OP-VE:opcode=1110111,funct6=101001,vm=1,vs1=00001,funct3=010;vs1 字段不是源操作数。
语义检查
  • 要求 Zvkned,SEW=32、EGW=128、EGS=4。逆行移位后逆字节替换,再异或 vs2 元素组 0;vd 与此标量密钥组重叠的编码保留;最终轮没有 InvMixColumns。
  • vl 与 vstart 必须是 4 的整数倍,否则编码保留。LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常;其它 SEW 的编码保留。

容易混淆 / 常见误区

没有 vm 操作数;该 element-group crypto 指令不可掩码执行。
`.vs` 标量操作数是向量寄存器 vs2 中的 element group,不是 GPR 或 FP 标量寄存器。
对于 `.vs` 形式,vd 不得与 vs2 标量 element group 重叠。
SEW=32、EGW=128、EGS=4;vl 和 vstart 必须是 4 的整数倍,且 LMUL*VLEN 至少覆盖 128 位 element group。

常见问题

VAESDF.VS 是否总能带 v0.t 掩码?

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

VAESDF.VS 的元素宽度由什么决定?

该指令固定 SEW=32 并以 128 位 element group 执行;其它 SEW 的编码是保留编码。