首页/指令库/VADC-VIM
VADC.VIM

RISC-V VADC.VIM 指令详解

指令手册R-type

VADC 使用 v0 对应 bit 作为 carry-in,计算每个 body 元素的 低 SEW 位求和值 并写回 vd。

指令语法

vadc.vim vd, vs2, imm, v0
操作数说明
vd:目标向量寄存器组。
vs2/vs1 或标量源:按指令后缀 .vv/.vx/.vi/.vf 决定来源。
vm:若语法包含 vm,vm=0 使用 v0 作为执行掩码,vm=1 为未掩码。
V向量运算

指令行为说明

VADC.VIM 是 RISC-V V 扩展的向量-立即数带进位加法指令。它对每个当前 vl 范围内的 body 元素计算 vs2 + 第二源 + v0[i],把低 SEW 位求和值 写入普通向量目标 vd。v0 是 carry-in 算术输入,不是普通 v0.t 执行掩码;进位输出需要使用 VMADC 生成。

VADC.VIM 指令解析与执行动画

从 OP-V 编码字段开始,展示 VADC 如何把 v0 对应 bit 作为 carry-in,执行 SEW 宽带进位加法并写回求和值。

输入的指令
vadc.vim
v0
v0
算术输入,不是执行掩码
立即数值
5 -> 0x0005
5-bit signed imm 符号扩展到 SEW
OP-V encodingvadc.vim
funct6
010000
vm
0
vs2
01000
simm5
00101
funct3
011
vd
00100
opcode
1010111
lane
0
1
2
3
4
5
6
7
v8
0xffff
0x010b
0x011c
0xfffc
0x013e
0x014f
0xfffe
0x0171
+cin
+cin
+cin
+cin
+cin
+cin
+cin
+cin
imm
0x0005
0x0005
0x0005
0x0005
0x0005
0x0005
0x0005
0x0005
cin
1
0
1
1
1
0
1
1
v4
...
...
...
...
...
...
...
...
当前步骤

显示 OP-V 32 位编码字段

vadc.vim 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 imm 字段放在同一条编码带中。

动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、SEW 宽度整数带进位加法、v0 carry/borrow 输入和 vd 写回;不模拟流水线、缓存或执行时延。

快速理解与检索要点

VADC 是多字精度加法的数据结果指令:v0 提供输入位,vd 保存低 SEW 位结果,输出位由 VMADC 生成。

OP-V 编码使用 funct6=010000,并通过 funct3 区分 .vv/.vx/.vi 形式。
VADC.VIM 固定使用 v0 的对应 mask bit 作为 carry-in;这不是普通 v0.t 执行掩码。
目标 vd 是普通向量结果;整数结果按 SEW 截断,输出位不由本指令写出。
官方 V 扩展规定 VADC 的 vd 不能是 v0。

向量执行上下文

阅读 VADC.VIM 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。

先看 vl

当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。

再看 vtype

当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。

最后看 vm/v0

带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。

官方来源:RISC-V V Standard Extension for Vector Operations

常见使用场景

位操作与掩码

结合 «vadc.vim vd, vs2, 0, v0» 等实际代码理解该场景。

向量运算

结合 «vadc.vim vd, vs2, 0, v0» 等实际代码理解该场景。

循环与迭代

结合 «vadc.vim vd, vs2, 0, v0» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

v0 在 VADC.VIM 中是 carry-in 算术输入,不是普通 masked execution 的元素开关。
VADC 只写 低 SEW 位求和值,不会写出进位掩码;需要 VMADC。
VADC 的 vd 不能编码为 v0;v0 已固定作为 carry-in 输入。

常见问题

v0 在 VADC.VIM 中是执行掩码吗?

不是。v0 的对应 bit 是 carry-in 算术输入。

VADC.VIM 写什么结果?

它写 低 SEW 位求和值;carry-out 由 VMADC 生成。