arm-protos.h (arm_dbx_register_number): Add prototype.
authorPaul Brook <pbrook@gcc.gnu.org>
Tue, 29 Mar 2005 03:00:27 +0000 (03:00 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Tue, 29 Mar 2005 03:00:27 +0000 (03:00 +0000)
2005-03-29  Paul Brook  <paul@codesourcery.com>

* config/arm/arm-protos.h (arm_dbx_register_number): Add prototype.
* config/arm/arm.c (arm_dbx_register_number): New function.
* config/arm/arm.h (IS_FPA_REGNUM, DBX_REGISTER_NUMBER): Define.

From-SVN: r97150

gcc/config/arm/arm-protos.h
gcc/config/arm/arm.c
gcc/config/arm/arm.h

index e7811ca8c8ef8ff44eef0f023da14c82a6f2d2eb..f609b3907dc9d3e40e94ebd878b7896aa661bce7 100644 (file)
@@ -38,6 +38,7 @@ extern HOST_WIDE_INT arm_compute_initial_elimination_offset (unsigned int,
                                                             unsigned int);
 extern HOST_WIDE_INT thumb_compute_initial_elimination_offset (unsigned int,
                                                               unsigned int);
+extern unsigned int arm_dbx_register_number (unsigned int);
 
 #ifdef TREE_CODE
 extern int arm_return_in_memory (tree);
index b307983892c12818622045ae909ade2e8c8b37e7..dc7d410f7610cd3f0fdf3e990bb4a349051bc057 100644 (file)
@@ -14641,3 +14641,30 @@ arm_shift_truncation_mask (enum machine_mode mode)
 {
   return mode == SImode ? 255 : 0;
 }
+
+
+/* Map internal gcc register numbers to DWARF2 register numbers.  */
+
+unsigned int
+arm_dbx_register_number (unsigned int regno)
+{
+  if (regno < 16)
+    return regno;
+
+  /* TODO: Legacy targets output FPA regs as registers 16-23 for backwards
+     compatibility.  The EABI defines them as registers 96-103.  */
+  if (IS_FPA_REGNUM (regno))
+    return (TARGET_AAPCS_BASED ? 96 : 16) + regno - FIRST_FPA_REGNUM;
+
+  if (IS_VFP_REGNUM (regno))
+    return 64 + regno - FIRST_VFP_REGNUM;
+
+  if (IS_IWMMXT_GR_REGNUM (regno))
+    return 104 + regno - FIRST_IWMMXT_GR_REGNUM;
+
+  if (IS_IWMMXT_REGNUM (regno))
+    return 112 + regno - FIRST_IWMMXT_REGNUM;
+
+  abort ();
+}
+
index 6995877974657528e20ebbe28203e640de901341..9f4cc3c07ad32dcb822bb79054a62e650ea4359c 100644 (file)
@@ -1032,6 +1032,8 @@ extern const char * structure_size_string;
 /* ARM floating pointer registers.  */
 #define FIRST_FPA_REGNUM       16
 #define LAST_FPA_REGNUM        23
+#define IS_FPA_REGNUM(REGNUM) \
+  (((REGNUM) >= FIRST_FPA_REGNUM) && ((REGNUM) <= LAST_FPA_REGNUM))
 
 #define FIRST_IWMMXT_GR_REGNUM 43
 #define LAST_IWMMXT_GR_REGNUM  46
@@ -1064,6 +1066,8 @@ extern const char * structure_size_string;
 /* VFP adds 32 + 1 more.  */
 #define FIRST_PSEUDO_REGISTER   96
 
+#define DBX_REGISTER_NUMBER(REGNO) arm_dbx_register_number (REGNO)
+
 /* Value should be nonzero if functions must have frame pointers.
    Zero means the frame pointer need not be set up (and parms may be accessed
    via the stack pointer) in functions that seem suitable.