diff options
author | Christian Bruel <christian.bruel@st.com> | 2013-05-21 09:48:08 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2013-05-21 09:48:08 +0200 |
commit | b112d513bd6e33ea240f4db1da331695422beae2 (patch) | |
tree | 357ffc164dfcca5171e811fabe2044251f6dfa15 /gcc | |
parent | 21633c909a4c903218ad3603b240c62658d8f3c0 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 33 |
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); } |