mirror of git://gcc.gnu.org/git/gcc.git
* dwarf2out.c (mem_loc_descriptor): Handle shifts.
From-SVN: r81252
This commit is contained in:
parent
f0e6f84591
commit
40f0b3eeab
|
@ -1,3 +1,7 @@
|
||||||
|
2004-04-28 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
* dwarf2out.c (mem_loc_descriptor): Handle shifts.
|
||||||
|
|
||||||
2004-04-28 Ulrich Weigand <uweigand@de.ibm.com>
|
2004-04-28 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
* gcse.c (find_moveable_store): Do not accept store insns with
|
* gcse.c (find_moveable_store): Do not accept store insns with
|
||||||
|
|
|
@ -8435,6 +8435,7 @@ static dw_loc_descr_ref
|
||||||
mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
|
mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
|
||||||
{
|
{
|
||||||
dw_loc_descr_ref mem_loc_result = NULL;
|
dw_loc_descr_ref mem_loc_result = NULL;
|
||||||
|
enum dwarf_location_atom op;
|
||||||
|
|
||||||
/* Note that for a dynamically sized array, the location we will generate a
|
/* Note that for a dynamically sized array, the location we will generate a
|
||||||
description of here will be the lowest numbered location which is
|
description of here will be the lowest numbered location which is
|
||||||
|
@ -8576,10 +8577,26 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* If a pseudo-reg is optimized away, it is possible for it to
|
||||||
|
be replaced with a MEM containing a multiply or shift. */
|
||||||
case MULT:
|
case MULT:
|
||||||
|
op = DW_OP_mul;
|
||||||
|
goto do_binop;
|
||||||
|
|
||||||
|
case ASHIFT:
|
||||||
|
op = DW_OP_shl;
|
||||||
|
goto do_binop;
|
||||||
|
|
||||||
|
case ASHIFTRT:
|
||||||
|
op = DW_OP_shra;
|
||||||
|
goto do_binop;
|
||||||
|
|
||||||
|
case LSHIFTRT:
|
||||||
|
op = DW_OP_shr;
|
||||||
|
goto do_binop;
|
||||||
|
|
||||||
|
do_binop:
|
||||||
{
|
{
|
||||||
/* If a pseudo-reg is optimized away, it is possible for it to
|
|
||||||
be replaced with a MEM containing a multiply. */
|
|
||||||
dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
|
dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
|
||||||
can_use_fbreg);
|
can_use_fbreg);
|
||||||
dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
|
dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
|
||||||
|
@ -8590,7 +8607,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
|
||||||
|
|
||||||
mem_loc_result = op0;
|
mem_loc_result = op0;
|
||||||
add_loc_descr (&mem_loc_result, op1);
|
add_loc_descr (&mem_loc_result, op1);
|
||||||
add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
|
add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue