diff options
author | Eric Botcazou <ebotcazou@libertysurf.fr> | 2004-11-26 20:21:16 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2004-11-26 19:21:16 +0000 |
commit | e54c7471819ee8dc9e4ba0ada1db242bd5bd68ed (patch) | |
tree | c465f270ce510064453ef668b699763e5cde22f5 /gcc/dwarf2out.c | |
parent | 077094ace3c976aafd620af5f4291389e0b4e0e4 (diff) | |
download | gcc-e54c7471819ee8dc9e4ba0ada1db242bd5bd68ed.zip gcc-e54c7471819ee8dc9e4ba0ada1db242bd5bd68ed.tar.gz gcc-e54c7471819ee8dc9e4ba0ada1db242bd5bd68ed.tar.bz2 |
target.h (struct gcc_target): New field 'dwarf_handle_frame_unspec'.
* target.h (struct gcc_target): New field 'dwarf_handle_frame_unspec'.
* target_def.h (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to 0.
(TARGET_INITIALIZER): Add TARGET_DWARF_HANDLE_FRAME_UNSPEC.
* dwarf2out.c (dwarf2out_frame_debug_expr): Allow REG->REG move
to a fixed reg if the source is the Return Address register.
Implement new Rule 15.
* doc/tm.texi (Frame Layout): Document TARGET_DWARF_HANDLE_FRAME_UNSPEC.
* config/sparc/sparc.c (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to
sparc_dwarf_handle_frame_unspec.
(gen_save_register_window): New function.
(emit_stack_pointer_increment): Rename into gen_stack_pointer_inc.
(emit_stack_pointer_decrement): Rename into gen_stack_pointer_dec.
(expand_prologue): Adjust calls to emit_stack_pointer_{in,de}crement.
Set RTX_FRAME_RELATED_P on the appropriate insns and members of insns.
(sparc_asm_function_prologue): Do not emit call frame debugging info.
(emit_and_preserve): Adjust calls to emit_stack_pointer_{in,de}crement.
(sparc_expand_epilogue): Likewise.
(sparc_dwarf_handle_frame_unspec): New function.
* config/sparc/sparc.md (save_register_window): Remove.
(save_register_windowdi): Rewrite modelled on the callframe debug info.
(save_register_windowsi): Likewise.
From-SVN: r91346
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index bd26504..96351c4 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -1441,7 +1441,11 @@ static dw_cfa_location cfa_temp; (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>) effects: cfa.reg = <reg1> cfa.base_offset = -cfa_temp.offset - cfa_temp.offset -= mode_size(mem) */ + cfa_temp.offset -= mode_size(mem) + + Rule 15: + (set <reg> {unspec, unspec_volatile}) + effects: target-dependent */ static void dwarf2out_frame_debug_expr (rtx expr, const char *label) @@ -1505,7 +1509,10 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label) { /* Saving a register in a register. */ gcc_assert (call_used_regs [REGNO (dest)] - && !fixed_regs [REGNO (dest)]); + && (!fixed_regs [REGNO (dest)] + /* For the SPARC and its register window. */ + || DWARF_FRAME_REGNUM (REGNO (src)) + == DWARF_FRAME_RETURN_COLUMN)); queue_reg_save (label, src, dest, 0); } break; @@ -1632,6 +1639,13 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label) case HIGH: break; + /* Rule 15 */ + case UNSPEC: + case UNSPEC_VOLATILE: + gcc_assert (targetm.dwarf_handle_frame_unspec); + targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1)); + break; + default: gcc_unreachable (); } |