From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: RFA: Add register number members for SPE acc and spefscr registers Date: Fri, 21 May 2004 23:20:00 -0000 Message-id: X-SW-Source: 2004-05/msg00654.html 2004-05-18 Jim Blandy * 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. Index: gdb/ppc-tdep.h =================================================================== RCS file: /cvs/src/src/gdb/ppc-tdep.h,v retrieving revision 1.34 diff -c -p -r1.34 ppc-tdep.h *** gdb/ppc-tdep.h 11 May 2004 04:55:31 -0000 1.34 --- gdb/ppc-tdep.h 19 May 2004 05:00:25 -0000 *************** enum return_value_convention ppc64_sysv_ *** 73,78 **** --- 73,79 ---- /* 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). */ *************** struct gdbarch_tdep *** 162,167 **** --- 163,170 ---- 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: gdb/rs6000-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v retrieving revision 1.206 diff -c -p -r1.206 rs6000-tdep.c *** gdb/rs6000-tdep.c 19 May 2004 04:18:42 -0000 1.206 --- gdb/rs6000-tdep.c 19 May 2004 05:00:27 -0000 *************** altivec_register_p (int regno) *** 141,146 **** --- 141,173 ---- } + /* 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 *************** rs6000_dwarf2_stab_reg_to_regnum (int nu *** 1829,1834 **** --- 1856,1865 ---- 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; } *************** rs6000_gdbarch_init (struct gdbarch_info *** 2825,2830 **** --- 2856,2863 ---- 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); *************** rs6000_gdbarch_init (struct gdbarch_info *** 2878,2883 **** --- 2911,2918 ---- 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);