Mike A. Harris wrote: > When an RPM package is built with the "--target i686" or whatever > option, this translates into the compiler flag "-march=i686" > which selects the Intel i686 instruction set. Likewise a target > of i586 would tell the compiler to use the i586 instruction set > by passing "-march=i586". > > Choosing a target of i686 means the binaries will not run on any > CPU that is not a i686 class machine. Examples of machines that > do not have the full i686 instruction set: Pentium, Cyrix (all > of them AFAIK except perhaps the latest CPU from them), AMD K5, > K6. Using a target of i686 would cut support for all of this > hardware, as well as some other CPUs. We support Pentium, K5, K6 > class CPU's still however, so building the whole distribution > with -march=i686 is not viable in any way shape or form at this > point in time. Except a i586 kerenl is horrribly slow on a K6. > The kernel is a special case here, as the kernel has all kinds of > per CPU arch build time optimizations, which is why we have an > i586 kernel. It's quite special. Very true. > On a different note, the compiler flag -mcpu=xxx is a different > story entirely from -march. While -march chooses the instruction > set, and thus minimum required machine, and RPM package arch... > -mcpu selects instruction sheduling order. The instruction > scheduling order is optimized to run the fastest on the arch you > tell it. While the instructions are reordered for the given CPU, > they remain valid instructions for the -march supplied. So using > -mcpu=i686 optimizes binaries for i686 instruction scheduling. > This is the default for all of Red Hat Linux. We use i386 > compatible instructions (-march=i386) but our entire distro is > optimized for i686 CPU's, by using -mcpu=i686 which optimizes the > instruction order for i686. > > This combination gives the biggest bang for the buck, while > maintaining a high level of compatibility. So the packages are buildt with -march=i386 -mcpu=i686 right? So owners of a true Pentium would probably benifit from a -mcpu=i586 version of glibc. > If a given Cyrix 6x86 processor cannot run one of our supported > kernels, then it is unsupported. I don't know about the latest > Cyrix CPU's, but previous ones did not have the optional i686 > CMOV instruction for example, and though the CPU's are otherwise > i686 for the most part, not having CMOV disqualifies them from > being i686 from the perspective of rpm/gcc. You need to use the > Pentium kernel on these machines. Another reason to supply a i386 kernel. My understanding is that the i586 scheduler (compiler) creates code that only runs well on an actuall *ntel Pentium. Not a K5, K6, or Cyrix. Not a i686 (PPRo, PII, or PIII), not a Pentium w/ MMX. So offering a i586 optimized kernel, to all the i586 compatible CPU that cannot use the i686 instructuions slow them down, yet there are more CPUs that perform bably with that code that there are that it helps. A i386 optimized sheduling is faster on most CPUs than Pentium optimized code. At least we get an athlon kernel. Perhaps an Athlon glibc will soon follow. An I'm sure we'll se decent x86-64 support. I just keep changing the CPU selection form Pentium to K6, in the i586 kernel config file an rebuilding the kernel on my Athlon where it build reasonably fast. -Thomas -- Psyche-list mailing list Psyche-list@redhat.com https://listman.redhat.com/mailman/listinfo/psyche-list