1/* { dg-do run } */ 2/* { dg-options "-O2" } */ 3 4void *x (void *pdst, const void *psrc, unsigned int pn) 5{ 6 register void *return_dst = pdst; 7 register unsigned char *dst = pdst; 8 register unsigned const char *src = psrc; 9 register int n __asm__ ("ebx") = pn; 10 11 if (src < dst && dst < src + n) 12 { 13 src += n; 14 dst += n; 15 while (n--) 16 *--dst = *--src; 17 return return_dst; 18 } 19 20 while (n >= 16) n--; 21 22 return return_dst; 23} 24extern void abort (); 25extern void exit (int); 26char xx[30] = "abc"; 27int main (void) 28{ 29 char yy[30] = "aab"; 30 31 if (x (xx + 1, xx, 2) != xx + 1 || memcmp (xx, yy, sizeof (yy)) != 0) 32 abort (); 33 exit (0); 34} 35