VREV8.V

RISC-V VREV8.V 指令详解

指令手册OP-V OPMVV (funct6=010010, vs1=01001, funct3=010)

向量字节反转:反转每个SEW元素的字节顺序(端序转换)

指令语法

vrev8.v vd, vs2, vm

语法 vrev8.v vd, vs2[, v0.t];向量寄存器选择 v0–v31。省略 v0.t 为 vm=1,加入为 vm=0。没有立即数。

32 位 OP-V:funct6=010010,vm[25],vs2[24:20],01001[19:15](固定选择子),funct3=010,vd[11:7],opcode=1010111。

Zvbb 或 Zvkb 依赖 Zve32x,支持 SEW=8/16/32,64 另需 Zve64x。每个活动元素反转字节位置,字节内部位序不变。

启用向量状态并使用合法受支持的 vtype;同宽源/目的可重叠,读取原始源值,LMUL>1 的组须对齐。vm=0 时 vd 不得与 v0 重叠,v0 不能同时供给 SEW 数据与 EEW=1 掩码。

仅处理 body 内活动元素,prestart 保持,inactive/tail 遵守 vma/vta。vstart≥vl(含 vl=0)不更新任何目标元素;成功执行清零 vstart。实现可拒绝不支持的非零 vstart。

ZvbbZvkb向量位操作

指令行为说明

vrev8.v 由 Zvbb 或 Zvkb 提供,反转每个活动 SEW 元素内的字节顺序。例如 SEW=32 时,0x12345678 变为 0x78563412;各字节内部位序不变。

VREV8.V 指令解析与执行动画

此有界模型只展示 lane 0 的 ISA 可见状态;不表示流水线、密码协议或未指定的非活跃/尾部值。

执行环境:启用本页扩展与向量状态,合法支持的 vtype,LMUL=1、VLEN≥64×SEW,仅展开 lane 0;vl=32/64 不复制 lane 0 到其他元素。SEW=64 要求 Zve64x。非零 vstart 假设实现支持,否则可产生非法指令异常。

有界执行环境
32 位 OP-V 编码字段
31..26
funct6
010010
25
vm
1
24..20
vs2
01000
19..15
vs1 fixed
01001
14..12
funct3
010
11..7
vd
00100
6..0
OP-V
1010111
执行数据路径

funct6=010010, funct3=010, Zvbb/Zvkb

v4[0] <- pending

快速理解与检索要点

逐元素反转字节顺序;SEW=8 时每个元素只有一个字节,因此值不变。

反转每个 SEW 元素内的字节顺序,不反转字节内部位序。
遵守 V 扩展的 vl、vstart、vtype 和可选 vm 掩码规则。
Zvbb 或 Zvkb 均提供本指令,依赖 Zve32x;SEW=8/16/32,SEW=64 另需 Zve64x。
body 为 vstart≤i<vl;prestart 保持,inactive/tail 按 vma/vta。vstart≥vl(包括 vl=0)保持全部目标元素;成功后 vstart=0。
vm=0 使用 v0.t,vd 不得为 v0,v0 也不能同时作为 SEW 数据源;同 EEW 的普通数据源与目标允许重叠。非零 vstart 须为实现支持的值。

向量执行上下文

语法 vrev8.v vd, vs2[, v0.t];向量寄存器选择 v0–v31。省略 v0.t 为 vm=1,加入为 vm=0。没有立即数。

32 位 OP-V:funct6=010010,vm[25],vs2[24:20],01001[19:15](固定选择子),funct3=010,vd[11:7],opcode=1010111。

Zvbb 或 Zvkb 依赖 Zve32x,支持 SEW=8/16/32,64 另需 Zve64x。每个活动元素反转字节位置,字节内部位序不变。

启用向量状态并使用合法受支持的 vtype;同宽源/目的可重叠,读取原始源值,LMUL>1 的组须对齐。vm=0 时 vd 不得与 v0 重叠,v0 不能同时供给 SEW 数据与 EEW=1 掩码。

仅处理 body 内活动元素,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=1, v8[0]=0x12345678: v4[0]=0x78563412。示例只给出活动组/元素,尾部按 tu 保持。成功后 vstart=0。

向量化加速

启用本页扩展与向量状态、合法受支持 vtype、LMUL=1、VLEN=256、vstart=0、无掩码;SEW=32, vl=1, v8[0]=0x12345678: v4[0]=0x78563412。示例只给出活动组/元素,尾部按 tu 保持。成功后 vstart=0。

使用前检查清单

语法检查
  • 语法 vrev8.v vd, vs2[, v0.t];向量寄存器选择 v0–v31。省略 v0.t 为 vm=1,加入为 vm=0。没有立即数。
  • 32 位 OP-V:funct6=010010,vm[25],vs2[24:20],01001[19:15](固定选择子),funct3=010,vd[11:7],opcode=1010111。
语义检查
  • Zvbb 或 Zvkb 依赖 Zve32x,支持 SEW=8/16/32,64 另需 Zve64x。每个活动元素反转字节位置,字节内部位序不变。
  • 启用向量状态并使用合法受支持的 vtype;同宽源/目的可重叠,读取原始源值,LMUL>1 的组须对齐。vm=0 时 vd 不得与 v0 重叠,v0 不能同时供给 SEW 数据与 EEW=1 掩码。
  • 仅处理 body 内活动元素,prestart 保持,inactive/tail 遵守 vma/vta。vstart≥vl(含 vl=0)不更新任何目标元素;成功执行清零 vstart。实现可拒绝不支持的非零 vstart。

容易混淆 / 常见误区

反转字节顺序,而非字节内位序。与 vbrev8.v 功能正交。

常见问题

VREV8.V 如何使用掩码?

可选汇编操作数是 v0.t:省略时 vm=1,加入时 vm=0。掩码形式的 vd 不能与 v0 重叠。

VREV8.V 的元素宽度由什么决定?

由合法且受支持的 vtype.SEW 决定:Zve32x 下为 8、16、32 位;64 位还需要 Zve64x。