ADD
9 forms of this instruction - jump to one below, or scroll through all of them.
Adds a register value and a sign/zero-extended register value.
Operands
-
Wd
Destination 32-bit integer register -
Wn
First source / base 32-bit integer register -
Wm
Second source / offset 32-bit integer register -
extend
Extension type
Encoding
Example
Pseudocode
Wd ← Wn + ExtendValue(Wm, extend, amount)
Adds a 64-bit register and an extended register value.
Operands
-
Xd
Destination 64-bit integer register -
Xn
First source / base 64-bit integer register -
Rm
Second source / offset general-purpose register
Encoding
Example
Pseudocode
Xd ← Xn + ExtendValue(Rm, extend, amount)
Adds a register value and an immediate value.
Operands
-
Wd
Destination 32-bit integer register -
Wn
First source / base 32-bit integer register -
imm
Immediate (12-bit)
Encoding
Example
Pseudocode
Wd ← Wn + (imm << (sh * 12))
Adds a 64-bit register value and an immediate value.
Operands
-
Xd
Destination 64-bit integer register -
Xn
First source / base 64-bit integer register -
imm
Signed immediate value
Encoding
Example
Pseudocode
Xd ← Xn + (imm << (sh * 12))
Adds a register value and a shifted register value.
Operands
-
Wd
Destination 32-bit integer register -
Wn
First source / base 32-bit integer register -
Wm
Second source / offset 32-bit integer register
Encoding
Example
Pseudocode
Wd ← Wn + ShiftReg(Wm, shift_type, shift_amount)
Adds a 64-bit register value and a shifted register value.
Operands
-
Xd
Destination 64-bit integer register -
Xn
First source / base 64-bit integer register -
Xm
Second source / offset 64-bit integer register
Encoding
Example
Pseudocode
Xd ← Xn + ShiftReg(Xm, shift_type, shift_amount)
Vector Add (Integer) #
NEON (SIMD)Adds corresponding elements in two vectors.
Operands
-
Vd
Destination SIMD/FP vector register -
Vn
First source SIMD/FP vector register -
Vm
Second source SIMD/FP vector register
Encoding
Example
Pseudocode
for i = 0 to elements_in_vector - 1
Vd[i] ← Vn[i] + Vm[i]
Adds two vectors under predicate control.
Operands
-
Zdn
Dest/Src1 -
Pg
Merge Mask -
Zm
Second source scalable vector register (SVE)
Encoding
Example
Pseudocode
for i in 0 to VL/element_width - 1:
if Pg[i] == 1:
Zdn[i] ← Zdn[i] + Zm[i]
// else: Zdn[i] remains unchanged
Add (A32) #
A32 (Base)Adds two 32-bit values.
Operands
-
Rd
Destination general-purpose register -
Rn
First source / base general-purpose register -
Rm
Second source / offset general-purpose register
Encoding
Example
Pseudocode
result ← Rn + (Rm << shift_amount)
Rd ← result[31:0]
if S then
N ← result[31]
Z ← (result == 0)
C ← CarryOut(Rn, Rm << shift_amount)
V ← OverflowFrom(Rn, Rm << shift_amount)
Related
Across architectures
Integer Addition : how x86, ARM, RISC-V, and PowerISA each do this.
More in Base