i386.h (DBX_REGISTER_NUMBER): Return proper values for 64bits.
authorJan Hubicka <jh@suse.cz>
Sat, 10 Mar 2001 13:36:26 +0000 (14:36 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 10 Mar 2001 13:36:26 +0000 (13:36 +0000)
* i386.h (DBX_REGISTER_NUMBER): Return proper values for 64bits.
(dbx64_register_map): Declare.
(RETURN_ADDR_RTX): Fix for 64bit.
(DWARF_FRAME_RETURN_COLUMN): Set to 16 for 64bit.
(INCOMING_FRAME_SP_OFFSET): Set to 8.
* i386.c (dbx64_register_map): New global array.
* beos-elf.h, freebsd.h, i386-interix.h, i386elf.h,
linux.h (DBX_REGISTER_REGNUMBER): Use dbx64_register_map
for 64bits.

From-SVN: r40365

gcc/ChangeLog
gcc/config/i386/beos-elf.h
gcc/config/i386/freebsd.h
gcc/config/i386/i386-interix.h
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386elf.h
gcc/config/i386/linux.h

index 43a6ffeb0a0222983c1977514487c6b0f5dc2cad..05985746fed682f2812bef86a681c434d4db9611 100644 (file)
@@ -1,3 +1,15 @@
+Sat Mar 10 14:34:59 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+       * i386.h (DBX_REGISTER_NUMBER): Return proper values for 64bits.
+       (dbx64_register_map): Declare.
+       (RETURN_ADDR_RTX): Fix for 64bit.
+       (DWARF_FRAME_RETURN_COLUMN): Set to 16 for 64bit.
+       (INCOMING_FRAME_SP_OFFSET): Set to 8.
+       * i386.c (dbx64_register_map): New global array.
+       * beos-elf.h, freebsd.h, i386-interix.h, i386elf.h,
+       linux.h (DBX_REGISTER_REGNUMBER): Use dbx64_register_map
+       for 64bits.
+
 2001-03-10  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * cppfiles.c (search_from): Use lbasename.
index 0ac148b2458fd1c50c5b2921d2bf997c24868e61..5b980b609a8ca2a97117fba9abfb02f528d38a22 100644 (file)
@@ -49,7 +49,8 @@ Boston, MA 02111-1307, USA.  */
 #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
 
 #undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n)  svr4_dbx_register_map[n]
+#define DBX_REGISTER_NUMBER(n) \
+  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
 
 /* Output assembler code to FILE to increment profiler label # LABELNO
    for profiling a function entry.  */
index ebd337a5911af2809f5a4939cb02640f1c4eb5da..6ae623507c408e34469958817059778fd7c8bc1e 100644 (file)
@@ -50,7 +50,8 @@ Boston, MA 02111-1307, USA.  */
 #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
 
 #undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n)  svr4_dbx_register_map[n]
+#define DBX_REGISTER_NUMBER(n) \
+  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
 
 #undef  NO_PROFILE_COUNTERS
 #define NO_PROFILE_COUNTERS
index aa452453e6ab6fc56c3f7ecd8b8e29a9ae1d0b78..69486a544ffdc361fb240e78f00e7a168297b0ef 100644 (file)
@@ -432,7 +432,8 @@ while (0)
 
 #undef DBX_REGISTER_NUMBER
 #define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 \
+(TARGET_64BIT ? dbx64_register_map[n] \
+ : (n) == 0 ? 0 \
  : (n) == 1 ? 2 \
  : (n) == 2 ? 1 \
  : (n) == 3 ? 3 \
index b5ecd7f79c4ec9eee9631e0c8a0e056674fed160..5667c1cc40a67822ffd79214bba303111ab6c3a7 100644 (file)
@@ -353,6 +353,18 @@ int const dbx_register_map[FIRST_PSEUDO_REGISTER] =
   29, 30, 31, 32, 33, 34, 35, 36,       /* MMX */
 };
 
+/* The "default" register map used in 64bit mode.  */
+int const dbx64_register_map[FIRST_PSEUDO_REGISTER] =
+{
+  0, 1, 2, 3, 4, 5, 6, 7,              /* general regs */
+  33, 34, 35, 36, 37, 38, 39, 40       /* fp regs */
+  -1, -1, -1, -1, -1,                  /* arg, flags, fpsr, dir, frame */
+  17, 18, 19, 20, 21, 22, 23, 24,      /* SSE */
+  41, 42, 43, 44, 45, 46, 47, 48,       /* MMX */
+  8,9,10,11,12,13,14,15,               /* extended integer registers */
+  25, 26, 27, 28, 29, 30, 31, 32,      /* extended SSE registers */
+};
+
 /* Define the register numbers to be used in Dwarf debugging information.
    The SVR4 reference port C compiler uses the following register numbers
    in its Dwarf output code:
index e25b4973dabde441b53f3dc5537b34a3a6d638f4..9afd9daeac0a86103097a65dad4a0e45ece0cc0d 100644 (file)
@@ -2718,9 +2718,11 @@ number as al, and ax.
 
 /* How to renumber registers for dbx and gdb.  */
 
-#define DBX_REGISTER_NUMBER(n)  dbx_register_map[n]
+#define DBX_REGISTER_NUMBER(n) \
+  (TARGET_64BIT ? dbx64_register_map[n] : dbx_register_map[n])
 
 extern int const dbx_register_map[FIRST_PSEUDO_REGISTER];
+extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER];
 extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
 
 /* Before the prologue, RA is at 0(%esp).  */
@@ -2730,14 +2732,14 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
 /* After the prologue, RA is at -4(AP) in the current frame.  */
 #define RETURN_ADDR_RTX(COUNT, FRAME)                                  \
   ((COUNT) == 0                                                                \
-   ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -4))\
-   : gen_rtx_MEM (Pmode, plus_constant (FRAME, 4)))
+   ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, TARGET_64BIT ? -8 : -4))\
+   : gen_rtx_MEM (Pmode, plus_constant (FRAME, TARGET_64BIT ? 8 : 4)))
 
 /* PC is dbx register 8; let's use that column for RA. */
-#define DWARF_FRAME_RETURN_COLUMN      8
+#define DWARF_FRAME_RETURN_COLUMN      (TARGET_64BIT ? 16 : 8)
 
 /* Before the prologue, the top of the frame is at 4(%esp).  */
-#define INCOMING_FRAME_SP_OFFSET 4
+#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD
 
 /* This is how to output the definition of a user-level label named NAME,
    such as the label on a static function or variable NAME.  */
index 904446aeee9ffb64b3dc6b3a43c4297a924c5cbe..730761ff79cd6a761ecb1cd3e9efa7b817268b68 100644 (file)
@@ -112,7 +112,8 @@ do { long value[3];                                                 \
   } while (0)
 
 #undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n)  svr4_dbx_register_map[n]
+#define DBX_REGISTER_NUMBER(n) \
+  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
 
 /* The routine used to output sequences of byte values.  We use a special
    version of this for most svr4 targets because doing so makes the
index 0ad1c3ac0cb603a43483c80f2cb1e36cf766bc68..34e416cc49b7376b76781b561267824614e30fe4 100644 (file)
@@ -56,7 +56,8 @@ Boston, MA 02111-1307, USA.  */
 #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
 
 #undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n)  svr4_dbx_register_map[n]
+#define DBX_REGISTER_NUMBER(n) \
+  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
 
 /* Output assembler code to FILE to call the profiler.
    To the best of my knowledge, no Linux libc has required the label