From b112d513bd6e33ea240f4db1da331695422beae2 Mon Sep 17 00:00:00 2001 From: Christian Bruel Date: Tue, 21 May 2013 09:48:08 +0200 Subject: [PATCH] dwarf2out.c (multiple_reg_loc_descriptor): Use dbx_reg_number for spanning registers. 2013-05-21 Christian Bruel * 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 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2out.c | 33 +++++++++++++++++---------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a89b15c6c6b..d6113341ba7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-05-21 Christian Bruel + + * 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 PR target/56547 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index de69cc8d7a7..e4a3c075520 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); } -- 2.30.2