interrupt_thread-1.c, [...]: New.
* gcc.target/m68k/interrupt_thread-1.c, gcc.target/m68k/interrupt_thread-2.c, gcc.target/m68k/interrupt_thread-3.c: New. * gcc.target/m68k/m68k.exp: Accept fido. From-SVN: r124804
This commit is contained in:
parent
9940897603
commit
dea9270db4
3 changed files with 73 additions and 0 deletions
43
gcc/testsuite/gcc.target/m68k/interrupt_thread-1.c
Normal file
43
gcc/testsuite/gcc.target/m68k/interrupt_thread-1.c
Normal file
|
@ -0,0 +1,43 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-mcpu=fidoa -O2 -fomit-frame-pointer" } */
|
||||
|
||||
/* Check that interrupt_thread attribute works. */
|
||||
|
||||
#ifdef __mfido__
|
||||
extern void foo (void) __attribute__ ((interrupt_thread));
|
||||
|
||||
int a, b, c, d;
|
||||
|
||||
void bar (void);
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
int w, x, y, z;
|
||||
|
||||
w = a;
|
||||
x = b;
|
||||
y = c;
|
||||
z = d;
|
||||
|
||||
bar ();
|
||||
|
||||
a = w;
|
||||
b = x;
|
||||
c = y;
|
||||
d = z;
|
||||
}
|
||||
#else
|
||||
/* If the current mutilib is, say, -mcpu=5485, the compiler gets
|
||||
-mcpu=fidoa -mcpu=5485, where -mcpu=fidoa is overridden. In that
|
||||
case, we just print out "sleep" in the assembly file and pretend
|
||||
that everything is all right. */
|
||||
asm ("sleep");
|
||||
#endif
|
||||
|
||||
/* "sleep" should be generated in place of "rts". */
|
||||
/* { dg-final { scan-assembler-times "sleep" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "rts" 0 } } */
|
||||
|
||||
/* There should be no stack adjustment. */
|
||||
/* { dg-final { scan-assembler-times "sp" 0 } } */
|
23
gcc/testsuite/gcc.target/m68k/interrupt_thread-2.c
Normal file
23
gcc/testsuite/gcc.target/m68k/interrupt_thread-2.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-mcpu=fidoa" } */
|
||||
|
||||
/* Check that an error is issued for using more than one
|
||||
interrupt_attribute at the same time. */
|
||||
|
||||
/* If the current mutilib is, say, -mcpu=5485, the compiler gets
|
||||
-mcpu=fidoa -mcpu=5485, where -mcpu=fidoa is overridden. In that
|
||||
case, we just use two interrupt_handler attributes and expect the
|
||||
same error. */
|
||||
#ifdef __mfido___
|
||||
#define IH interrupt_thread
|
||||
#else
|
||||
#define IH interrupt_handler
|
||||
#endif
|
||||
|
||||
extern void f1 (void) __attribute__((interrupt_handler, interrupt_handler)); /* { dg-error "error: multiple interrupt attributes not allowed" } */
|
||||
|
||||
extern void f2 (void) __attribute__((interrupt_handler, IH)); /* { dg-error "error: multiple interrupt attributes not allowed" } */
|
||||
|
||||
extern void f3 (void) __attribute__((IH, interrupt_handler)); /* { dg-error "error: multiple interrupt attributes not allowed" } */
|
||||
|
||||
extern void f4 (void) __attribute__((IH, IH)); /* { dg-error "error: multiple interrupt attributes not allowed" } */
|
7
gcc/testsuite/gcc.target/m68k/interrupt_thread-3.c
Normal file
7
gcc/testsuite/gcc.target/m68k/interrupt_thread-3.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-mcpu=cpu32" } */
|
||||
|
||||
/* Check that interrupt_thread is rejected on CPUs other than
|
||||
fido. */
|
||||
|
||||
extern void foo (void) __attribute__((interrupt_thread)); /* { dg-error "error: interrupt_thread is available only on fido" } */
|
Loading…
Add table
Reference in a new issue