2018-02-09 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / gcc / testsuite / gcc.target / rx / interrupts.c
blobcdc4903ded87d445a2121f5d23ea0729411eedab
1 /* { dg-do compile } */
2 /* { dg-options "-mint-register=3 -msave-acc-in-interrupts" } */
4 /* Verify that the RX specific function attributes work. */
6 void fast_interrupt (void) __attribute__((__fast_interrupt__));
7 void interrupt (void) __attribute__((__interrupt__));
8 int naked (int) __attribute__((__naked__));
10 int flag = 0;
12 /* Fast interrupt handler. Only uses registers marked as fixed
13 by the -fixed-xxx gcc command line option. Returns via RTFI. */
15 void
16 fast_interrupt (void)
18 flag = 1;
21 /* Interrupt handler. Must preserve any register it uses, even
22 call clobbered ones. Returns via RTE. */
24 void
25 interrupt (void)
27 switch (flag)
29 case 0:
30 flag = -1;
31 break;
32 case 1:
33 case 2:
34 case 4:
35 flag = flag - 2;
36 break;
37 case 5:
38 case 7:
39 case 6:
40 flag ^= 3;
41 break;
42 default:
43 naked (flag * 2);
44 break;
48 /* Naked function. The programmer must supply the function's
49 prologue and epilogue instructions. */
51 int
52 naked (int arg)
54 flag = arg;
57 /* { dg-final { scan-assembler "rtfi" } } */
58 /* { dg-final { scan-assembler "rte" } } */