This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
- From: "amylaar at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Jan 2006 15:07:48 -0000
- Subject: [Bug target/14798] [3.4/4.0/4.1/4.2 Regression] In case of SH target with -O2 option #pragma interrupt doesn't get resetted.
- References: <bug-14798-6675@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #21 from amylaar at gcc dot gnu dot org 2006-01-30 15:07 -------
Subject: Bug 14798
Author: amylaar
Date: Mon Jan 30 15:07:43 2006
New Revision: 110398
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110398
Log:
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.
Added:
trunk/gcc/config/sh/sh-c.c
trunk/gcc/testsuite/gcc.dg/attr-isr-nosave_low_regs.c
trunk/gcc/testsuite/gcc.dg/attr-isr-trap_exit.c
trunk/gcc/testsuite/gcc.dg/attr-isr-trapa.c
trunk/gcc/testsuite/gcc.dg/attr-isr.c
trunk/gcc/testsuite/gcc.dg/pragma-isr-nosave_low_regs.c
trunk/gcc/testsuite/gcc.dg/pragma-isr-trap_exit.c
trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa.c
trunk/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c
trunk/gcc/testsuite/gcc.dg/pragma-isr2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config.gcc
trunk/gcc/config/sh/sh.c
trunk/gcc/config/sh/sh.h
trunk/gcc/config/sh/sh.md
trunk/gcc/config/sh/t-sh
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/pragma-isr.c
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14798