diff loader/win32.c @ 1038:b36fb1ae4b53

applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
author arpi_esp
date Tue, 05 Jun 2001 18:40:44 +0000
parents 3156ab0adffe
children bf973bffe240
line wrap: on
line diff
--- a/loader/win32.c	Tue Jun 05 16:52:51 2001 +0000
+++ b/loader/win32.c	Tue Jun 05 18:40:44 2001 +0000
@@ -702,12 +702,29 @@
 	cachedsi.wProcessorLevel		= 5; /* pentium */
 	cachedsi.wProcessorRevision		= 0x0101;
 	
-#if defined(__FreeBSD__) || defined(__NetBSD__)
-        cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
-        cachedsi.wProcessorLevel= 5;
-	PF[PF_COMPARE_EXCHANGE_DOUBLE] = TRUE;
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__svr4__)
 	do_cpuid(regs);
-	if (regs[3] & 0x00800000)
+	switch ((regs[0] >> 8) & 0xf) {			// cpu family
+	case 3: cachedsi.dwProcessorType = PROCESSOR_INTEL_386;
+		cachedsi.wProcessorLevel= 3;
+		break;
+	case 4: cachedsi.dwProcessorType = PROCESSOR_INTEL_486;
+		cachedsi.wProcessorLevel= 4;
+		break;
+	case 5: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
+		cachedsi.wProcessorLevel= 5;
+		break;
+	case 6: cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
+		cachedsi.wProcessorLevel= 5;
+		break;
+	default:cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
+		cachedsi.wProcessorLevel= 5;
+		break;
+	}
+	cachedsi.wProcessorRevision = regs[0] & 0xf;	// stepping
+	if (regs[3] & (1 <<  8))
+	  PF[PF_COMPARE_EXCHANGE_DOUBLE] = TRUE;
+	if (regs[3] & (1 << 23))
           PF[PF_MMX_INSTRUCTIONS_AVAILABLE] = TRUE;
         cachedsi.dwNumberOfProcessors=1;
 #else