1/* PR inline-asm/39543 */
2/* { dg-do compile } */
3/* { dg-options "-O3" } */
4/* { dg-skip-if "" { ilp32 && { ! nonpic } } { "*" } { "" } } */
5
6float __attribute__ ((aligned (16))) s0[128];
7const float s1 = 0.707;
8float s2[8] __attribute__ ((aligned (16)));
9float s3[8] __attribute__ ((aligned (16)));
10float s4[16] __attribute__ ((aligned (16)));
11float s5[16] __attribute__ ((aligned (16)));
12
13void
14foo (int k, float *x, float *y, const float *d, const float *z)
15{
16  float *a, *b, *c, *e;
17
18  a = x + 2 * k;
19  b = a + 2 * k;
20  c = b + 2 * k;
21  e = y + 2 * k;
22  __asm__ volatile (""
23		    : "=m" (x[0]), "=m" (b[0]), "=m" (a[0]), "=m" (c[0])
24		    : "m" (y[0]), "m" (y[k * 2]), "m" (x[0]), "m" (a[0])
25		    : "memory");
26  for (;;)
27    {
28      __asm__ volatile (""
29			:
30			: "m" (y[2]), "m" (d[2]), "m" (e[2]), "m" (z[2])
31			: "memory");
32      if (!--k)
33	break;
34    }
35  __asm__ volatile (""
36		    : "=m" (x[2]), "=m" (x[10]), "=m" (x[6]), "=m" (x[14])
37		    : "m" (y[2]), "m" (y[6]), "m" (x[2]), "m" (x[6]), "m" (s1)
38		    : "memory");
39}
40
41void
42bar (float *a)
43{
44  foo (4, a, a + 16, s2, s3);
45  foo (8, a, a + 32, s4, s5);
46}
47
48void
49baz (void)
50{
51  bar (s0);
52}
53