PR target/14798:
commit57d5535b031f85ada1a22059d8215cb349aa0e97
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Jan 2006 15:07:43 +0000 (30 15:07 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Jan 2006 15:07:43 +0000 (30 15:07 +0000)
tree2c0dc139501a3b56003fa7a9d0a9f3e5ae212d8e
parentcdd306bef327393903d2a2f3fe658feba87606e3
PR target/14798:

gcc:
* sh.c (pragma_interrupt, trap_exit, sp_switch): Remove variable.
(pragma_trap, pragma_nosave_low_regs): Likewise.
(current_function_anonymous_args): Likewise.
(sh_deferred_function_attributes): New variable.
(sh_deferred_function_attributes_tail): Likewise.
(print_operand): For '@', look up trap_exit attribute.
(calc_live_regs): Look up trapa_handler attribute.  For trapa
handlers, save/restore fpscr, but don't do any other
interrupt-specific saves.
Don't save r0..r7 if the nosave_low_regs attribute is in effect.
Fix check for partially saved registers to check for SHmedia.
(sh_expand_prologue, sh_expand_epilogue): Look up sp_switch attribute.
(sh_output_function_epilogue): Don't clear any of the removed
variables.
(sh_insert_attributes): Don't check pragma_interrupt.
Insert deferred attributes.  Check that interrupt attribute is
present for other attributes that require its presence.
(sh_attribute_table): Add new attributes trapa_handler and
nosave_low_regs.
(sh_handle_sp_switch_attribute, sh_handle_trap_exit_attribute):
Don't check for pragma_interrupt.  Don't store argument.
* sh.h (pragma_interrupt, sp_switch): Don't declare.
(sh_deferred_function_attributes): Declare.
(sh_deferred_function_attributes_tail): Likewise.
* sh.md (sp_switch_1): Add operand.  Change generator caller.
(sh_pr_interrupt, sh_pr_trapa, sh_pr_nosave_low_regs): Remove.
(*return_i): Don't use when trap_exit attribute is in effect.
(*return_trapa): New insn pattern.
* sh-c.c: New file.
* config.gcc (sh[123456ble]*-* | sh-*-*): New trailer stanza,
setting c_target_objs and cxx_target_objs.
* t-sh: Add rule for sh-c.o.
gcc/testsuite:
* gcc.dg/pragma-isr.c: Added target sh[1234ble]*-*-*.
* gcc.dg/pragma-isr2.c, gcc.dg/pragma-isr-trapa.c: New tests.
* gcc.dg/pragma-isr-trapa2.c: Likewise.
* gcc.dg/pragma-isr-nosave_low_regs.c: Likewise.
* gcc.dg/pragma-isr-trap_exit.c: Likewise.
* gcc.dg/attr-isr.c, gcc.dg/attr-isr-trapa.c: Likewise.
* gcc.dg/attr-isr-trap_exit.c: Likewise.
* gcc.dg/attr-isr-nosave_low_regs.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110398 138bc75d-0d04-0410-961f-82ee72b054a4
18 files changed:
gcc/ChangeLog
gcc/config.gcc
gcc/config/sh/sh-c.c [new file with mode: 0644]
gcc/config/sh/sh.c
gcc/config/sh/sh.h
gcc/config/sh/sh.md
gcc/config/sh/t-sh
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/attr-isr-nosave_low_regs.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-isr-trap_exit.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-isr-trapa.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-isr.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pragma-isr-nosave_low_regs.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pragma-isr-trap_exit.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pragma-isr-trapa.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pragma-isr-trapa2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pragma-isr.c
gcc/testsuite/gcc.dg/pragma-isr2.c [new file with mode: 0644]