Move XMM registers and mxcsr out of org.gnu.gdb.i386.core into a
separate org.gnu.gdb.i386.sse feature, matching GDB's expected target
description layout (gdb/features/i386/{32,64}bit-sse.xml). Previously,
SSE registers were embedded in the core feature with a commented-out
feature boundary.

GDB requires org.gnu.gdb.i386.sse as a prerequisite for the AVX
feature (org.gnu.gdb.i386.avx). Without this split, adding AVX support
causes GDB to reject the target description entirely.

Signed-off-by: Marc-André Lureau <[email protected]>
---
 configs/targets/i386-bsd-user.mak     |  2 +-
 configs/targets/i386-linux-user.mak   |  2 +-
 configs/targets/i386-softmmu.mak      |  2 +-
 configs/targets/x86_64-bsd-user.mak   |  2 +-
 configs/targets/x86_64-linux-user.mak |  2 +-
 configs/targets/x86_64-softmmu.mak    |  2 +-
 gdbstub/gdb-xml/i386-32bit-sse.xml    | 54 +++++++++++++++++++++++++
 gdbstub/gdb-xml/i386-32bit.xml        | 46 +--------------------
 gdbstub/gdb-xml/i386-64bit-sse.xml    | 62 ++++++++++++++++++++++++++++
 gdbstub/gdb-xml/i386-64bit.xml        | 50 -----------------------
 target/i386/gdbstub.c                 | 76 ++++++++++++++++++++++-------------
 11 files changed, 172 insertions(+), 128 deletions(-)

diff --git a/configs/targets/i386-bsd-user.mak 
b/configs/targets/i386-bsd-user.mak
index 485f571cb6cd..b2a8b0a42ad9 100644
--- a/configs/targets/i386-bsd-user.mak
+++ b/configs/targets/i386-bsd-user.mak
@@ -1,3 +1,3 @@
 TARGET_ARCH=i386
-TARGET_XML_FILES= i386-32bit.xml
+TARGET_XML_FILES= i386-32bit.xml i386-32bit-sse.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/i386-linux-user.mak 
b/configs/targets/i386-linux-user.mak
index a3ea4c39c520..234e600860a3 100644
--- a/configs/targets/i386-linux-user.mak
+++ b/configs/targets/i386-linux-user.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=i386
 TARGET_SYSTBL_ABI=i386
 TARGET_SYSTBL=syscall_32.tbl
-TARGET_XML_FILES= i386-32bit.xml i386-32bit-linux.xml
+TARGET_XML_FILES= i386-32bit.xml i386-32bit-sse.xml i386-32bit-linux.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/i386-softmmu.mak b/configs/targets/i386-softmmu.mak
index 1424ab6f6834..a53ee07255b4 100644
--- a/configs/targets/i386-softmmu.mak
+++ b/configs/targets/i386-softmmu.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=i386
 TARGET_KVM_HAVE_GUEST_DEBUG=y
 TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
-TARGET_XML_FILES= i386-32bit.xml i386-system.xml
+TARGET_XML_FILES= i386-32bit.xml i386-32bit-sse.xml i386-system.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/x86_64-bsd-user.mak 
b/configs/targets/x86_64-bsd-user.mak
index 26b7cfad4e23..f36a9ccbd60a 100644
--- a/configs/targets/x86_64-bsd-user.mak
+++ b/configs/targets/x86_64-bsd-user.mak
@@ -1,4 +1,4 @@
 TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
-TARGET_XML_FILES= i386-64bit.xml i386-64bit-apx.xml
+TARGET_XML_FILES= i386-64bit.xml i386-64bit-sse.xml i386-64bit-apx.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/x86_64-linux-user.mak 
b/configs/targets/x86_64-linux-user.mak
index cad68746bdb2..77a035b7eb4c 100644
--- a/configs/targets/x86_64-linux-user.mak
+++ b/configs/targets/x86_64-linux-user.mak
@@ -2,5 +2,5 @@ TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
 TARGET_SYSTBL_ABI=common,64
 TARGET_SYSTBL=syscall_64.tbl
-TARGET_XML_FILES= i386-64bit.xml i386-64bit-linux.xml i386-64bit-apx.xml
+TARGET_XML_FILES= i386-64bit.xml i386-64bit-sse.xml i386-64bit-linux.xml 
i386-64bit-apx.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/x86_64-softmmu.mak 
b/configs/targets/x86_64-softmmu.mak
index 51e882b1c747..c04fdf2d3fe8 100644
--- a/configs/targets/x86_64-softmmu.mak
+++ b/configs/targets/x86_64-softmmu.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
 TARGET_KVM_HAVE_GUEST_DEBUG=y
 TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
-TARGET_XML_FILES= i386-64bit.xml i386-64bit-apx.xml i386-system.xml
+TARGET_XML_FILES= i386-64bit.xml i386-64bit-sse.xml i386-64bit-apx.xml 
i386-system.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/gdbstub/gdb-xml/i386-32bit-sse.xml 
b/gdbstub/gdb-xml/i386-32bit-sse.xml
new file mode 100644
index 000000000000..3f8a8d2bc8c1
--- /dev/null
+++ b/gdbstub/gdb-xml/i386-32bit-sse.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010-2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.
+
+     SPDX-License-Identifier: GPL-2.0-or-later
+-->
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.sse">
+  <vector id="v4f" type="ieee_single" count="4"/>
+  <vector id="v2d" type="ieee_double" count="2"/>
+  <vector id="v16i8" type="int8" count="16"/>
+  <vector id="v8i16" type="int16" count="8"/>
+  <vector id="v4i32" type="int32" count="4"/>
+  <vector id="v2i64" type="int64" count="2"/>
+  <union id="vec128">
+    <field name="v4_float" type="v4f"/>
+    <field name="v2_double" type="v2d"/>
+    <field name="v16_int8" type="v16i8"/>
+    <field name="v8_int16" type="v8i16"/>
+    <field name="v4_int32" type="v4i32"/>
+    <field name="v2_int64" type="v2i64"/>
+    <field name="uint128" type="uint128"/>
+  </union>
+  <flags id="i386_mxcsr" size="4">
+    <field name="IE" start="0" end="0"/>
+    <field name="DE" start="1" end="1"/>
+    <field name="ZE" start="2" end="2"/>
+    <field name="OE" start="3" end="3"/>
+    <field name="UE" start="4" end="4"/>
+    <field name="PE" start="5" end="5"/>
+    <field name="DAZ" start="6" end="6"/>
+    <field name="IM" start="7" end="7"/>
+    <field name="DM" start="8" end="8"/>
+    <field name="ZM" start="9" end="9"/>
+    <field name="OM" start="10" end="10"/>
+    <field name="UM" start="11" end="11"/>
+    <field name="PM" start="12" end="12"/>
+    <field name="FZ" start="15" end="15"/>
+  </flags>
+
+  <reg name="xmm0" bitsize="128" type="vec128"/>
+  <reg name="xmm1" bitsize="128" type="vec128"/>
+  <reg name="xmm2" bitsize="128" type="vec128"/>
+  <reg name="xmm3" bitsize="128" type="vec128"/>
+  <reg name="xmm4" bitsize="128" type="vec128"/>
+  <reg name="xmm5" bitsize="128" type="vec128"/>
+  <reg name="xmm6" bitsize="128" type="vec128"/>
+  <reg name="xmm7" bitsize="128" type="vec128"/>
+
+  <reg name="mxcsr" bitsize="32" type="i386_mxcsr" group="vector"/>
+</feature>
diff --git a/gdbstub/gdb-xml/i386-32bit.xml b/gdbstub/gdb-xml/i386-32bit.xml
index 1dec40e1d2c1..dd6b6e7b8481 100644
--- a/gdbstub/gdb-xml/i386-32bit.xml
+++ b/gdbstub/gdb-xml/i386-32bit.xml
@@ -5,7 +5,7 @@
      are permitted in any medium without royalty provided the copyright
      notice and this notice are preserved.  -->
 
-<!-- I386 with SSE -->
+<!-- I386 core -->
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.i386.core">
@@ -152,48 +152,4 @@
   <reg name="foseg" bitsize="32" type="int" group="float"/>
   <reg name="fooff" bitsize="32" type="int" group="float"/>
   <reg name="fop" bitsize="32" type="int" group="float"/>
-<!--/feature>
-<feature name="org.gnu.gdb.i386.32bit.sse"-->
-  <vector id="v4f" type="ieee_single" count="4"/>
-  <vector id="v2d" type="ieee_double" count="2"/>
-  <vector id="v16i8" type="int8" count="16"/>
-  <vector id="v8i16" type="int16" count="8"/>
-  <vector id="v4i32" type="int32" count="4"/>
-  <vector id="v2i64" type="int64" count="2"/>
-  <union id="vec128">
-       <field name="v4_float" type="v4f"/>
-       <field name="v2_double" type="v2d"/>
-       <field name="v16_int8" type="v16i8"/>
-       <field name="v8_int16" type="v8i16"/>
-       <field name="v4_int32" type="v4i32"/>
-       <field name="v2_int64" type="v2i64"/>
-       <field name="uint128" type="uint128"/>
-  </union>
-  <flags id="i386_mxcsr" size="4">
-       <field name="IE" start="0" end="0"/>
-       <field name="DE" start="1" end="1"/>
-       <field name="ZE" start="2" end="2"/>
-       <field name="OE" start="3" end="3"/>
-       <field name="UE" start="4" end="4"/>
-       <field name="PE" start="5" end="5"/>
-       <field name="DAZ" start="6" end="6"/>
-       <field name="IM" start="7" end="7"/>
-       <field name="DM" start="8" end="8"/>
-       <field name="ZM" start="9" end="9"/>
-       <field name="OM" start="10" end="10"/>
-       <field name="UM" start="11" end="11"/>
-       <field name="PM" start="12" end="12"/>
-       <field name="FZ" start="15" end="15"/>
-  </flags>
-
-  <reg name="xmm0" bitsize="128" type="vec128"/>
-  <reg name="xmm1" bitsize="128" type="vec128"/>
-  <reg name="xmm2" bitsize="128" type="vec128"/>
-  <reg name="xmm3" bitsize="128" type="vec128"/>
-  <reg name="xmm4" bitsize="128" type="vec128"/>
-  <reg name="xmm5" bitsize="128" type="vec128"/>
-  <reg name="xmm6" bitsize="128" type="vec128"/>
-  <reg name="xmm7" bitsize="128" type="vec128"/>
-
-  <reg name="mxcsr" bitsize="32" type="i386_mxcsr" group="vector"/>
 </feature>
diff --git a/gdbstub/gdb-xml/i386-64bit-sse.xml 
b/gdbstub/gdb-xml/i386-64bit-sse.xml
new file mode 100644
index 000000000000..06a5f857d92c
--- /dev/null
+++ b/gdbstub/gdb-xml/i386-64bit-sse.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010-2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.
+
+     SPDX-License-Identifier: GPL-2.0-or-later
+-->
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.sse">
+  <vector id="v4f" type="ieee_single" count="4"/>
+  <vector id="v2d" type="ieee_double" count="2"/>
+  <vector id="v16i8" type="int8" count="16"/>
+  <vector id="v8i16" type="int16" count="8"/>
+  <vector id="v4i32" type="int32" count="4"/>
+  <vector id="v2i64" type="int64" count="2"/>
+  <union id="vec128">
+    <field name="v4_float" type="v4f"/>
+    <field name="v2_double" type="v2d"/>
+    <field name="v16_int8" type="v16i8"/>
+    <field name="v8_int16" type="v8i16"/>
+    <field name="v4_int32" type="v4i32"/>
+    <field name="v2_int64" type="v2i64"/>
+    <field name="uint128" type="uint128"/>
+  </union>
+  <flags id="x64_mxcsr" size="4">
+    <field name="IE" start="0" end="0"/>
+    <field name="DE" start="1" end="1"/>
+    <field name="ZE" start="2" end="2"/>
+    <field name="OE" start="3" end="3"/>
+    <field name="UE" start="4" end="4"/>
+    <field name="PE" start="5" end="5"/>
+    <field name="DAZ" start="6" end="6"/>
+    <field name="IM" start="7" end="7"/>
+    <field name="DM" start="8" end="8"/>
+    <field name="ZM" start="9" end="9"/>
+    <field name="OM" start="10" end="10"/>
+    <field name="UM" start="11" end="11"/>
+    <field name="PM" start="12" end="12"/>
+    <field name="FZ" start="15" end="15"/>
+  </flags>
+
+  <reg name="xmm0" bitsize="128" type="vec128"/>
+  <reg name="xmm1" bitsize="128" type="vec128"/>
+  <reg name="xmm2" bitsize="128" type="vec128"/>
+  <reg name="xmm3" bitsize="128" type="vec128"/>
+  <reg name="xmm4" bitsize="128" type="vec128"/>
+  <reg name="xmm5" bitsize="128" type="vec128"/>
+  <reg name="xmm6" bitsize="128" type="vec128"/>
+  <reg name="xmm7" bitsize="128" type="vec128"/>
+  <reg name="xmm8" bitsize="128" type="vec128"/>
+  <reg name="xmm9" bitsize="128" type="vec128"/>
+  <reg name="xmm10" bitsize="128" type="vec128"/>
+  <reg name="xmm11" bitsize="128" type="vec128"/>
+  <reg name="xmm12" bitsize="128" type="vec128"/>
+  <reg name="xmm13" bitsize="128" type="vec128"/>
+  <reg name="xmm14" bitsize="128" type="vec128"/>
+  <reg name="xmm15" bitsize="128" type="vec128"/>
+
+  <reg name="mxcsr" bitsize="32" type="x64_mxcsr" group="vector"/>
+</feature>
diff --git a/gdbstub/gdb-xml/i386-64bit.xml b/gdbstub/gdb-xml/i386-64bit.xml
index 9ac9164e6a99..a31c38aa8bd7 100644
--- a/gdbstub/gdb-xml/i386-64bit.xml
+++ b/gdbstub/gdb-xml/i386-64bit.xml
@@ -170,54 +170,4 @@
   <reg name="fooff" bitsize="32" type="int" group="float"/>
   <reg name="fop" bitsize="32" type="int" group="float"/>
 
-  <vector id="v4f" type="ieee_single" count="4"/>
-  <vector id="v2d" type="ieee_double" count="2"/>
-  <vector id="v16i8" type="int8" count="16"/>
-  <vector id="v8i16" type="int16" count="8"/>
-  <vector id="v4i32" type="int32" count="4"/>
-  <vector id="v2i64" type="int64" count="2"/>
-  <union id="vec128">
-       <field name="v4_float" type="v4f"/>
-       <field name="v2_double" type="v2d"/>
-       <field name="v16_int8" type="v16i8"/>
-       <field name="v8_int16" type="v8i16"/>
-       <field name="v4_int32" type="v4i32"/>
-       <field name="v2_int64" type="v2i64"/>
-       <field name="uint128" type="uint128"/>
-  </union>
-  <flags id="x64_mxcsr" size="4">
-       <field name="IE" start="0" end="0"/>
-       <field name="DE" start="1" end="1"/>
-       <field name="ZE" start="2" end="2"/>
-       <field name="OE" start="3" end="3"/>
-       <field name="UE" start="4" end="4"/>
-       <field name="PE" start="5" end="5"/>
-       <field name="DAZ" start="6" end="6"/>
-       <field name="IM" start="7" end="7"/>
-       <field name="DM" start="8" end="8"/>
-       <field name="ZM" start="9" end="9"/>
-       <field name="OM" start="10" end="10"/>
-       <field name="UM" start="11" end="11"/>
-       <field name="PM" start="12" end="12"/>
-       <field name="FZ" start="15" end="15"/>
-  </flags>
-
-  <reg name="xmm0" bitsize="128" type="vec128"/>
-  <reg name="xmm1" bitsize="128" type="vec128"/>
-  <reg name="xmm2" bitsize="128" type="vec128"/>
-  <reg name="xmm3" bitsize="128" type="vec128"/>
-  <reg name="xmm4" bitsize="128" type="vec128"/>
-  <reg name="xmm5" bitsize="128" type="vec128"/>
-  <reg name="xmm6" bitsize="128" type="vec128"/>
-  <reg name="xmm7" bitsize="128" type="vec128"/>
-  <reg name="xmm8" bitsize="128" type="vec128"/>
-  <reg name="xmm9" bitsize="128" type="vec128"/>
-  <reg name="xmm10" bitsize="128" type="vec128"/>
-  <reg name="xmm11" bitsize="128" type="vec128"/>
-  <reg name="xmm12" bitsize="128" type="vec128"/>
-  <reg name="xmm13" bitsize="128" type="vec128"/>
-  <reg name="xmm14" bitsize="128" type="vec128"/>
-  <reg name="xmm15" bitsize="128" type="vec128"/>
-
-  <reg name="mxcsr" bitsize="32" type="x64_mxcsr" group="vector"/>
 </feature>
diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c
index 420ce845eeae..2b4c28aac162 100644
--- a/target/i386/gdbstub.c
+++ b/target/i386/gdbstub.c
@@ -57,9 +57,8 @@ static const int gpr_map32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
 /*
  * fpu regs ----------> 8 or 16
  */
-#define IDX_NB_MXCSR    1
 /*
- *          total ----> 8+1+1+9+6+16+8+1=50 or 16+1+1+9+6+16+16+1=66
+ *          total ----> 8+1+1+9+6+16=41 or 16+1+1+9+6+16=49
  */
 
 #define IDX_IP_REG      CPU_NB_REGS
@@ -67,8 +66,6 @@ static const int gpr_map32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
 #define IDX_SEG_REGS    (IDX_FLAGS_REG + IDX_NB_FLAGS)
 #define IDX_CTL_REGS    (IDX_SEG_REGS + IDX_NB_SEG)
 #define IDX_FP_REGS     (IDX_CTL_REGS + IDX_NB_CTL)
-#define IDX_XMM_REGS    (IDX_FP_REGS + IDX_NB_FP)
-#define IDX_MXCSR_REG   (IDX_XMM_REGS + CPU_NB_REGS)
 
 #define IDX_CTL_CR0_REG     (IDX_CTL_REGS + 0)
 #define IDX_CTL_CR2_REG     (IDX_CTL_REGS + 1)
@@ -139,13 +136,6 @@ int x86_cpu_gdb_read_register(CPUState *cs, GByteArray 
*mem_buf, int n)
         int len = gdb_get_reg64(mem_buf, cpu_to_le64(fp->low));
         len += gdb_get_reg16(mem_buf, cpu_to_le16(fp->high));
         return len;
-    } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
-        n -= IDX_XMM_REGS;
-        if (n < CPU_NB_REGS32 || TARGET_LONG_BITS == 64) {
-            return gdb_get_reg128(mem_buf,
-                                  env->xmm_regs[n].ZMM_Q(1),
-                                  env->xmm_regs[n].ZMM_Q(0));
-        }
     } else {
         switch (n) {
         case IDX_IP_REG:
@@ -198,10 +188,6 @@ int x86_cpu_gdb_read_register(CPUState *cs, GByteArray 
*mem_buf, int n)
         case IDX_FP_REGS + 15:
             return gdb_get_reg32(mem_buf, 0); /* fop */
 
-        case IDX_MXCSR_REG:
-            update_mxcsr_from_sse_status(env);
-            return gdb_get_reg32(mem_buf, env->mxcsr);
-
         case IDX_CTL_CR0_REG:
             return gdb_read_reg_cs64(env->hflags, mem_buf, env->cr[0]);
         case IDX_CTL_CR2_REG:
@@ -300,13 +286,6 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t 
*mem_buf, int n)
         fp->low = le64_to_cpu(* (uint64_t *) mem_buf);
         fp->high = le16_to_cpu(* (uint16_t *) (mem_buf + 8));
         return 10;
-    } else if (n >= IDX_XMM_REGS && n < IDX_XMM_REGS + CPU_NB_REGS) {
-        n -= IDX_XMM_REGS;
-        if (n < CPU_NB_REGS32 || TARGET_LONG_BITS == 64) {
-            env->xmm_regs[n].ZMM_Q(0) = ldq_p(mem_buf);
-            env->xmm_regs[n].ZMM_Q(1) = ldq_p(mem_buf + 8);
-            return 16;
-        }
     } else {
         switch (n) {
         case IDX_IP_REG:
@@ -358,10 +337,6 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t 
*mem_buf, int n)
         case IDX_FP_REGS + 15: /* fop */
             return 4;
 
-        case IDX_MXCSR_REG:
-            cpu_set_mxcsr(env, ldl_p(mem_buf));
-            return 4;
-
         case IDX_CTL_CR0_REG:
             len = gdb_write_reg_cs64(env->hflags, mem_buf, &tmp);
 #ifndef CONFIG_USER_ONLY
@@ -409,6 +384,44 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t 
*mem_buf, int n)
     return 0;
 }
 
+/*
+ * SSE feature (org.gnu.gdb.i386.sse) — XMM registers + mxcsr.
+ *
+ * Register layout: xmm0..xmm(N-1), mxcsr.
+ * N = CPU_NB_REGS (8 for 32-bit, 16 for 64-bit).
+ */
+static int x86_gdb_read_sse(CPUState *cs, GByteArray *buf, int n)
+{
+    CPUX86State *env = cpu_env(cs);
+
+    if (n < CPU_NB_REGS) {
+        return gdb_get_reg128(buf,
+                              env->xmm_regs[n].ZMM_Q(1),
+                              env->xmm_regs[n].ZMM_Q(0));
+    }
+    if (n == CPU_NB_REGS) {
+        update_mxcsr_from_sse_status(env);
+        return gdb_get_reg32(buf, env->mxcsr);
+    }
+    return 0;
+}
+
+static int x86_gdb_write_sse(CPUState *cs, uint8_t *buf, int n)
+{
+    CPUX86State *env = cpu_env(cs);
+
+    if (n < CPU_NB_REGS) {
+        env->xmm_regs[n].ZMM_Q(0) = ldq_p(buf);
+        env->xmm_regs[n].ZMM_Q(1) = ldq_p(buf + 8);
+        return 16;
+    }
+    if (n == CPU_NB_REGS) {
+        cpu_set_mxcsr(env, ldl_p(buf));
+        return 4;
+    }
+    return 0;
+}
+
 #ifdef CONFIG_LINUX_USER
 
 #define IDX_ORIG_AX 0
@@ -519,11 +532,20 @@ void x86_cpu_gdb_init(CPUState *cs)
 {
 #ifdef TARGET_X86_64
     CPUX86State *env = &X86_CPU(cs)->env;
+    const char *sse_xml = "i386-64bit-sse.xml";
+#else
+    const char *sse_xml = "i386-32bit-sse.xml";
+#endif
 
+    gdb_register_coprocessor(cs, x86_gdb_read_sse, x86_gdb_write_sse,
+                             gdb_find_static_feature(sse_xml));
+
+#ifdef TARGET_X86_64
     if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) {
         gdb_register_coprocessor(cs, i386_cpu_gdb_get_egprs,
                                  i386_cpu_gdb_set_egprs,
-                                 
gdb_find_static_feature("i386-64bit-apx.xml"));
+                                 gdb_find_static_feature(
+                                     "i386-64bit-apx.xml"));
     }
 #endif
 

-- 
2.56.0.116.g6de20f6092dc


Reply via email to