On Sat, Dec 20, 2025 at 9:01 AM Tom Lane <[email protected]> wrote: > > John Naylor <[email protected]> writes: > > On Fri, Dec 19, 2025 at 5:13 PM Zsolt Parragi <[email protected]> > > wrote: > >> I did some quick testing with this, normally only __i386__ gets > >> defined for 32 bit builds (-march=native -m32 for example, but also > >> the default -march=x86-64 -m32). __i586__ and __i686__ are only there > >> if I pass the matching -march (i586/i686) flag to gcc. > > > What platform is this? I don't see that: > > I can replicate Zsolt's result --- note the point about -march: > > $ echo | gcc -m32 -dM -E - | grep -E '86[^0-9]' > #define __i386 1 > #define __i386__ 1 > #define i386 1 > $ echo | gcc -m32 -march=i586 -dM -E - | grep -E '86[^0-9]' > #define __i586 1 > #define __tune_i586__ 1 > #define __i386 1 > #define __i586__ 1 > #define __i386__ 1 > #define i386 1 > $ echo | gcc -m32 -march=i686 -dM -E - | grep -E '86[^0-9]' > #define __tune_i686__ 1 > #define __i686 1 > #define __i686__ 1 > #define __i386 1 > #define __i386__ 1 > #define i386 1 > > This is with gcc 8.5.0 from RHEL8, and the same with gcc 14.3.1 > from Fedora 41.
My results were from Fedora 41 gcc 14.3.1 as well. With '-march' I get the same as your 8.5.0 but in a slightly different order, but without it I still get some 'i686' symbols defined. -- John Naylor Amazon Web Services
