Re: [PATCH] x86: Disable XCHG to MOV optimization

"H.J. Lu" <[email protected]> Sat, 18 Jul 2026 04:24:58 +0800
Newsgroups gmane.comp.gnu.binutils
Message-ID <CAMe9rOrOiAuh_6bOx4k=1S6ZjTYrCArmZUP9LbwneG6C+3h8GA@mail.gmail.com>
On Fri, Jul 17, 2026 at 7:02 PM Jan Beulich <[email protected]> wrote:
>
> On 17.07.2026 11:22, H.J. Lu wrote:
> > On Fri, Jul 17, 2026 at 4:44 PM Jan Beulich <[email protected]> wrote:
> >>
> >> 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.
> >
> > That is why I meant case by case.
>
> Well, I've now given you a case where the very first optimizations that
> were introduced break. Are you now agreeing that we need to rip them all

The primary goal of -O is to have shorter encoding.  Clearly you shouldn't
use it on codes which depend on encoding length.   In this case, -O0 or
.noopt should be used to totally turn off encoding optimization.

> out again? Or else is "case by case" yet more subjective than I understood
> so far, perhaps as in "H.J.'s optimizations are always okay, while Jan's
> never are"?
>

I assume that you didn't mean it.

-- 
H.J.