This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Richard Henderson <rth@redhat.com> writes:
> On Tue, Mar 12, 2002 at 08:38:51PM +0100, Andreas Jaeger wrote:
>> As Richard Henderson mentioned on the gcc list (see:
>> http://gcc.gnu.org/ml/gcc-patches/2002-03/msg00534.html), we need to
>> add a memory clobber even for reading memory.
>
> Err, no, I said you should describe the read from memory.
> For memcmp you have the length of the access; for the others
> you can just use an array size of 0xffffffff or something.
A length of 0xffffffff does not work, it gives:
str.c:56: size of array `__x' is too large
I used one f less.
But the following two examples compile. Are these ok?
void *
memcpy_g (void *__dest, __const void *__src, size_t __n)
{
register unsigned long int __d0, __d1, __d2;
register void *__tmp = __dest;
__asm__ __volatile__
("cld\n\t"
"shrl $1,%%ecx\n\t"
"jnc 1f\n\t"
"movsb\n"
"1:\n\t"
"shrl $1,%%ecx\n\t"
"jnc 2f\n\t"
"movsw\n"
"2:\n\t"
"rep; movsl"
: "=&c" (__d0), "=&D" (__d1), "=&S" (__d2),
"=m" ( *(struct { char __x[__n]; } *)__dest)
: "0" (__n), "1" (__tmp), "2" (__src),
"m" ( *(struct { char __x[__n]; } *)__src)
: "cc");
return __dest;
}
char *
__strpbrk_g (__const char *__s, __const char *__accept)
{
register unsigned long int __d0, __d1, __d2, __d3;
register char *__res;
__asm__ __volatile__
("movl %%ebx,%%edi\n\t"
"cld\n\t"
"repne; scasb\n\t"
"notl %%ecx\n\t"
"leal -1(%%ecx),%%edx\n"
"1:\n\t"
"lodsb\n\t"
"testb %%al,%%al\n\t"
"je 2f\n\t"
"movl %%ebx,%%edi\n\t"
"movl %%edx,%%ecx\n\t"
"repne; scasb\n\t"
"jne 1b\n\t"
"decl %0\n\t"
"jmp 3f\n"
"2:\n\t"
"xorl %0,%0\n"
"3:"
: "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3)
: "0" (__s), "1" (0), "2" (0xffffffff), "b" (__accept),
"m" ( *(struct { char __x[0xfffffff]; } *)__s),
"m" ( *(struct { char __x[0xfffffff]; } *)__accept)
: "cc");
return __res;
}
Andreas
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |