Re: [PATCH 1/2] x86: Remove dynamic NOP selection

From: H. Peter Anvin
Date: Sat Jan 20 2024 - 04:01:30 EST


On January 19, 2024 10:58:56 PM PST, Thorsten Glaser <tg@xxxxxxxxxx> wrote:
>Peter Zijlstra dixit:
>
>>-/* generic versions from gas
>[…]
>>- 3: leal 0x00(%esi),%esi
>>- 4: leal 0x00(,%esi,1),%esi
>>- 6: leal 0x00000000(%esi),%esi
>>- 7: leal 0x00000000(,%esi,1),%esi
>
>vs.
>
>>+ * Generic 32bit nops from GAS:
>[…]
>>+ * 3: leal 0x0(%esi),%esi
>>+ * 4: leal 0x0(%esi,%eiz,1),%esi
>>+ * 5: leal %ds:0x0(%esi,%eiz,1),%esi
>>+ * 6: leal 0x0(%esi),%esi
>>+ * 7: leal 0x0(%esi,%eiz,1),%esi
>>+ * 8: leal %ds:0x0(%esi,%eiz,1),%esi
>
>I think there’s some mistake introduced. The BYTES_* are
>identical for e.g. #7, but %eiz must be wrong, it’s not
>a register. Indeed, gas (on Debian bullseye) does not
>assemble that either.
>
>(Awful AT&T syntax aside…)
>
>bye,
>//mirabilos

%eiz was something that binutils used to put in when disassembling certain redundant encodings with SIB at some point.