OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.misc-tests/] [arm-isr.c] - Diff between revs 154 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 154 Rev 816
extern void abort ();
extern void abort ();
extern void exit (int);
extern void exit (int);
 
 
#ifndef __thumb__
#ifndef __thumb__
/* There used to be a couple of bugs in the ARM's prologue and epilogue
/* There used to be a couple of bugs in the ARM's prologue and epilogue
   generation for ISR routines.  The wrong epilogue instruction would be
   generation for ISR routines.  The wrong epilogue instruction would be
   generated to restore the IP register if it had to be pushed onto the
   generated to restore the IP register if it had to be pushed onto the
   stack, and the wrong offset was being computed for local variables if
   stack, and the wrong offset was being computed for local variables if
   r0 - r3 had to be saved.  This tests for both of these cases.  */
   r0 - r3 had to be saved.  This tests for both of these cases.  */
 
 
int z = 9;
int z = 9;
 
 
int
int
bar (void)
bar (void)
{
{
  return z;
  return z;
}
}
 
 
int
int
foo (int a, int b, int c, int d, int e, int f, int g, int h)
foo (int a, int b, int c, int d, int e, int f, int g, int h)
{
{
  volatile int i = (a + b) - (g + h) + bar ();
  volatile int i = (a + b) - (g + h) + bar ();
  volatile int j = (e + f) - (c + d);
  volatile int j = (e + f) - (c + d);
 
 
  return a + b + c + d + e + f + g + h + i + j;
  return a + b + c + d + e + f + g + h + i + j;
}
}
 
 
int foo1 (int a, int b, int c, int d, int e, int f, int g, int h) __attribute__ ((interrupt ("IRQ")));
int foo1 (int a, int b, int c, int d, int e, int f, int g, int h) __attribute__ ((interrupt ("IRQ")));
 
 
int
int
foo1 (int a, int b, int c, int d, int e, int f, int g, int h)
foo1 (int a, int b, int c, int d, int e, int f, int g, int h)
{
{
  volatile int i = (a + b) - (g + h) + bar ();
  volatile int i = (a + b) - (g + h) + bar ();
  volatile int j = (e + f) - (c + d);
  volatile int j = (e + f) - (c + d);
 
 
  return a + b + c + d + e + f + g + h + i + j;
  return a + b + c + d + e + f + g + h + i + j;
}
}
#endif
#endif
 
 
int
int
main (void)
main (void)
{
{
#ifndef __thumb__
#ifndef __thumb__
  if (foo (1, 2, 3, 4, 5, 6, 7, 8) != 32)
  if (foo (1, 2, 3, 4, 5, 6, 7, 8) != 32)
    abort ();
    abort ();
 
 
  if (foo1 (1, 2, 3, 4, 5, 6, 7, 8) != 32)
  if (foo1 (1, 2, 3, 4, 5, 6, 7, 8) != 32)
    abort ();
    abort ();
#endif
#endif
  exit (0);
  exit (0);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.