1/* { dg-do compile } */ 2/* { dg-options "-mint-register=3 -msave-acc-in-interrupts" } */ 3 4/* Verify that the RX specific function attributes work. */ 5 6void fast_interrupt (void) __attribute__((__fast_interrupt__)); 7void interrupt (void) __attribute__((__interrupt__)); 8int naked (int) __attribute__((__naked__)); 9 10int flag = 0; 11 12/* Fast interrupt handler. Only uses registers marked as fixed 13 by the -fixed-xxx gcc command line option. Returns via RTFI. */ 14 15void 16fast_interrupt (void) 17{ 18 flag = 1; 19} 20 21/* Interrupt handler. Must preserve any register it uses, even 22 call clobbered ones. Returns via RTE. */ 23 24void 25interrupt (void) 26{ 27 switch (flag) 28 { 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; 45 } 46} 47 48/* Naked function. The programmer must supply the function's 49 prologue and epilogue instructions. */ 50 51int 52naked (int arg) 53{ 54 flag = arg; 55} 56 57/* { dg-final { scan-assembler "rtfi" } } */ 58/* { dg-final { scan-assembler "rte" } } */ 59