r3998 - glibc-package/trunk/debian/patches/ia64
Author: aurel32
Date: 2009-11-20 23:06:30 +0000 (Fri, 20 Nov 2009)
New Revision: 3998
Modified:
glibc-package/trunk/debian/patches/ia64/cvs-memchr.diff
Log:
Update from upstream
Modified: glibc-package/trunk/debian/patches/ia64/cvs-memchr.diff
===================================================================
--- glibc-package/trunk/debian/patches/ia64/cvs-memchr.diff 2009-11-20 19:04:51 UTC (rev 3997)
+++ glibc-package/trunk/debian/patches/ia64/cvs-memchr.diff 2009-11-20 23:06:30 UTC (rev 3998)
@@ -1,3 +1,9 @@
+2009-11-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #10162]
+ * sysdeps/ia64/memchr.S: Don't use a simple loop on data shorter
+ than software pipeline. Properly recover from shorter read.
+
2009-11-09 H.J. Lu <hongjiu.lu@intel.com>
[BZ #10162]
@@ -3,17 +9,25 @@
* sysdeps/ia64/memchr.S: Use a simple loop on data shorter than
software pipeline.
-
+
diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S
-index cd062b2..e721e17 100644
+index cd062b2..cdd71ca 100644
--- a/sysdeps/ia64/memchr.S
+++ b/sysdeps/ia64/memchr.S
-@@ -71,7 +71,8 @@ ENTRY(__memchr)
- cmp.ne p7, p0 = r0, r0 // clear p7
- extr.u chr = in1, 0, 8 // chr = (unsigned char) in1
- mov len = in2
-- cmp.gtu p6, p0 = 16, in2 // use a simple loop for short
-+ // use a simple loop on data shorter than software pipeline
-+ cmp.gtu p6, p0 = ((MEMLAT + 1) * 8), in2
- (p6) br.cond.spnt .srchfew ;; // searches
- sub loopcnt = 8, tmp // loopcnt = 8 - tmp
- cmp.eq p6, p0 = tmp, r0
+@@ -126,7 +126,16 @@ ENTRY(__memchr)
+ br.ret.sptk.many b0
+
+ .recovery:
+- adds ret0 = -((MEMLAT + 1) * 8), ret0;;
++#if MEMLAT != 6
++# error "MEMLAT must be 6!"
++#endif
++(p[MEMLAT-6]) add ret0 = -8, ret0;;
++(p[MEMLAT-5]) add ret0 = -8, ret0;;
++(p[MEMLAT-4]) add ret0 = -8, ret0;;
++(p[MEMLAT-3]) add ret0 = -8, ret0;;
++(p[MEMLAT-2]) add ret0 = -8, ret0;;
++(p[MEMLAT-1]) add ret0 = -8, ret0;;
++(p[MEMLAT]) add ret0 = -8, ret0;;
+ (p[MEMLAT+1]) add ret0 = -8, ret0;;
+ (p[MEMLAT+2]) add ret0 = -8, ret0;;
+ .l4:
Reply to: