RISC-V: Add interrupt attribute modes.
commitcd3f326c0fce35770343f1d55d427fad6b7d5c33
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Jun 2018 19:08:36 +0000 (6 19:08 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Jun 2018 19:08:36 +0000 (6 19:08 +0000)
tree655961162cdfc53ad9be35b0f98b4fa69610333d
parentdcf9e68585391d64c0278e8116c1fa7b8c2e666f
RISC-V: Add interrupt attribute modes.

gcc/
* config/riscv/riscv.c (enum riscv_privilege_levels): New.
(struct machine_function): New field interrupt_mode.
(riscv_handle_type_attribute): New function.  Add forward declaration.
(riscv_attribute_table) <interrupt>: Use riscv_handle_type_attribute.
(riscv_expand_epilogue): Check interrupt_mode field.
(riscv_set_current_function): Check interrupt attribute args and
set interrupt_mode field.
* config/riscv/riscv.md (UNSPECV_SRET, UNSPECV_URET): New.
(riscv_sret, riscv_uret): New.
* doc/extend.texi (RISC-V Function Attributes) <interrupt>: Document
new arguments to interrupt attribute.

gcc/testsuite/
* gcc.target/riscv/interrupt-5.c (sub3): Add new test.
* gcc.target/riscv/interrupt-mmode.c: New.
* gcc.target/riscv/interrupt-smode.c: New.
* gcc.target/riscv/interrupt-umode.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@261244 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/riscv/riscv.c
gcc/config/riscv/riscv.md
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/riscv/interrupt-5.c
gcc/testsuite/gcc.target/riscv/interrupt-mmode.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/interrupt-smode.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/interrupt-umode.c [new file with mode: 0644]