aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChristian Bruel <christian.bruel@st.com>2013-05-21 09:48:08 +0200
committerChristian Bruel <chrbr@gcc.gnu.org>2013-05-21 09:48:08 +0200
commitb112d513bd6e33ea240f4db1da331695422beae2 (patch)
tree357ffc164dfcca5171e811fabe2044251f6dfa15 /gcc
parent21633c909a4c903218ad3603b240c62658d8f3c0 (diff)
downloadgcc-b112d513bd6e33ea240f4db1da331695422beae2.zip
gcc-b112d513bd6e33ea240f4db1da331695422beae2.tar.gz
gcc-b112d513bd6e33ea240f4db1da331695422beae2.tar.bz2
dwarf2out.c (multiple_reg_loc_descriptor): Use dbx_reg_number for spanning registers.
2013-05-21 Christian Bruel <christian.bruel@st.com> * dwarf2out.c (multiple_reg_loc_descriptor): Use dbx_reg_number for spanning registers. LEAF_REG_REMAP is supported only for contiguous registers. Set register size out of the PARALLEL loop. From-SVN: r199132
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/dwarf2out.c33
2 files changed, 23 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a89b15c..d611334 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-05-21 Christian Bruel <christian.bruel@st.com>
+
+ * dwarf2out.c (multiple_reg_loc_descriptor): Use dbx_reg_number for
+ spanning registers. LEAF_REG_REMAP is supported only for contiguous
+ registers. Set register size out of the PARALLEL loop.
+
2013-05-20 Oleg Endo <olegendo@gcc.gnu.org>
PR target/56547
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index de69cc8..e4a3c07 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -10612,25 +10612,27 @@ static dw_loc_descr_ref
multiple_reg_loc_descriptor (rtx rtl, rtx regs,
enum var_init_status initialized)
{
- int nregs, size, i;
- unsigned reg;
+ int size, i;
dw_loc_descr_ref loc_result = NULL;
- reg = REGNO (rtl);
-#ifdef LEAF_REG_REMAP
- if (crtl->uses_only_leaf_regs)
- {
- int leaf_reg = LEAF_REG_REMAP (reg);
- if (leaf_reg != -1)
- reg = (unsigned) leaf_reg;
- }
-#endif
- gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
- nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
-
/* Simple, contiguous registers. */
if (regs == NULL_RTX)
{
+ unsigned reg = REGNO (rtl);
+ int nregs;
+
+#ifdef LEAF_REG_REMAP
+ if (crtl->uses_only_leaf_regs)
+ {
+ int leaf_reg = LEAF_REG_REMAP (reg);
+ if (leaf_reg != -1)
+ reg = (unsigned) leaf_reg;
+ }
+#endif
+
+ gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
+ nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
+
size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
loc_result = NULL;
@@ -10658,10 +10660,9 @@ multiple_reg_loc_descriptor (rtx rtl, rtx regs,
{
dw_loc_descr_ref t;
- t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
+ t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
VAR_INIT_STATUS_INITIALIZED);
add_loc_descr (&loc_result, t);
- size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
add_loc_descr_op_piece (&loc_result, size);
}