Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Nov 1996 01:42:00 +0800
From:      Peter Wemm <peter@spinner.dialix.com>
To:        Erich Boleyn <erich@uruk.org>
Cc:        Nate Williams <nate@mt.sri.com>, Steve Passe <smp@csn.net>, freebsd-smp@freebsd.org
Subject:   Re: Pentium CPU steppings 
Message-ID:  <199611291742.BAA19182@spinner.DIALix.COM>
In-Reply-To: Your message of "Fri, 29 Nov 1996 08:46:59 PST." <E0vTW5b-000543-00@uruk.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
Erich Boleyn wrote:
> Uh...  you can't just look at the "step" number.  The "model" number is
> also quite relevant.  The "family" is the chip design (386, 486, Pentium,
> etc.), the "model" is the major revision, and the "step" is the stepping.
> The 3 numbers are pretty much strictly ordered for severity of changes.

Ahh yes, sorry, I'd forgotten about this since it's been a while since 
I've seen anything other 5/2/x.

> The fdiv bug occurs in model 1 chips with stepping less then 6 (I think,
> don't quote me).  A higher stepping in the same model, or any higher model
> with any stepping is fixed.

Hmm, weren't both the P5-60/66 and the early P5-90's affected?  I was 
under the impression that model "1" of the "5" family was the 5V 
non-clock-multiplied 60/66Mhz Pentiums?  And model "2" was the improved 
3.3V design with the clock multiplication and the on-chip local APIC?

Anyway, according to this C version of the Intel test assembler code, 
0x521 (P5-90 in my case) has the bug:
/* be sure to disable optimisation when compiling, eg: gcc -O0 ... */
main()
{
        double x = 4195835.0;
        double y = 3145727.0;
        double result = (x - (x / y) * y);

        printf("x = %f, y = %f, result = %f, FDIV %s\n", x, y, result,
                result < 1.0 ? "OK" : "BUG PRESENT");
}

peter@spinner[1:34am]~/fdiv-128> ./chk 
x = 4195835.000000, y = 3145727.000000, result = 256.000000, FDIV BUG 
PRESENT
peter@spinner[1:34am]~/fdiv-130> dmesg | grep Step
  Origin = "GenuineIntel"  Id = 0x521  Stepping=1

And on a newer P5-100 cpu:
peter@curie[4:35am]~-108> cc -O0 -o chk chk.c
peter@curie[4:35am]~-109> ./chk
x = 4195835.000000, y = 3145727.000000, result = 0.000000, FDIV OK
peter@curie[4:35am]~-110> dmesg | grep Step
  Origin = "GenuineIntel"  Id = 0x525  Stepping=5

Grumble.. It looks like the low steppings of "model 2" have it as well. 
Damn..

Hmm, I wonder if it's safe to test for this at the end of npx.c in the 
kernel?

Cheers,
-Peter





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611291742.BAA19182>