adcs
Add with Carry and Set Flags (64-bit)
ADCS <Xd>, <Xn>, <Xm>
Adds two 64-bit register values and Carry, updating NZCV flags.
Pseudocode Operation
result ← Xn + Xm + C
Xd ← result
N ← result[63]
Z ← (result == 0)
C ← UnsignedOverflow(Xn, Xm, C)
V ← SignedOverflow(Xn, Xm, C)
Example
ADCS x0, x1, x2
Encoding
Binary Layout
1
31
0
30
1
29
11010000
28:21
Rm
20:16
000000
15:10
Rn
9:5
Rd
4:0
Operands
-
Xd
Destination 64-bit integer register -
Xn
First source / base 64-bit integer register -
Xm
Second source / offset 64-bit integer register
Related
Other forms of adcs
- adcs Add with Carry and Set Flags
Across architectures
Add With Carry : how x86, ARM, RISC-V, and PowerISA each do this.
More in Base
Reference
View in Arm A64 ISA Reference ↗
Arm A64 ISA
Instruction Forms
| Encoding | Instruction | ISA | Bit pattern | ||
|---|---|---|---|---|---|
| 0x3A000000 | ADCS <Wd>, <Wn>, <Wm> | A64 | 0 | 0 | 1 | 11010000 | Rm | 000000 | Rn | Rd | ||
| 0xBA000000 | ADCS <Xd>, <Xn>, <Xm> | A64 | 1 | 0 | 1 | 11010000 | Rm | 000000 | Rn | Rd |
Description
Add with Carry, setting flags, adds two register values and the Carry flag value, and writes the result to the destination register. It updates the condition flags based on the result.
Operation
bits(datasize) result; bits(datasize) operand1 = X[n, datasize]; bits(datasize) operand2 = X[m, datasize]; bits(4) nzcv; (result, nzcv) = AddWithCarry(operand1, operand2, PSTATE.C); PSTATE.<N,Z,C,V> = nzcv; X[d, datasize] = result;