Author: aurel32
Date: 2009-07-27 09:19:53 +0000 (Mon, 27 Jul 2009)
New Revision: 3704

Added:
   glibc-package/trunk/debian/patches/alpha/submitted-asm-memchr.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
  * alpha/submitted-asm-memchr.diff: new patch to fix broken prefetching
    in memchr() on alpha.  Closes: #521737.



Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog        2009-07-26 23:33:24 UTC (rev 
3703)
+++ glibc-package/trunk/debian/changelog        2009-07-27 09:19:53 UTC (rev 
3704)
@@ -19,8 +19,10 @@
     a memory ordering problem in pthread_mutex_{,timed}lock.
   * Replace any/submitted-signalfd-eventfd.diff by upstream version
     any/cvs-signalfd-eventfd.diff.
+  * alpha/submitted-asm-memchr.diff: new patch to fix broken prefetching
+    in memchr() on alpha.  Closes: #521737.
 
- -- Aurelien Jarno <aure...@debian.org>  Mon, 27 Jul 2009 00:01:57 +0200
+ -- Aurelien Jarno <aure...@debian.org>  Mon, 27 Jul 2009 11:18:42 +0200
 
 eglibc (2.9-22) unstable; urgency=low
 

Added: glibc-package/trunk/debian/patches/alpha/submitted-asm-memchr.diff
===================================================================
--- glibc-package/trunk/debian/patches/alpha/submitted-asm-memchr.diff          
                (rev 0)
+++ glibc-package/trunk/debian/patches/alpha/submitted-asm-memchr.diff  
2009-07-27 09:19:53 UTC (rev 3704)
@@ -0,0 +1,117 @@
+2009-07-27  Aurelien Jarno  <aurel...@aurel32.net>
+
+        * sysdeps/alpha/memchr.S: Use prefetch load.
+        * sysdeps/alpha/alphaev6/memchr.S: Likewise.
+
+--- a/sysdeps/alpha/alphaev6/memchr.S
++++ b/sysdeps/alpha/alphaev6/memchr.S
+@@ -127,7 +127,7 @@ $first_quad:
+         cmpbge  $31, $1, $2   # E :
+         bne     $2, $found_it # U :
+       # At least one byte left to process.
+-      ldq     $1, 8($0)       # L :
++      ldq     $31, 8($0)      # L :
+       subq    $5, 1, $18      # E : U L U L
+ 
+       addq    $0, 8, $0       # E :
+@@ -143,38 +143,38 @@ $first_quad:
+       and     $4, 8, $4       # E : odd number of quads?
+       bne     $4, $odd_quad_count # U :
+       # At least three quads remain to be accessed
+-      mov     $1, $4          # E : L U L U : move prefetched value to 
correct reg
++      nop                     # E : L U L U : move prefetched value to 
correct reg
+ 
+       .align  4
+ $unrolled_loop:
+-      ldq     $1, 8($0)       # L : prefetch $1
+-      xor     $17, $4, $2     # E :
+-      cmpbge  $31, $2, $2     # E :
+-      bne     $2, $found_it   # U : U L U L
++      ldq     $1, 0($0)       # L : load quad
++      xor     $17, $1, $2     # E :
++      ldq     $31, 8($0)      # L : prefetch next quad
++      cmpbge  $31, $2, $2     # E : U L U L
+ 
++      bne     $2, $found_it   # U :
+       addq    $0, 8, $0       # E :
+       nop                     # E :
+       nop                     # E :
+-      nop                     # E :
+ 
+ $odd_quad_count:
++      ldq     $1, 0($0)       # L : load quad
+       xor     $17, $1, $2     # E :
+-      ldq     $4, 8($0)       # L : prefetch $4
++      ldq     $31, 8($0)      # L : prefetch $4
+       cmpbge  $31, $2, $2     # E :
+-      addq    $0, 8, $6       # E :
+ 
++      addq    $0, 8, $6       # E :
+       bne     $2, $found_it   # U :
+       cmpult  $6, $18, $6     # E :
+       addq    $0, 8, $0       # E :
+-      nop                     # E :
+ 
+       bne     $6, $unrolled_loop # U :
+-      mov     $4, $1          # E : move prefetched value into $1
+       nop                     # E :
+       nop                     # E :
+-
+-$final:       subq    $5, $0, $18     # E : $18 <- number of bytes left to do
+       nop                     # E :
++
++$final:       ldq     $1, 0($0)       # L : load last quad
++      subq    $5, $0, $18     # E : $18 <- number of bytes left to do
+       nop                     # E :
+       bne     $18, $last_quad # U :
+ 
+--- a/sysdeps/alpha/memchr.S
++++ b/sysdeps/alpha/memchr.S
+@@ -119,7 +119,7 @@ $first_quad:
+ 
+       # At least one byte left to process.
+ 
+-      ldq     t0, 8(v0)       # e0    :
++      ldq     zero, 8(v0)     # e0    : prefetch next quad
+       subq    t4, 1, a2       # .. e1 :
+       addq    v0, 8, v0       #-e0    :
+ 
+@@ -138,19 +138,19 @@ $first_quad:
+ 
+       # At least three quads remain to be accessed
+ 
+-      mov     t0, t3          # e0    : move prefetched value to correct reg
+-
+       .align  4
+ $unrolled_loop:
+-      ldq     t0, 8(v0)       #-e0    : prefetch t0
+-      xor     a1, t3, t1      # .. e1 :
+-      cmpbge  zero, t1, t1    # e0    :
+-      bne     t1, $found_it   # .. e1 :
++      ldq     t0, 0(v0)       # e0    : load quad
++      xor     a1, t0, t1      # .. e1 :
++      ldq     zero, 8(v0)     # e0    : prefetch next quad
++      cmpbge  zero, t1, t1    # .. e1:
++      bne     t1, $found_it   # e0    :
+ 
+-      addq    v0, 8, v0       #-e0    :
++      addq    v0, 8, v0       #    e1 :
+ $odd_quad_count:
++      ldq     t0, 0(v0)       # e0    : load quad
+       xor     a1, t0, t1      # .. e1 :
+-      ldq     t3, 8(v0)       # e0    : prefetch t3
++      ldq     zero, 8(v0)     # e0    : prefetch next quad
+       cmpbge  zero, t1, t1    # .. e1 :
+       addq    v0, 8, t5       #-e0    :
+       bne     t1, $found_it   # .. e1 :
+@@ -159,8 +159,8 @@ $odd_quad_count:
+       addq    v0, 8, v0       # .. e1 :
+       bne     t5, $unrolled_loop #-e1 :
+ 
+-      mov     t3, t0          # e0    : move prefetched value into t0
+-$final:       subq    t4, v0, a2      # .. e1 : a2 <- number of bytes left to 
do
++$final:       ldq     t0, 0(v0)       # e0    : load last quad
++      subq    t4, v0, a2      # .. e1 : a2 <- number of bytes left to do
+       bne     a2, $last_quad  # e1    :
+ 
+ $not_found:

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series   2009-07-26 23:33:24 UTC (rev 
3703)
+++ glibc-package/trunk/debian/patches/series   2009-07-27 09:19:53 UTC (rev 
3704)
@@ -52,6 +52,7 @@
 alpha/submitted-fpu-round.diff
 alpha/submitted-PTR_MANGLE.diff
 alpha/submitted-procfs_h.diff
+alpha/submitted-asm-memchr.diff
 
 amd64/local-biarch.diff
 amd64/local-clone.diff


-- 
To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to