fadd
				Floating Add - FC 00 00 2A
			fadd
		Instruction Syntax
| Mnemonic | Format | Flags | 
| fadd | frD,frA,frB | Rc = 0 | 
| fadd. | frD,frA,frB | Rc = 1 | 
Instruction Encoding
1
				1
				1
				1
				1
				1
			D
				D
				D
				D
				D
			A
				A
				A
				A
				A
			B
				B
				B
				B
				B
			0
				0
				0
				0
				0
			0
				0
				0
				0
				1
				0
				1
				0
				1
			Rc
			| Field | Bits | Description | 
| Primary Opcode | 0-5 | 111111 (0x3F) | 
| frD | 6-10 | Destination floating-point register | 
| frA | 11-15 | Source floating-point register A | 
| frB | 16-20 | Source floating-point register B | 
| Reserved | 21-25 | 00000 | 
| XO | 26-30 | 10101 (21) | 
| Rc | 31 | Record Condition Register | 
Operation
frD ← (frA) + (frB)
The contents of floating-point register frA are added to the contents of floating-point register frB. The result is placed into floating-point register frD.
Note: Both operands and the result are in double-precision format. The addition follows IEEE-754 standard for floating-point arithmetic.
Affected Registers
Condition Register (CR1 field)
(if Rc = 1)
- Reflects floating-point exception summary and status
Floating-Point Status and Control Register (FPSCR)
Affected fields:
- FPRF (Floating-Point Result Flags)
- FX (Floating-Point Exception Summary)
- OX (Overflow Exception)
- UX (Underflow Exception)
- XX (Inexact Exception)
- VXISI (Invalid Operation Exception for ∞ - ∞)
- FR (Fraction Rounded)
- FI (Fraction Inexact)
For more information on floating-point status see Section 2.1.4, "Floating-Point Status and Control Register (FPSCR)," in the PowerPC Microprocessor Family: The Programming Environments manual.
Examples
Basic Floating-Point Addition
lfd f1, value_a(r0) # Load first operand lfd f2, value_b(r0) # Load second operand fadd f3, f1, f2 # f3 = f1 + f2 stfd f3, result(r0) # Store result
Addition with Condition Recording
lfd f1, input1(r0) # Load first input lfd f2, input2(r0) # Load second input fadd. f3, f1, f2 # f3 = f1 + f2, set CR1 with FP status # CR1 now reflects floating-point exception status
Vector Addition
# Add corresponding components of two 3D vectors lfd f1, vector1_x(r0) # Load vector1.x lfd f2, vector1_y(r0) # Load vector1.y lfd f3, vector1_z(r0) # Load vector1.z lfd f4, vector2_x(r0) # Load vector2.x lfd f5, vector2_y(r0) # Load vector2.y lfd f6, vector2_z(r0) # Load vector2.z fadd f7, f1, f4 # result.x = vector1.x + vector2.x fadd f8, f2, f5 # result.y = vector1.y + vector2.y fadd f9, f3, f6 # result.z = vector1.z + vector2.z
Accumulator Pattern
# Sum elements in an array
lfd f1, initial_sum(r0)    # Load initial sum (often 0.0)
lis r3, array@ha           # Load array address
addi r3, r3, array@l
li r4, 10                  # Array size
sum_loop:
    lfdx f2, r3, r5        # Load array element
    fadd f1, f1, f2        # Add to accumulator
    addi r5, r5, 8         # Next element (8 bytes per double)
    addic. r4, r4, -1      # Decrement counter
    bne sum_loop           # Continue if more elements
# f1 now contains the sum
		Mathematical Expression
# Calculate: result = (a + b) + (c + d) lfd f1, a(r0) # Load a lfd f2, b(r0) # Load b lfd f3, c(r0) # Load c lfd f4, d(r0) # Load d fadd f5, f1, f2 # f5 = a + b fadd f6, f3, f4 # f6 = c + d fadd f7, f5, f6 # f7 = (a + b) + (c + d)
Complex Number Addition
# Add two complex numbers: (a + bi) + (c + di) lfd f1, complex1_real(r0) # Load real part of first complex lfd f2, complex1_imag(r0) # Load imaginary part of first complex lfd f3, complex2_real(r0) # Load real part of second complex lfd f4, complex2_imag(r0) # Load imaginary part of second complex fadd f5, f1, f3 # Real part: a + c fadd f6, f2, f4 # Imaginary part: b + d # Result: f5 + f6*i