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] |