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

Re: debian architecture history question



Ron Johnson put forth on 6/15/2010 10:21 AM:
> On 06/15/2010 04:34 AM, Stan Hoeppner wrote:
> [snip]
>>
>> Disclaimer:  my comments below intentionally exclude x86-64 capable CPUs
>>
>>
>> There are different kernels for different models of the Intel x86
>> processor
>> family and compatibles, but make no mistake, they all use the same
>> instruction
>> set introduced in the 80386.  There is no i686 instruction set, nor an
>> i586 or
>> i486 instruction set.
> 
> This is just *wrong*.

No, it's not "just wrong".  If you read the Intel literature, there is a
single IA32 instruction set.  Some processor models have additional model
specific instructions because they introduce new registers, but the
instruction set, or IA32 ISA, is the same across the board.  I clearly
explained later in my post that some models have model specific extensions.

> http://en.wikipedia.org/wiki/X86_instruction_listings#Added_with_80486
> 
> http://en.wikipedia.org/wiki/X86_instruction_listings#Added_with_Pentium_Pro
> 
> 
> You may think that's not a lot, but it is to a compiler writer, and it
> demonstrates that Stan's wrong.

Is this about answering the OP's question or proving me wrong?  You said that
twice now, and that duck doesn't hunt.  I've stated nothing factually incorrect.

That said, I'm not the maintainer of the i486, i586, and i686 kernels, so I
can't say with certainty exactly what is included in each kernel or what gcc
flags were used when built.  However, specifically in the case of the i486
kernel, I find it hard to believe a kernel would be rebuilt due to 6 new
instructions, 3 of which simply flush the L1 cache in one fashion or another.
 I could be wrong, though it seems like wasted effort given the small gain.

In the case of the Pentium Pro, Intel simply added a conditional for each move
instruction.  Again, I don't know if using these instructions would yield much
if any performance gain for kernel code.

Again, I believe the differences in these kernels have more to do with
subroutines that address specific features of each platform than with what
instructions were exposed to gcc at compile time.  The largest difference is
the BIOS for each of these CPU generations, and different BIOSes are going to
require different kernel code.  In the case of the Pentium Pro (and later)
there is code to manage the L2 cache, although you don't see anything related
to L2 cache instructions on the Wikipedia pages.  I'd say the data there is
incomplete.  I'll have to research it.

Also, AFAIK, the i686 kernels run on the Cyrix 6x86, which, IIRC, doesn't
support the conditional move instructions of the Intel PPro...

>>                       As a matter of fact, the latter of these aren't
>> even
>> models of Intel CPUs.
> 
> You're right, just as I'm not "The Johnsons".  That's a *family*
> designation.

Now that's just plain wrong.  There is no "i586" or "i686" family.  People
other than Intel came up with these descriptions.  Intel specifically made a
point that there is no 586 and no 686.  They did this because copyright became
an issue when they tried to silence their competition in court.  The judges
said you can't copyright a number.  Thus Intel invented "Pentium" and
copyrighted it so competitors making compatible chips couldn't piggy back.

>>                        What kernel programmers call i586 and i686 are
>> actually
>> classes or sets of features of Intel and compatible competitor CPUs from
>> Cyrix, IBM, TI, and AMD.  The original Intel 60/66 MHz Pentium model
>> number is
>> actually 80501.  All Pentiums up to the MMX models were numbered
>> 80502.  The
>> i686 kernel label describes the Pentium Pro, whose model number is
>> 80521, and
>> all other later 32 bit x86 CPUs to follow it.
> 
> Manufacturing codes?  So what?

These aren't manufacturing codes, these are model numbers.  Everyone calls a
"386" a "386" because the chip model number is 80386.  Same for all Intel
chips before it, and the 80486 or "486" after it.  The Pentium is actually
Intel model 80501.  Again, Intel specifically did this to get away from "model
numbers as product names".

My whole point here was that Intel never described their Pentium or Pentium
Pro with any kind of "family" model number designation as had previously been
done.  They intentionally changed course.  Everyone else, however, applied
their own labels, and continued naming Intel's chips in succession, even
though Intel didn't.

> [big snip of partly correct, partly nonsense]

Thanks for the civil critique Ron.  Now, go talk to the devs and find out
exactly what the differences are between the kernels in question, and then you
can elaborate on my degree of nonsense. :)

-- 
Stan



Reply to: