[ARC] Automatic context save/restore for regular interrupts.
authorClaudiu Zissulescu <claziss@synopsys.com>
Tue, 9 May 2017 14:19:22 +0000 (16:19 +0200)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Tue, 9 May 2017 14:19:22 +0000 (16:19 +0200)
commit4145318390da5670b2e571593ccfe7779863b93c
treee1214c456606fb611b8e63d9e124aee1b065bc08
parent019bd543a9a7c24396eab29a97e4c30c7931bf4d
[ARC] Automatic context save/restore for regular interrupts.

The AUX_IRQ_CTRL register controls the behavior of automated register
save and restore or prologue and epilogue sequences during a non-fast
interrupt entry and exit, and context save and restore instructions.

A user passes to the compiler the configuration of the AUX_IRQ_CTRL
register via mirq-ctrl-saved option.  This option, specifies
gneral-purposes registers that the processor saves/restores on
interrupt entry and exit, and it is only valid for ARC EM and ARC HS
cores.

gcc/
2017-05-09  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (irq_ctrl_saved): New variable.
(ARC_AUTOBLINK_IRQ_P): Define.
(ARC_AUTOFP_IRQ_P): Likewise.
(ARC_AUTO_IRQ_P): Likewise.
(irq_range): New function.
(arc_must_save_register): Likewise.
(arc_must_save_return_addr): Likewise.
(arc_dwarf_emit_irq_save_regs): Likewise.
(arc_override_options): Handle deferred options.
(MUST_SAVE_REGISTER): Deleted, replaced by arc_must_save_register.
(MUST_SAVE_RETURN_ADDR): Deleted, replaced by
arc_must_save_return_addr.
(arc_compute_frame_size): Handle automated save and restore of
registers.
(arc_expand_prologue): Likewise.
(arc_expand_epilogue): Likewise.
* config/arc/arc.md (stack_irq_dwarf): New unspec instruction.
* config/arc/arc.opt (mirq-ctrl-saved): New option.
* doc/invoke.texi (mirq-ctrl-saved): Document option.

testsuite/
2017-05-09  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/interrupt-5.c: Newfile.
* gcc.target/arc/interrupt-6.c: Likewise.
* gcc.target/arc/interrupt-7.c: Likewise.
* gcc.target/arc/interrupt-8.c: Likewise.
* gcc.target/arc/interrupt-9.c: Likewise.

From-SVN: r247795
ChangeLog
gcc/config/arc/arc.c
gcc/config/arc/arc.md
gcc/config/arc/arc.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arc/interrupt-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/interrupt-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/interrupt-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/interrupt-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/interrupt-9.c [new file with mode: 0644]