egcs-1.1.2-24 (Red Hat Linux 6.1) does not define the __i586__ or __i686__ preprocessor flags when the -march=i586 or -march=i686 command line switches are used. They define the flags __pentium__/__pentiumpro__ in stead. I think they should define both, as this can lead to miscompiled kernels and other problems (see e.g. linux/include/linux/linkage.h).
assigned to jakub
gcc 2.95 and 2.96 behaves the same way and I think it is right, just all programs should use __pentium__/__pentiumpro__/__k6__/__athlon__ defines and their __tune_ variants. linux/linkage.h has been changed since then in 2.4, btw.