diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-26 19:21:16 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-26 19:21:16 +0000 |
commit | d15ee1a58e26a69d4a56e58f6930e13e686a6c8a (patch) | |
tree | c465f270ce510064453ef668b699763e5cde22f5 /gcc/dwarf2out.c | |
parent | 99a104182e185e02aa1104076ed836fe54db3efc (diff) | |
download | ppe42-gcc-d15ee1a58e26a69d4a56e58f6930e13e686a6c8a.tar.gz ppe42-gcc-d15ee1a58e26a69d4a56e58f6930e13e686a6c8a.zip |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91346 138bc75d-0d04-0410-961f-82ee72b054a4
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 bd2650480b0..96351c4c0ba 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 (); } |