* i387-tdep.c (fxsave_offset): Add entries for %xmm8-%xmm15.
authorMark Kettenis <kettenis@gnu.org>
Sun, 4 May 2003 10:27:47 +0000 (10:27 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sun, 4 May 2003 10:27:47 +0000 (10:27 +0000)
(FXSAVE_ADDR, i387_supply_fxsave): Add support for %xmm8-%xmm15.

gdb/ChangeLog
gdb/i387-tdep.c

index 53e9de82665afe821512108ae4b96c68bac374cd..14dfacc97e5cfd5e3ddc159ca3fa5f2ab90cc14c 100644 (file)
@@ -1,5 +1,8 @@
 2003-05-04  Mark Kettenis  <kettenis@gnu.org>
 
+       * i387-tdep.c (fxsave_offset): Add entries for %xmm8-%xmm15.
+       (FXSAVE_ADDR, i387_supply_fxsave): Add support for %xmm8-%xmm15.
+
        * i386-linux-nat.c (supply_gregset): Remove unnecessary casts.
 
 2003-05-03  J. Brobecker  <brobecker@gnat.com>
index 045357ea3fe2b591c0d23fea67c32fe7cfa0f9c1..c6a2d5dac84961f246cae9123867c70b68c7a31d 100644 (file)
@@ -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);
 \f