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