| /* Test for complex asm statements. Make sure it compiles |
| then test for some of the asm statements not being translated. */ |
| /* { dg-do compile { target i?86-*-* x86_64-*-* } } |
| { dg-require-iconv "IBM1047" } |
| { dg-final { scan-assembler "std" } } |
| { dg-final { scan-assembler "cld" } } |
| { dg-final { scan-assembler "rep" } } |
| { dg-final { scan-assembler "movsb" } } */ |
| #define size_t int |
| void * |
| memmove (void *__dest, __const void *__src, size_t __n) |
| { |
| #if __cplusplus <= 201402L |
| register |
| #endif |
| unsigned long int __d0, __d1, __d2; |
| if (__dest < __src) |
| __asm__ __volatile__ |
| ("cld\n\t" |
| "rep\n\t" |
| "movsb" |
| : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) |
| : "0" (__n), "1" (__src), "2" (__dest) |
| : "memory"); |
| else |
| __asm__ __volatile__ |
| ("std\n\t" |
| "rep\n\t" |
| "movsb\n\t" |
| "cld" |
| : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) |
| : "0" (__n), "1" (__n - 1 + (const char *) __src), |
| "2" (__n - 1 + (char *) __dest) |
| : "memory"); |
| return __dest; |
| } |