[PATCH 3/5] x86: widen @got{,pcrel} support to PUSH and APX IMUL
H.J. Lu
hjl.tools@gmail.com
Thu Feb 6 02:28:53 GMT 2025
More information about the Binutils mailing list
Thu Feb 6 02:28:53 GMT 2025
- Previous message (by thread): [PATCH 3/5] x86: widen @got{,pcrel} support to PUSH and APX IMUL
- Next message (by thread): [PATCH 3/5] x86: widen @got{,pcrel} support to PUSH and APX IMUL
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, Feb 5, 2025 at 7:37 PM Jan Beulich <jbeulich@suse.com> wrote: > > On 04.02.2025 13:14, H.J. Lu wrote: > > On Tue, Feb 4, 2025 at 7:16 PM Jan Beulich <jbeulich@suse.com> wrote: > >> On 04.02.2025 12:12, H.J. Lu wrote: > >>> On Tue, Feb 4, 2025 at 7:02 PM Jan Beulich <jbeulich@suse.com> wrote: > >>>> Thinking of it: With TEST being special-cased in the logic involved, I'm > >>>> also curious to learn of a code sequence where TEST would sensibly be > >>>> used (and where CMP can't be used instead). > >>> > >>> Compiler may generate TEST with GOT. > >> > >> Can it? Why would it? (IOW: Again you didn't really address my request.) > >> > > > > [hjl@gnu-tgl-3 tmp]$ cat x.c > > extern int foo __attribute__ ((weak)); > > > > extern void bar (void); > > > > __attribute__ ((regparm(3))) > > void > > _start (long int p) > > { > > if (((unsigned long) &foo) & p) > > bar (); > > } > > [hjl@gnu-tgl-3 tmp]$ gcc -c -O2 -m32 x.c -mno-direct-extern-access > > > > [hjl@gnu-tgl-3 tmp]$ objdump -dwr x.o > > > > x.o: file format elf32-i386 > > > > > > Disassembly of section .text: > > > > 00000000 <_start>: > > 0: 85 05 00 00 00 00 test %eax,0x0 2: R_386_GOT32X foo > > 6: 75 08 jne 10 <_start+0x10> > > 8: c3 ret > > 9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi > > 10: e9 fc ff ff ff jmp 11 <_start+0x11> 11: R_386_PC32 bar > > [hjl@gnu-tgl-3 tmp]$ > > > > Which request? > > "... learn of a code sequence where TEST would sensibly be used" in my > earlier reply. So yes, you provided a contrived example now. I'm afraid > I can't assign meaning to "if (((unsigned long) &foo) & p)", though. It can be used to check pointer alignment. > Instead, slightly adjusting your example, I can see PUSH being used by > the compiler in exactly the way we can (but so far didn't) optimize. > That's ordinary argument passing, which I'm inclined to call "sensible". Please don't add a segment register. > IOW the question remains as to why optimization of TEST was added, > beyond the "because we can" reasoning. As before, ADD, SUB, and perhaps > CMP make sense when operating on pointers. For AND, OR, XOR, ADC, SBB, > and TEST I'm having a hard time seeing good uses. Since we deal with > them, we also ought to deal with IMUL in the same manner (where > possible). Since beyond these arithmetic ops we also deal with MOV, we > similarly should handle PUSH. > > Jan -- H.J.
- Previous message (by thread): [PATCH 3/5] x86: widen @got{,pcrel} support to PUSH and APX IMUL
- Next message (by thread): [PATCH 3/5] x86: widen @got{,pcrel} support to PUSH and APX IMUL
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list