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

RISC-V VMADC.VIM 指令详解

指令手册R-type

VMADC 计算每个 body 元素的进位输出,并把布尔结果写入目标掩码寄存器。

指令语法

vmadc.vim vd, vs2, imm, v0
操作数说明
vd:掩码目标寄存器,每个元素产生一位布尔结果。
vs2/vs1 或标量源:按当前 SEW 参与比较。
vm:vm=0 使用 v0 限制参与比较的元素,vm=1 为未掩码。
V向量整数运算进位/借位

指令行为说明

VMADC.VIM 是 RISC-V V 扩展的向量-立即数加法进位输出指令。它不写 SEW 宽整数结果,而是对每个当前 vl 范围内的 body 元素计算 vs2 + 第二源 + v0[i] 的进位输出,并写成目标 mask 的一位。v0 是 carry-in 算术输入,不是普通 v0.t 执行掩码。

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

从 OP-V 编码字段开始,展示 VMADC 如何把 v0 对应 bit 作为 carry-in,并把逐元素 carry-out 写成目标 mask bit。

输入的指令
vmadc.vim
v0
v0
算术输入,不是执行掩码
立即数值
5 -> 0x0005
5-bit signed imm 符号扩展到 SEW
OP-V encodingvmadc.vim
funct6
010001
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.mask
...
...
...
...
...
...
...
...
当前步骤

显示 OP-V 32 位编码字段

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

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

快速理解与检索要点

VMADC 是多字精度加法的进位生成指令:v0 提供输入位,vd.mask[i] 保存输出位。

OP-V 编码使用 funct6=010001,并通过 funct3 区分 .vv/.vx/.vi 形式。
VMADC.VIM 固定使用 v0 的对应 mask bit 作为 carry-in;这不是普通 v0.t 执行掩码。
目标 vd 是 mask 结果,每个 body 元素写一位。
VMADC 可与 VADC 配合完成多字精度加法链路。

向量执行上下文

阅读 VMADC.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

常见使用场景

多精度加法

结合 «vmadc.vim v1, v2, 1, v0» 等实际代码理解该场景。

大整数运算

结合 «vmadc.vim v1, v2, 1, v0» 等实际代码理解该场景。

进位传递

结合 «vmadc.vim v1, v2, 1, v0» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

v0 在 VMADC.VIM 中是 carry-in 算术输入,不是普通 masked execution 的元素开关。
VMADC 写目标掩码位,不写普通 SEW 宽整数向量元素。
VMADC 的每个 mask 结果是一位 predicate,不要按 SEW 宽整数解释。

常见问题

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

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

VMADC.VIM 写什么结果?

它写目标 mask 的一位 carry-out 结果。