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