Home/Instructions/VNMSAC-VX
VNMSAC.VX

RISC-V VNMSAC.VX Instruction Details

Instruction ManualR-type

Vector integer negative multiply-accumulate using vd as the accumulator.

Instruction Syntax

vnmsac.vx vd, rs1, vs2, vm
Operand Breakdown
Destination rd: register receiving the operation result.
Source rs1: register holding the first operand.
Source rs2: register holding the second operand.
VVector IntegerMultiply-Accumulate

Instruction Behavior

VNMSAC.VX computes vd[i] - (x[rs1] * vs2[i]) for active elements and writes the low SEW bits back to vd.

Quick Understanding & Search Notes

VNMSAC.VX is a destructive integer multiply-add class instruction; vd participates in the operation and receives the result.

The official operand order is vd, multiplier source, vs2, vm; do not swap vs1/rs1 with vs2.
The result is truncated to SEW width and does not raise integer overflow exceptions.
vm=0 uses v0 as the execution mask; vm=1 is unmasked.

Common Usage Scenarios

Difference

e.g., sub t0, a0, a1 — compute the difference a0 - a1.

Pre-Use Checklist

Syntax Check
  • Confirm the current instruction format is R-type.
  • Confirm the operand order matches the example.
Semantic Check
  • Ensure the destination register usage is compatible with the calling convention.
  • Confirm this is not the lower-level form of a pseudo-instruction expansion.

Pitfalls / Common Confusions

vnmsac subtracts the product from the old vd accumulator.
Old vd is the overwritten addend/accumulator; vnmsub instead overwrites old vd as a multiplicand.
The low SEW bits are written and no integer overflow exception is raised.

FAQ

Is vd only a write destination for VNMSAC.VX?

No. This class is destructive: the old vd value participates as an accumulator or multiplicand.