[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r3519 - glibc-package/branches/eglibc-2.10/debian/patches/ia64



Author: aurel32
Date: 2009-05-21 21:37:06 +0000 (Thu, 21 May 2009)
New Revision: 3519

Added:
   glibc-package/branches/eglibc-2.10/debian/patches/ia64/submitted-memchr.diff
Log:
  * Add debian/patches/ia64/submitted-memchr.diff to fix memchr() when 
    crossing page boundaries on ia64.



Added: glibc-package/branches/eglibc-2.10/debian/patches/ia64/submitted-memchr.diff
===================================================================
--- glibc-package/branches/eglibc-2.10/debian/patches/ia64/submitted-memchr.diff	                        (rev 0)
+++ glibc-package/branches/eglibc-2.10/debian/patches/ia64/submitted-memchr.diff	2009-05-21 21:37:06 UTC (rev 3519)
@@ -0,0 +1,38 @@
+2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR libc/10162
+	* sysdeps/ia64/memchr.S: Use speculative load.
+
+--- a/sysdeps/ia64/memchr.S
++++ b/sysdeps/ia64/memchr.S
+@@ -96,7 +96,8 @@ ENTRY(__memchr)
+ 	mov	pr.rot = 1 << 16 ;;
+ .l2:
+ (p[0])		mov	addr[0] = ret0
+-(p[0])		ld8	value[0] = [ret0], 8
++(p[0])		ld8.s	value[0] = [ret0], 8	 // speculative load
++(p[MEMLAT])	chk.s	value[MEMLAT], .recovery // check and recovery
+ (p[MEMLAT])	xor	aux[0] = value[MEMLAT], chrx8
+ (p[MEMLAT+1])	czx1.r	poschr[0] = aux[1]
+ (p[MEMLAT+2])	cmp.ne	p7, p0 = 8, poschr[1]
+@@ -124,6 +125,20 @@ ENTRY(__memchr)
+ 	mov	ar.lc = saved_lc
+ 	br.ret.sptk.many b0
+ 
++.recovery:
++	adds	ret0 = -((MEMLAT + 1) * 8), ret0;;
++(p[MEMLAT+1])	add	ret0 = -8, ret0;;
++(p[MEMLAT+2])	add	ret0 = -8, ret0;;
++.l4:
++	mov     addr[MEMLAT+2] = ret0
++	ld8	tmp = [ret0];;		// load the first unchecked 8byte
++	xor	aux[1] = tmp, chrx8;;
++	czx1.r	poschr[1] = aux[1];;
++	cmp.ne	p7, p0 = 8, poschr[1]
++(p7)	br.cond.spnt	.foundit;;
++	adds	ret0 = 8, ret0		// load the next unchecked 8byte
++	br.sptk	.l4;;
++
+ END(__memchr)
+ 
+ weak_alias (__memchr, memchr)


Reply to: