view gcc/testsuite/gcc.target/sh/rte-delay-slot.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
line wrap: on
line source

/* { 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;
}