Subject: Re: CVS commit: syssrc/sys/arch/i386/i386
To: Chris Gilbert <chris@dokein.co.uk>
From: Bang Jun-Young <junyoung@netbsd.org>
List: source-changes
Date: 12/09/2002 11:42:44
On Sun, Dec 08, 2002 at 07:55:34PM +0000, Chris Gilbert wrote:
> On Sun, 8 Dec 2002 19:39:54 +0900
> Bang Jun-Young <junyoung@netbsd.org> wrote:
> 
> > On Sun, Dec 08, 2002 at 01:44:57PM +0900, Bang Jun-Young wrote:
> > > On Sun, Dec 08, 2002 at 01:16:05AM +0900, YAMAMOTO Takashi wrote:
> > > > is it needed to have strings for P4 and later processors?
> > > > brand string provided by cpuid insn isn't enough?
> > > 
> > > It is only available with P4.
> > 
> > One more note:
> > 
> > A better reason is that it is more reliable to use brand id number and
> > Intel also recommends that you do so.
> 
> Actually read the latest cpuid doc, and though it was saying that you
> should use brand string where possible, as it avoids any issue of a
> brand id being the same for a chip in it's normal and Xeon form.

String is not enough (so they introduced the number as well). Say,
the brand string is:

Intel(R) Pentium(R) 4 CPU 1.80GHz

How do you let NetBSD know what word is vendor and what is model,
etc.? Result code would be something like this:

	if (strstr(brandstr, "Intel") == 0)
		vendor = "Intel"; /* we don't need (R) */
	if (strstr(brandstr, "Pentium(R) 4") == 0)
		name = "Pentium 4"; /* we don't need (R) and the rest */
	else if (strstr(brandstr, "Xeon") == 0)
		name = "Xeon"; /* we don't need (TM) and the rest either */
	else if (strstr(brandstr, "Mobile") == 0 &&
	    strstr(brandstr, "Pentium(R) 4") == 0)
		name = "Mobile Pentium 4"; /* "Mobile Intel(R) ..." */ 
	...

Obviously, that is a step backward from table based lookup using brand id
numbers. (Note that I had no choice but using the basically same method
as the above for detecting AMD processors since they don't have the brand
id number)

Jun-Young

-- 
Bang Jun-Young <junyoung@netbsd.org>