[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: i386,i586,i686



On Fri, 18 Feb 2005 16:23:04 +0000, Paul Howarth <paul city-fan org> wrote:
> Kumara wrote:
> > Hi all,
> > i'm not clear of what is
> > i386
> > i586
> > i686 etc..
> > could somebody brief me
> 
> A detailed history can be found at:
> http://www.pcmech.com/show/processors/35/

In terms of what it means in the Linux world, those indicate compiler
optimization and processor features required.  You should realize that
non-Intel processors are typically lumped into those categories too,
so for example AMD K7 (Athlon) is considered to be a i686 for most
Linux purposes.

There may be a few very low level kernel features that are disabled
when on very old processors; but in reality the most significant
feature differences are for pre-i386 models (and also why Fedora
doesn't ship say i286 binaries).

It's generally upwards compatible; so i386 binaries will run fine on
a i586 or i686 system; but the other way around *may* not work, or
if they do may actually be slower.

For most binaries (like applications), the compiler optimization differences
are so small that it's not worth compiling for anything other than i386.
However a select few packages, like the kernel, glibc, and openssl,
may have dramatic performance benifits when compiled specifcally
for the processor you have, so the distro makes different binaries available.
And the installer will automatically pick the best one your hardware
can support.

Some useful details is available in the gcc manual (use "info gcc"
to browse the manual, then go to "Invoking GCC" -> "Submodel options"
-> "i386 and x86-64 Options").

As you'll find there are dozens of different chip types.  Most of them
are nearly identical with perhaps just a few minor differences that
can be easily compensated for.

So to prevent having to provide a dozen different binaries, most Linux
distros (with perhaps Gentoo being an exception) only compile for a
small number of chips; the i386, i586, and i686.  There's enough
difference between those that the compiler optimizations make it worth
having them; but in reality the other differences between all the other
varieties is so insignificant to not make it worth doing more chip types.

Incidentally, for some of the older Red Hat Linux versions, RH did in
fact also provide Athlon-specific binaries for the kernel and glibc.
But nowdays, in Fedora, all modern 32-bit desktop chips are lumped
into i686.

What follows is excerpted from the gcc manual:
-- 
Deron Meranda

*FROM GCC 3.4 MANUAL*
3.17.11 Intel 386 and AMD x86-64 Options
----------------------------------------

These `-m' options are defined for the i386 and x86-64 family of
computers:

`-mtune=CPU-TYPE'
     Tune to CPU-TYPE everything applicable about the generated code,
     except for the ABI and the set of available instructions.  The
     choices for CPU-TYPE are:
    _i386_
          Original Intel's i386 CPU.

    _i486_
          Intel's i486 CPU.  (No scheduling is implemented for this
          chip.)

    _i586, pentium_
          Intel Pentium CPU with no MMX support.

    _pentium-mmx_
          Intel PentiumMMX CPU based on Pentium core with MMX
          instruction set support.

    _i686, pentiumpro_
          Intel PentiumPro CPU.

    _pentium2_
          Intel Pentium2 CPU based on PentiumPro core with MMX
          instruction set support.

    _pentium3, pentium3m_
          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
          instruction set support.

    _pentium-m_
          Low power version of Intel Pentium3 CPU with MMX, SSE and
          SSE2 instruction set support.  Used by Centrino notebooks.

    _pentium4, pentium4m_
          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
          support.

    _prescott_
          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
          and SSE3 instruction set support.

    _nocona_
          Improved version of Intel Pentium4 CPU with 64-bit
          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.

    _k6_
          AMD K6 CPU with MMX instruction set support.

    _k6-2, k6-3_
          Improved versions of AMD K6 CPU with MMX and 3dNOW!
          instruction set support.

    _athlon, athlon-tbird_
          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
          prefetch instructions support.

    _athlon-4, athlon-xp, athlon-mp_
          Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
          full SSE instruction set support.

    _k8, opteron, athlon64, athlon-fx_
          AMD K8 core based CPUs with x86-64 instruction set support.
          (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
          64-bit instruction set extensions.)
    _winchip-c6_
          IDT Winchip C6 CPU, dealt in same way as i486 with additional
          MMX instruction set support.

    _winchip2_
          IDT Winchip2 CPU, dealt in same way as i486 with additional
          MMX and 3dNOW!  instruction set support.

    _c3_
          Via C3 CPU with MMX and 3dNOW!  instruction set support.  (No
          scheduling is implemented for this chip.)

    _c3-2_
          Via C3-2 CPU with MMX and SSE instruction set support.  (No
          scheduling is implemented for this chip.)

     While picking a specific CPU-TYPE will schedule things
     appropriately for that particular chip, the compiler will not
     generate any code that does not run on the i386 without the
     `-march=CPU-TYPE' option being used.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]