* sysdeps/arm/strlen.S [__ARMEB__]: Compute correctly for big-endian.
authorRoland McGrath <roland@gnu.org>
Fri, 11 Jun 2004 10:15:39 +0000 (10:15 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 11 Jun 2004 10:15:39 +0000 (10:15 +0000)
From Krzysztof Halasa <khc@pm.waw.pl>.

ChangeLog
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
sysdeps/arm/strlen.S

index c8b8c92..674a172 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-06-11  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/arm/strlen.S [__ARMEB__]: Compute correctly for big-endian.
+       From Krzysztof Halasa <khc@pm.waw.pl>.
+
 2004-06-10  Jakub Jelinek  <jakub@redhat.com>
 
        * elf/tls-macros.h [__s390x__] (TLS_LD, TLS_GD): Clobber also r14.
index 1f5c3f6..01de11f 100644 (file)
@@ -1,3 +1,10 @@
+2004-06-11  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+       * sysdeps/unix/sysv/linux/s390/lowlevellock.h (lll_compare_and_swap):
+       Add memory clobber to inline assembly.
+       (__lll_mutex_trylock): Likewise.
+       (__lll_mutex_cond_trylock): Likewise.
+
 2004-06-07  Martin Schwidefsky  <schwidefsky@de.ibm.com>
 
        * sysdeps/unix/sysv/linux/s390/lowlevellock.h (lll_futex_requeue):
index 9549cff..34f8b09 100644 (file)
                      "   jl  0b\n"                                           \
                      "1:"                                                    \
                      : "=Q" (*__futex), "=&d" (oldval), "=&d" (newval)       \
-                     : "m" (*__futex) : "cc" );                              \
+                     : "m" (*__futex) : "cc", "memory" );                    \
   } while (0)
 
 
@@ -124,7 +124,7 @@ __lll_mutex_trylock (int *futex)
 
     __asm __volatile ("cs %0,%3,%1"
                       : "=d" (old), "=Q" (*futex)
-                      : "0" (0), "d" (1), "m" (*futex) : "cc" );
+                      : "0" (0), "d" (1), "m" (*futex) : "cc", "memory" );
     return old != 0;
 }
 #define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex))
@@ -138,7 +138,7 @@ __lll_mutex_cond_trylock (int *futex)
 
     __asm __volatile ("cs %0,%3,%1"
                       : "=d" (old), "=Q" (*futex)
-                      : "0" (0), "d" (2), "m" (*futex) : "cc" );
+                      : "0" (0), "d" (2), "m" (*futex) : "cc", "memory" );
     return old != 0;
 }
 #define lll_mutex_cond_trylock(futex) __lll_mutex_cond_trylock (&(futex))
index f29528a..a83c41d 100644 (file)
@@ -53,12 +53,21 @@ Laligned:                           @ here, we have a word in r2.  Does it
        ldrne   r2, [r1], $4            @ and we continue to the next word
        bne     Laligned                @
 Llastword:                             @ drop through to here once we find a
+#ifdef __ARMEB__
+       tst     r2, $0xff000000         @ word that has a zero byte in it
+       addne   r0, r0, $1              @
+       tstne   r2, $0x00ff0000         @ and add up to 3 bytes on to it
+       addne   r0, r0, $1              @
+       tstne   r2, $0x0000ff00         @ (if first three all non-zero, 4th
+       addne   r0, r0, $1              @  must be zero)
+#else
        tst     r2, $0x000000ff         @ word that has a zero byte in it
        addne   r0, r0, $1              @
        tstne   r2, $0x0000ff00         @ and add up to 3 bytes on to it
        addne   r0, r0, $1              @
        tstne   r2, $0x00ff0000         @ (if first three all non-zero, 4th
        addne   r0, r0, $1              @  must be zero)
+#endif
        RETINSTR(mov,pc,lr)
 END(strlen)
 libc_hidden_builtin_def (strlen)