Instruction
XORPD
Computes the bitwise XOR of two XMM operands, as packed doubles; with the same register twice it zeroes it.
- Extensions
- Forms
- 2 (2 Legacy)
- Data
- Intel XED v2026.08.23
XORPD is the bitwise exclusive OR of two 128-bit values, the doubles' name for XORPS, whose page covers both of its uses: zeroing a register by XORing it with itself, and flipping signs with a constant of sign bits. VXORPD is the VEX and EVEX form, which zeroes a whole YMM or ZMM register from an xmm destination; this one writes over its first operand, leaves bits 128 and up as they were (see SSE and AVX) and needs a memory operand aligned to 16 bytes. Its encoding is XORPS’s with a 66 prefix, one byte longer.
Zen 5’s recorded cases show the bits at work: 0 XOR -0 gave -0, the denormal 15 times 2^-1074 XOR 1 gave 14 times 2^-1074, and -0 XOR an all-ones NaN gave 7FFFFFFFFFFFFFFFh, a NaN with its sign cleared. MXCSR stayed as it was.
Which compiler writes it
In our builds at -O2, with the default target and with
-march=x86-64-v2, the two compilers part ways:
- GCC 14 negates a
doublewithxorpd xmm0, XMMWORD PTR .LC1[rip], the constant -0.0 in its low half, and a loop over doubles with XORPD against the same constant held in a register. It zeroes registers with PXOR, doubles included. - Clang 23 uses XORPS for negation and for
_mm_xor_pdalike, and to zero_mm_setzero_pd(); it writes XORPD only to zero a register that double-precision instructions then use, as for the zero of a ReLU before MAXPD.
Intel’s optimization guide lists XORPD of a register with itself among the zero idioms that do not depend on the register’s old value (Section 3.5.1.7).
In the optimization guide
What the optimization guide says about XORPD, a line per claim. Each links to the claim in the guide, with its sources and where they differ.
Silvermont to Goldmont Plus
- Out-of-order and in-order execution: Silvermont recognizes xor zeroing at 32 bits and for XMM registers, not at 64 bits; Goldmont at 64 bits too.
Forms
Data flow
Where the elements of the sources go, element 0 on the right; results that depend on a control value are drawn for an example. How to read.
Result quadword i comes from quadword i of xmm1 and xmm2. Result quadwords 1 to 0: a1^b1, a0^b0.
Operation
What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.
for i in range(2):
xmm1.q[i] = xmm1.q[i] ^ src2.q[i]
# bits 128 and up of the register are unchangedRun on AMD Zen 5 (EPYC 9645): 2 cases.
Operands
| Operand | Kind | Action |
|---|---|---|
XORPD xmm, xmm/m128 | ||
xmm | explicit | read, write |
xmm/m128 | explicit | read |
Flags
None: XED records no flag that the forms test or change.
Exceptions
The exception class is XED's name for the set of exception conditions that a form follows. How to read.
- All forms
SSE_TYPE_4
Attributes
What else XED records about the forms. How to read.
- Memory forms
- aligned memory operand
CPUID and processors
Each form belongs to an XED ISA set. A form can be used when the processor reports every CPUID bit of one of its ISA set's alternatives.
| ISA set | CPUID | Processors |
|---|---|---|
SSE2 | SSE2 | Every x86-64 processor in XED’s model and Zen 3 to Zen 6 |
More SSE2 instructions
Sources
- Intel XED v2026.08.23 (commit
0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model. - The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s
-marchfeature sets and AMD’s Processor Programming References, which the page of each processor cites. - Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2D, page 6-42 (XORPD)
- Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1 (253665-093, September 2026)
- Intel 64 and IA-32 Architectures Optimization Reference Manual, Volume 1 (248966-051, October 2026)
The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The text is our own.