* i386-tdep.c (i386_mxcsr_type): New variable.
authorMark Kettenis <kettenis@gnu.org>
Sat, 21 Jan 2006 20:59:50 +0000 (20:59 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sat, 21 Jan 2006 20:59:50 +0000 (20:59 +0000)
(i386_init_types): Initialize i386_mxcsr_type.
(i386_register_type): Return i386_mxcsr_type for %mxcsr.
* i386-tdep.c (i386_mxcsr_type): New extern.
* amd64-tdep.c (amd64_register_info): Return i386_mxcsr_type for
%mxcsr.

gdb/ChangeLog
gdb/amd64-tdep.c
gdb/i386-tdep.c
gdb/i386-tdep.h

index cc1c2233616b7f0eb53206c6fe07a2798346ffe4..3e7f38a1865a68e81d1ee1e84878beb5d3b3d781 100644 (file)
@@ -1,3 +1,12 @@
+2006-01-21  Mark Kettenis  <kettenis@gnu.org>
+
+       * i386-tdep.c (i386_mxcsr_type): New variable.
+       (i386_init_types): Initialize i386_mxcsr_type.
+       (i386_register_type): Return i386_mxcsr_type for %mxcsr.
+       * i386-tdep.c (i386_mxcsr_type): New extern.
+       * amd64-tdep.c (amd64_register_info): Return i386_mxcsr_type for
+       %mxcsr.
+
 2006-01-20  Mark Mitchell  <mark@codesourcery.com>
 
        * Makefile.in (remote-rdi.o): Remove.
index 1bea29740b37b0877130996ecddce1690ccdcda5..31a1281330773772c0d0c662b65ada327509c514 100644 (file)
@@ -121,7 +121,7 @@ static struct amd64_register_info const amd64_register_info[] =
   { "xmm13", &i386_sse_type },
   { "xmm14", &i386_sse_type },
   { "xmm15", &i386_sse_type },
-  { "mxcsr", &builtin_type_int32 }
+  { "mxcsr", &i386_mxcsr_type }
 };
 
 /* Total number of registers.  */
index 6b437c5e38e2dba3b85c7ee956705a9d7d0d08f2..1ef1bb8827f1a40b12eb6a401ca7be6976f94e0c 100644 (file)
@@ -1530,6 +1530,7 @@ struct type *i386_eflags_type;
 /* Types for the MMX and SSE registers.  */
 struct type *i386_mmx_type;
 struct type *i386_sse_type;
+struct type *i386_mxcsr_type;
 
 /* Construct types for ISA-specific registers.  */
 static void
@@ -1602,6 +1603,23 @@ i386_init_types (void)
   TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
   TYPE_NAME (type) = "builtin_type_vec128i";
   i386_sse_type = type;
+
+  type = init_flags_type ("builtin_type_i386_mxcsr", 4);
+  append_flags_type_flag (type, 0, "IE");
+  append_flags_type_flag (type, 1, "DE");
+  append_flags_type_flag (type, 2, "ZE");
+  append_flags_type_flag (type, 3, "OE");
+  append_flags_type_flag (type, 4, "UE");
+  append_flags_type_flag (type, 5, "PE");
+  append_flags_type_flag (type, 6, "DAZ");
+  append_flags_type_flag (type, 7, "IM");
+  append_flags_type_flag (type, 8, "DM");
+  append_flags_type_flag (type, 9, "ZM");
+  append_flags_type_flag (type, 10, "OM");
+  append_flags_type_flag (type, 11, "UM");
+  append_flags_type_flag (type, 12, "PM");
+  append_flags_type_flag (type, 15, "FZ");
+  i386_mxcsr_type = type;
 }
 
 /* Return the GDB type object for the "standard" data type of data in
@@ -1623,11 +1641,20 @@ i386_register_type (struct gdbarch *gdbarch, int regnum)
   if (i386_fp_regnum_p (regnum))
     return builtin_type_i387_ext;
 
+  if (i386_mmx_regnum_p (gdbarch, regnum))
+    return i386_mmx_type;
+
   if (i386_sse_regnum_p (gdbarch, regnum))
     return i386_sse_type;
 
-  if (i386_mmx_regnum_p (gdbarch, regnum))
-    return i386_mmx_type;
+#define I387_ST0_REGNUM I386_ST0_REGNUM
+#define I387_NUM_XMM_REGS (gdbarch_tdep (current_gdbarch)->num_xmm_regs)
+
+  if (regnum == I387_MXCSR_REGNUM)
+    return i386_mxcsr_type;
+
+#undef I387_ST0_REGNUM
+#undef I387_NUM_XMM_REGS
 
   return builtin_type_int;
 }
index 641908637718cbefea282c93297688fd6354e11f..7fceae08d4a4b6704653c6fe43928cba6d7ec3b2 100644 (file)
@@ -154,6 +154,7 @@ enum i386_regnum
 extern struct type *i386_eflags_type;
 extern struct type *i386_mmx_type;
 extern struct type *i386_sse_type;
+extern struct type *i386_mxcsr_type;
 
 /* Segment selectors.  */
 #define I386_SEL_RPL   0x0003  /* Requester's Privilege Level mask.  */