aboutsummaryrefslogtreecommitdiff
path: root/gdb/i386-tdep.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2006-01-21 20:59:50 +0000
committerMark Kettenis <kettenis@gnu.org>2006-01-21 20:59:50 +0000
commit878d91936fddadb1fa647386134bf65b0712ea08 (patch)
tree4c58ccbe945864e099455460c4101533e91d9cbc /gdb/i386-tdep.c
parent67d78caad5228c04e198e8e5d96dc27fdc28adb9 (diff)
downloadgdb-878d91936fddadb1fa647386134bf65b0712ea08.zip
gdb-878d91936fddadb1fa647386134bf65b0712ea08.tar.gz
gdb-878d91936fddadb1fa647386134bf65b0712ea08.tar.bz2
* 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.
Diffstat (limited to 'gdb/i386-tdep.c')
-rw-r--r--gdb/i386-tdep.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 6b437c5..1ef1bb8 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -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;
}