aboutsummaryrefslogtreecommitdiff
path: root/gdb/i387-tdep.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2003-05-04 10:27:47 +0000
committerMark Kettenis <kettenis@gnu.org>2003-05-04 10:27:47 +0000
commit04c8243ffa217415c474b89f4c7f1cae3a135b96 (patch)
tree25f3a3815e6cde2f35697c9cd9893c114dec5bea /gdb/i387-tdep.c
parent14b08c1bf1e79d3e05432a3e123c35857222fb90 (diff)
downloadgdb-04c8243ffa217415c474b89f4c7f1cae3a135b96.zip
gdb-04c8243ffa217415c474b89f4c7f1cae3a135b96.tar.gz
gdb-04c8243ffa217415c474b89f4c7f1cae3a135b96.tar.bz2
* i387-tdep.c (fxsave_offset): Add entries for %xmm8-%xmm15.
(FXSAVE_ADDR, i387_supply_fxsave): Add support for %xmm8-%xmm15.
Diffstat (limited to 'gdb/i387-tdep.c')
-rw-r--r--gdb/i387-tdep.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
index 045357e..c6a2d5d 100644
--- a/gdb/i387-tdep.c
+++ b/gdb/i387-tdep.c
@@ -522,19 +522,34 @@ static int fxsave_offset[] =
20, /* FOSEG_REGNUM (16 bits). */
16, /* FOOFF_REGNUM. */
6, /* FOP_REGNUM (bottom 11 bits). */
- 160, /* XMM0_REGNUM through ... */
- 176,
- 192,
- 208,
- 224,
- 240,
- 256,
- 272, /* ... XMM7_REGNUM (128 bits each). */
- 24, /* MXCSR_REGNUM. */
+ 160 + 0 * 16, /* XMM0_REGNUM through ... */
+ 160 + 1 * 16,
+ 160 + 2 * 16,
+ 160 + 3 * 16,
+ 160 + 4 * 16,
+ 160 + 5 * 16,
+ 160 + 6 * 16,
+ 160 + 7 * 16,
+ 160 + 8 * 16,
+ 160 + 9 * 16,
+ 160 + 10 * 16,
+ 160 + 11 * 16,
+ 160 + 12 * 16,
+ 160 + 13 * 16,
+ 160 + 14 * 16,
+ 160 + 15 * 16, /* ... XMM15_REGNUM (128 bits each). */
+ 24 /* MXCSR_REGNUM. */
};
+/* FIXME: kettenis/20030430: We made an unfortunate choice in putting
+ %mxcsr after the SSE registers %xmm0-%xmm7 instead of before, since
+ it makes supporting the registers %xmm8-%xmm15 on x86-64 a bit
+ involved. Hack around it by explicitly overriding the offset for
+ %mxcsr here. */
+
#define FXSAVE_ADDR(fxsave, regnum) \
- (fxsave + fxsave_offset[regnum - FP0_REGNUM])
+ ((regnum == MXCSR_REGNUM) ? (fxsave + 24) : \
+ (fxsave + fxsave_offset[regnum - FP0_REGNUM]))
static int i387_tag (unsigned char *raw);