| /* { dg-do compile { target { stack_save_isr } } } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-final { scan-assembler-not "\trte\t\n\tmov.l\t@r15\\+" } } */ |
| |
| /* This test checks if the compiler generates a pop instruction |
| in the delay slot after rte. For the sh and sh2, the rte |
| instruction reads the return pc from the stack and any pop |
| in the delay slot crashes the hardware. |
| |
| Incorrect code generated |
| mov.l @r15+,r1 |
| rte |
| mov.l @r15+,r14 |
| |
| The right code should be |
| |
| mov.l @r15+,r1 |
| mov.l @r15+,r14 |
| rte |
| nop |
| */ |
| void INT_MTU2_1_TGIA1 (void) |
| __attribute__ ((interrupt_handler)); |
| void |
| INT_MTU2_1_TGIA1 (void) |
| { |
| volatile int i = 0; |
| volatile int x, y; |
| |
| for (i = 0; i < 10; i++) |
| y = y + x; |
| } |