[Valgrind-developers] [PATCH 1/2] x86: optimize XCHG to MOV for same-register forms
Jan Beulich
jbeulich@suse.com
Mon Jul 27 07:13:45 GMT 2026
On 24.07.2026 14:11, Maciej W. Rozycki wrote:
> On Mon, 20 Jul 2026, Michael Matz wrote:
>
>>> Since this is a new feature retrofitted to the x86 assembly dialect very
>>> late in the game I'd question whether a command-line option is the right
>>> way to drive it rather than say a new pseudo-op to opt in, which is then
>>> tied to the source the writer wants to be optimised for some reason.
>>
>> That would have been another way, yes. And I somewhat understand being
>> surprised by the transformations, but before I wrote my message I tried to
>> reflect a little on that and really came to the conclusion that insn
>> rewriting really is nothing new, not even on x86(-64): it uses short
>> encodings for jumps, uses a randomly chosen encoding (usually the smaller
>> one) for insns that have multiple ones (see Alans mail), and the linker
>
> Sure, it is a peculiarity of the x86 instruction set known to me since
> forever, and it has always been the case that x86 assemblers choose the
> shortest encoding for the requested operation (there's some redundancy for
> address expressions with the addition of the SIB encodings too), although
> for corner cases there's no way I know of to express the requirement to
> use a particular machine instruction, e.g.
>
> rcll $1, %eax
>
> either modifies or preserves OF depending on the opcode used,
Are you sure about this? Both an old i486 paper manual and the current SDM
refer to COUNT (nowadays COUNT & COUNTMASK) being 1. There's no tying to a
particular encoding afaics.
> and one may
> need either semantics depending on the circumstances, but no assembler I
> know of gives the programmer choice here.
I think I did fix this at some point, by making
rcl $one, %eax
.equ one, 1
work. Or maybe I'm misremembering and it has always worked.
Various other cases were also addresses by adding pseudo-prefixes to
allow control.
Jan
More information about the Binutils
mailing list