qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH] qemu: Enable XSAVE related CPUID


From: Avi Kivity
Subject: [Qemu-devel] Re: [PATCH] qemu: Enable XSAVE related CPUID
Date: Thu, 27 May 2010 15:56:17 +0300
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100330 Fedora/3.0.4-1.fc12 Thunderbird/3.0.4

On 05/27/2010 12:50 PM, Sheng Yang wrote:
We can support it in KVM now. The initial values are the minimal requirement
of XSAVE capable processor.

Signed-off-by: Sheng Yang<address@hidden>
---
  target-i386/cpuid.c |   32 ++++++++++++++++++++++++++++++++
  1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
index eebf038..cbf5595 100644
--- a/target-i386/cpuid.c
+++ b/target-i386/cpuid.c
@@ -1067,6 +1067,38 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, 
uint32_t count,
          *ecx = 0;
          *edx = 0;
          break;
+    case 0xD:
+        /* Processor Extended State */
+        if (!(env->cpuid_ext_features&  CPUID_EXT_XSAVE)) {
+            *eax = 0;
+            *ebx = 0;
+            *ecx = 0;
+            *edx = 0;
+            break;
+        }
+        if (count == 0) {
+            *eax = 0x7; /* FP | SSE | YMM */
+            *ebx = 0x340; /* FP + SSE + YMM size */
+            *ecx = 0x340; /* FP + SSE + YMM size */

For -cpu host, we should pick these from KVM_GET_SUPPORTED_CPUID. For canned cpu types (e.g. qemu64), we need to return what we always did.

We can also add a new cpu type that has them built in (there's no cpu on the market with avx, right?)

+            *edx = 0;
+        } else if (count == 1) {
+            /* eax = 1, so we can continue with others */
+            *eax = 1;
+            *ebx = 0;
+            *ecx = 0;
+            *edx = 0;
+        } else if (count == 2) {
+            *eax = 0x100; /* YMM size */
+            *ebx = 0x240; /* YMM offset */
+            *ecx = 0;
+            *edx = 0;

These, too.

+        } else {
+            *eax = 0;
+            *ebx = 0;
+            *ecx = 0;
+            *edx = 0;
+        }
+        break;
      case 0x80000000:
          *eax = env->cpuid_xlevel;
          *ebx = env->cpuid_vendor1;


--
error compiling committee.c: too many arguments to function




reply via email to

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