462 lines
12 KiB
C
462 lines
12 KiB
C
/* PR target/41175 */
|
|
/* { dg-do run } */
|
|
/* { dg-options "-Os" } */
|
|
|
|
#define X2(n) X1(n##0) X1(n##1)
|
|
#define X4(n) X2(n##0) X2(n##1)
|
|
#define X8(n) X4(n##0) X4(n##1)
|
|
|
|
#ifndef __SPE__
|
|
#define FLOAT_REG_CONSTRAINT "f"
|
|
#else
|
|
#define FLOAT_REG_CONSTRAINT "r"
|
|
#endif
|
|
|
|
volatile int ll;
|
|
|
|
__attribute__((noinline)) void
|
|
foo (void)
|
|
{
|
|
asm volatile ("" : : : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
bar (char *p)
|
|
{
|
|
asm volatile ("" : : "r" (p) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f1 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
foo ();
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f2 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
char *pp = __builtin_alloca (ll);
|
|
bar (pp);
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f3 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
}
|
|
|
|
#ifndef __NO_FPRS__
|
|
__attribute__((noinline)) void
|
|
f4 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X4(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
|
|
foo ();
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X4(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f5 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X4(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
|
|
char *pp = __builtin_alloca (ll);
|
|
bar (pp);
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X4(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f6 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X4(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X4(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f7 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X2(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
|
|
foo ();
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X2(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f8 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X2(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
|
|
char *pp = __builtin_alloca (ll);
|
|
bar (pp);
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X2(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f9 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X8(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X2(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X2(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f10 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X4(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X1(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
|
|
foo ();
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X4(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X1(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f11 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X4(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X1(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
|
|
char *pp = __builtin_alloca (ll);
|
|
bar (pp);
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X4(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X1(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f12 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X4(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X1(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X4(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X1(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f13 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X2(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X8(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
|
|
foo ();
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X2(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X8(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f14 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X2(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X8(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
|
|
char *pp = __builtin_alloca (ll);
|
|
bar (pp);
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X2(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X8(d) "m" (mem) : "memory");
|
|
}
|
|
|
|
__attribute__((noinline)) void
|
|
f15 (void)
|
|
{
|
|
int mem;
|
|
#undef X1
|
|
#define X1(n) int gpr##n = 0;
|
|
X8(a) X8(b) X2(c)
|
|
#undef X1
|
|
#define X1(n) double fpr##n = 0.0;
|
|
X8(d)
|
|
#undef X1
|
|
#define X1(n) "+r" (gpr##n),
|
|
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
|
|
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
|
|
#undef X1
|
|
#define X1(n) "r" (gpr##n),
|
|
asm volatile ("" : : X8(a) "m" (mem) : "memory");
|
|
asm volatile ("" : : X8(b) "m" (mem) : "memory");
|
|
asm volatile ("" : : X2(c) "m" (mem) : "memory");
|
|
#undef X1
|
|
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
|
|
asm volatile ("" : : X8(d) "m" (mem) : "memory");
|
|
}
|
|
#endif
|
|
|
|
int
|
|
main ()
|
|
{
|
|
ll = 60;
|
|
f1 ();
|
|
f2 ();
|
|
f3 ();
|
|
#ifndef __NO_FPRS__
|
|
f4 ();
|
|
f5 ();
|
|
f6 ();
|
|
f7 ();
|
|
f8 ();
|
|
f9 ();
|
|
f10 ();
|
|
f11 ();
|
|
f12 ();
|
|
f13 ();
|
|
f14 ();
|
|
f15 ();
|
|
#endif
|
|
return 0;
|
|
}
|