qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [5488] target-i386: Add Core Duo Definition


From: Aurelien Jarno
Subject: [Qemu-devel] [5488] target-i386: Add Core Duo Definition
Date: Tue, 14 Oct 2008 19:20:54 +0000

Revision: 5488
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5488
Author:   aurel32
Date:     2008-10-14 19:20:52 +0000 (Tue, 14 Oct 2008)

Log Message:
-----------
target-i386: Add Core Duo Definition

This patch adds a CPU definition for the Core Duo CPU. I tried to
resemble the original as closely as possible and document what features
are missing still. This patch enables the use of a recent CPU definition
on 32 bit platforms.

It also fixes two issues that went along the line:

- invalid xlevel in core2duo spec
  While looking though the CPUIDs again, I found that xlevel is actually 8.

- non-PSE36 support
  The CoreDuo CPUID does not expose the PSE36 capability, but CPUID
0x80000008 is tied to 36 bits. This broke Windows XP installation for
me, so I just set it to 32 bits width when PSE36 is not available. The
original CPU also exposes 32 bit width in CPUID 0x80000008.

Signed-off-by: Alexander Graf <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>

Modified Paths:
--------------
    trunk/target-i386/helper.c
    trunk/target-i386/op_helper.c

Modified: trunk/target-i386/helper.c
===================================================================
--- trunk/target-i386/helper.c  2008-10-14 18:14:47 UTC (rev 5487)
+++ trunk/target-i386/helper.c  2008-10-14 19:20:52 UTC (rev 5488)
@@ -183,7 +183,7 @@
         .ext_features = CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_SSSE3,
         .ext2_features = CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
         /* Missing: .ext3_features = CPUID_EXT3_LAHF_LM */
-        .xlevel = 0x8000000A,
+        .xlevel = 0x80000008,
         .model_id = "Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz",
     },
 #endif
@@ -199,6 +199,25 @@
         .model_id = "QEMU Virtual CPU version " QEMU_VERSION,
     },
     {
+        .name = "coreduo",
+        .level = 10,
+        .family = 6,
+        .model = 14,
+        .stepping = 8,
+        /* The original CPU also implements these features:
+               CPUID_DTS, CPUID_ACPI, CPUID_SS, CPUID_HT,
+               CPUID_TM, CPUID_PBE */
+        .features = PPRO_FEATURES | CPUID_VME |
+            CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA,
+        /* The original CPU also implements these ext features:
+               CPUID_EXT_VMX, CPUID_EXT_EST, CPUID_EXT_TM2, CPUID_EXT_XTPR,
+               CPUID_EXT_PDCM */
+        .ext_features = CPUID_EXT_SSE3 | CPUID_EXT_MONITOR,
+        .ext2_features = CPUID_EXT2_NX,
+        .xlevel = 0x80000008,
+        .model_id = "Genuine Intel(R) CPU           T2600  @ 2.16GHz",
+    },
+    {
         .name = "486",
         .level = 0,
         .family = 4,

Modified: trunk/target-i386/op_helper.c
===================================================================
--- trunk/target-i386/op_helper.c       2008-10-14 18:14:47 UTC (rev 5487)
+++ trunk/target-i386/op_helper.c       2008-10-14 19:20:52 UTC (rev 5488)
@@ -2026,7 +2026,10 @@
 #if defined(USE_KQEMU)
             EAX = 0x00000020;  /* 32 bits physical */
 #else
-            EAX = 0x00000024;  /* 36 bits physical */
+            if (env->cpuid_features & CPUID_PSE36)
+                EAX = 0x00000024; /* 36 bits physical */
+            else
+                EAX = 0x00000020; /* 32 bits physical */
 #endif
         }
         EBX = 0;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]