1/* { dg-do compile } */ 2/* { dg-require-effective-target ilp32 } */ 3/* { dg-options "-O2 -march=k6" } */ 4 5static inline void * 6baz (void *s, unsigned long c, unsigned int count) 7{ 8 int d0, d1; 9 __asm__ __volatile__ ("" 10 : "=&c" (d0), "=&D" (d1) 11 :"a" (c), "q" (count), "0" (count / 4), "1" ((long) s) 12 :"memory"); 13 return s; 14} 15 16struct A 17{ 18 unsigned long *a; 19}; 20 21inline static void * 22bar (struct A *x, int y) 23{ 24 char *ptr; 25 26 ptr = (void *) x->a[y >> 12]; 27 ptr += y % (1UL << 12); 28 return (void *) ptr; 29} 30 31int 32foo (struct A *x, unsigned int *y, int z, int u) 33{ 34 int a, b, c, d, e; 35 36 z += *y; 37 c = z + u; 38 a = (z >> 12) + 1; 39 do 40 { 41 b = (a << 12); 42 d = b - z; 43 e = c - z; 44 if (e < d) 45 d = e; 46 baz (bar (x, z), 0, d); 47 z = b; 48 a++; 49 } 50 while (z < c); 51 return 0; 52} 53