[PATCH] x86: Disable XCHG to MOV optimization
Jan Beulich
jbeulich@suse.com
Fri Jul 17 08:44:16 GMT 2026
On 15.07.2026 10:17, H.J. Lu wrote:
> GNU assembler is used by GCC to generate binaries. GCC may not
> always generate the optimal encoding. That is why I added -O to
> assembler in the first place. There is no point in adding it if it isn't safe.
> We can't break applications because of some assembler optimizations.
So this kind of thing will break with any optimization changing encoding
size:
test eax, eax
jnz $+9
test rcx, 0x21
(Intel syntax for all examples, as that's what I'm more used to.)
This clearly breaks as well:
test eax, eax
jz 1f+2
1: test bx, 0x21
As does this:
test ecx, ecx
jz $+4
mov rcx, 0xc9634890
While all of these may look contrived, I've seen code (not written by
myself) doing similar things. A construct branching into the middle of
an insn was (transiently) even considered to address one of the many
speculation issues we've seen over the last 8+ years.
Jan
More information about the Binutils
mailing list