* ppc-tdep.h (spe_register_p): New declaration.
authorJim Blandy <jimb@codesourcery.com>
Sat, 22 May 2004 06:03:26 +0000 (06:03 +0000)
committerJim Blandy <jimb@codesourcery.com>
Sat, 22 May 2004 06:03:26 +0000 (06:03 +0000)
(struct gdbarch_tdep): New members: ppc_acc_regnum and
ppc_spefscr_regnum.
* rs6000-tdep.c (spe_register_p): New function.
(rs6000_dwarf2_stab_reg_to_regnum): Recognize numbers for acc and
spefscr.
(rs6000_gdbarch_init): Initialize the new members of the tdep
structure.

gdb/ChangeLog
gdb/ppc-tdep.h
gdb/rs6000-tdep.c

index 839d42734700e2960f2087952180a08108f314d5..b2e61370856feb71fad246d0ca3174f926486f08 100644 (file)
@@ -1,3 +1,14 @@
+2004-05-22  Jim Blandy  <jimb@redhat.com>
+
+       * ppc-tdep.h (spe_register_p): New declaration.
+       (struct gdbarch_tdep): New members: ppc_acc_regnum and
+       ppc_spefscr_regnum.
+       * rs6000-tdep.c (spe_register_p): New function.
+       (rs6000_dwarf2_stab_reg_to_regnum): Recognize numbers for acc and
+       spefscr.
+       (rs6000_gdbarch_init): Initialize the new members of the tdep
+       structure.
+
 2004-05-21  Jim Blandy  <jimb@redhat.com>
 
        * ppc-linux-nat.c (fetch_register): Move code back to be next
index a47fdfcd0a0d5f349faa39f79bef2bd3bd8ded94..68919b4f9d7602502762177a0832a275c6d8f456 100644 (file)
@@ -73,6 +73,7 @@ enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarc
 
 /* From rs6000-tdep.c... */
 int altivec_register_p (int regno);
+int spe_register_p (int regno);
 
 /* Return non-zero if the architecture described by GDBARCH has
    floating-point registers (f0 --- f31 and fpscr).  */
@@ -162,6 +163,8 @@ struct gdbarch_tdep
     int ppc_vrsave_regnum;     /* Last AltiVec register */
     int ppc_ev0_regnum;         /* First ev register */
     int ppc_ev31_regnum;        /* Last ev register */
+    int ppc_acc_regnum;         /* SPE 'acc' register */
+    int ppc_spefscr_regnum;     /* SPE 'spefscr' register */
     int lr_frame_offset;       /* Offset to ABI specific location where
                                    link register is saved.  */
 };
index 9a318fe7a3998b8509459b8241b4c8458f83fecc..0f6924d2d6e519e3ec130f8f3a866e3e0717d639 100644 (file)
@@ -141,6 +141,33 @@ altivec_register_p (int regno)
 }
 
 
+/* Return true if REGNO is an SPE register, false otherwise.  */
+int
+spe_register_p (int regno)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  
+  /* Is it a reference to EV0 -- EV31, and do we have those?  */
+  if (tdep->ppc_ev0_regnum >= 0
+      && tdep->ppc_ev31_regnum >= 0
+      && tdep->ppc_ev0_regnum <= regno && regno <= tdep->ppc_ev31_regnum)
+    return 1;
+
+  /* Is it a reference to the 64-bit accumulator, and do we have that?  */
+  if (tdep->ppc_acc_regnum >= 0
+      && tdep->ppc_acc_regnum == regno)
+    return 1;
+
+  /* Is it a reference to the SPE floating-point status and control register,
+     and do we have that?  */
+  if (tdep->ppc_spefscr_regnum >= 0
+      && tdep->ppc_spefscr_regnum == regno)
+    return 1;
+
+  return 0;
+}
+
+
 /* Return non-zero if the architecture described by GDBARCH has
    floating-point registers (f0 --- f31 and fpscr).  */
 int
@@ -1831,6 +1858,10 @@ rs6000_dwarf2_stab_reg_to_regnum (int num)
         return tdep->ppc_xer_regnum;
       case 109:
         return tdep->ppc_vrsave_regnum;
+      case 111:
+        return gdbarch_tdep (current_gdbarch)->ppc_acc_regnum;
+      case 112:
+        return gdbarch_tdep (current_gdbarch)->ppc_spefscr_regnum;
       default: 
         return num;
       }
@@ -2827,6 +2858,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->ppc_vrsave_regnum = -1;
   tdep->ppc_ev0_regnum = -1;
   tdep->ppc_ev31_regnum = -1;
+  tdep->ppc_acc_regnum = -1;
+  tdep->ppc_spefscr_regnum = -1;
 
   set_gdbarch_pc_regnum (gdbarch, 64);
   set_gdbarch_sp_regnum (gdbarch, 1);
@@ -2880,6 +2913,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
        tdep->ppc_ev31_regnum = 38;
         tdep->ppc_fp0_regnum = -1;
         tdep->ppc_fpscr_regnum = -1;
+        tdep->ppc_acc_regnum = 39;
+        tdep->ppc_spefscr_regnum = 40;
         set_gdbarch_pc_regnum (gdbarch, 0);
         set_gdbarch_sp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
         set_gdbarch_deprecated_fp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);