patches/glibc/ports-2.10.1/540-alpha-fix-memchr.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 2009-07-27  Aurelien Jarno  <aurelien@aurel32.net>
     2 
     3 	* sysdeps/alpha/memchr.S: Use prefetch load.
     4 	* sysdeps/alpha/alphaev6/memchr.S: Likewise.
     5 
     6 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/alpha/alphaev6/memchr.S glibc-2.10.1/glibc-ports-2.10.1/sysdeps/alpha/alphaev6/memchr.S
     7 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/alpha/alphaev6/memchr.S	2009-05-16 10:36:20.000000000 +0200
     8 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/alpha/alphaev6/memchr.S	2009-11-13 00:51:15.000000000 +0100
     9 @@ -127,7 +127,7 @@
    10          cmpbge  $31, $1, $2	# E :
    11          bne     $2, $found_it	# U :
    12  	# At least one byte left to process.
    13 -	ldq	$1, 8($0)	# L :
    14 +	ldq	$31, 8($0)	# L :
    15  	subq	$5, 1, $18	# E : U L U L
    16  
    17  	addq	$0, 8, $0	# E :
    18 @@ -143,38 +143,38 @@
    19  	and	$4, 8, $4	# E : odd number of quads?
    20  	bne	$4, $odd_quad_count # U :
    21  	# At least three quads remain to be accessed
    22 -	mov	$1, $4		# E : L U L U : move prefetched value to correct reg
    23 +	nop			# E : L U L U : move prefetched value to correct reg
    24  
    25  	.align	4
    26  $unrolled_loop:
    27 -	ldq	$1, 8($0)	# L : prefetch $1
    28 -	xor	$17, $4, $2	# E :
    29 -	cmpbge	$31, $2, $2	# E :
    30 -	bne	$2, $found_it	# U : U L U L
    31 +	ldq	$1, 0($0)	# L : load quad
    32 +	xor	$17, $1, $2	# E :
    33 +	ldq	$31, 8($0)	# L : prefetch next quad
    34 +	cmpbge	$31, $2, $2	# E : U L U L
    35  
    36 +	bne	$2, $found_it	# U :
    37  	addq	$0, 8, $0	# E :
    38  	nop			# E :
    39  	nop			# E :
    40 -	nop			# E :
    41  
    42  $odd_quad_count:
    43 +	ldq	$1, 0($0)	# L : load quad
    44  	xor	$17, $1, $2	# E :
    45 -	ldq	$4, 8($0)	# L : prefetch $4
    46 +	ldq	$31, 8($0)	# L : prefetch $4
    47  	cmpbge	$31, $2, $2	# E :
    48 -	addq	$0, 8, $6	# E :
    49  
    50 +	addq	$0, 8, $6	# E :
    51  	bne	$2, $found_it	# U :
    52  	cmpult	$6, $18, $6	# E :
    53  	addq	$0, 8, $0	# E :
    54 -	nop			# E :
    55  
    56  	bne	$6, $unrolled_loop # U :
    57 -	mov	$4, $1		# E : move prefetched value into $1
    58  	nop			# E :
    59  	nop			# E :
    60 -
    61 -$final:	subq	$5, $0, $18	# E : $18 <- number of bytes left to do
    62  	nop			# E :
    63 +
    64 +$final:	ldq	$1, 0($0)	# L : load last quad
    65 +	subq	$5, $0, $18	# E : $18 <- number of bytes left to do
    66  	nop			# E :
    67  	bne	$18, $last_quad	# U :
    68  
    69 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/alpha/memchr.S glibc-2.10.1/glibc-ports-2.10.1/sysdeps/alpha/memchr.S
    70 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/alpha/memchr.S	2009-05-16 10:36:20.000000000 +0200
    71 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/alpha/memchr.S	2009-11-13 00:51:15.000000000 +0100
    72 @@ -119,7 +119,7 @@
    73  
    74  	# At least one byte left to process.
    75  
    76 -	ldq	t0, 8(v0)	# e0	:
    77 +	ldq	zero, 8(v0)	# e0	: prefetch next quad
    78  	subq	t4, 1, a2	# .. e1 :
    79  	addq	v0, 8, v0	#-e0	:
    80  
    81 @@ -138,19 +138,19 @@
    82  
    83  	# At least three quads remain to be accessed
    84  
    85 -	mov	t0, t3		# e0	: move prefetched value to correct reg
    86 -
    87  	.align	4
    88  $unrolled_loop:
    89 -	ldq	t0, 8(v0)	#-e0	: prefetch t0
    90 -	xor	a1, t3, t1	# .. e1 :
    91 -	cmpbge	zero, t1, t1	# e0	:
    92 -	bne	t1, $found_it	# .. e1 :
    93 +	ldq	t0, 0(v0)	# e0	: load quad
    94 +	xor	a1, t0, t1	# .. e1 :
    95 +	ldq	zero, 8(v0)	# e0	: prefetch next quad
    96 +	cmpbge	zero, t1, t1	# .. e1:
    97 +	bne	t1, $found_it	# e0    :
    98  
    99 -	addq	v0, 8, v0	#-e0	:
   100 +	addq	v0, 8, v0	#    e1	:
   101  $odd_quad_count:
   102 +	ldq	t0, 0(v0)	# e0	: load quad
   103  	xor	a1, t0, t1	# .. e1 :
   104 -	ldq	t3, 8(v0)	# e0	: prefetch t3
   105 +	ldq	zero, 8(v0)	# e0	: prefetch next quad
   106  	cmpbge	zero, t1, t1	# .. e1 :
   107  	addq	v0, 8, t5	#-e0	:
   108  	bne	t1, $found_it	# .. e1	:
   109 @@ -159,8 +159,8 @@
   110  	addq	v0, 8, v0	# .. e1 :
   111  	bne	t5, $unrolled_loop #-e1 :
   112  
   113 -	mov	t3, t0		# e0	: move prefetched value into t0
   114 -$final:	subq	t4, v0, a2	# .. e1	: a2 <- number of bytes left to do
   115 +$final:	ldq	t0, 0(v0)	# e0	: load last quad
   116 +	subq	t4, v0, a2	# .. e1	: a2 <- number of bytes left to do
   117  	bne	a2, $last_quad	# e1	:
   118  
   119  $not_found:
   120 diff -durN glibc-2.10.1.orig/ports/sysdeps/alpha/alphaev6/memchr.S glibc-2.10.1/ports/sysdeps/alpha/alphaev6/memchr.S
   121 diff -durN glibc-2.10.1.orig/ports/sysdeps/alpha/memchr.S glibc-2.10.1/ports/sysdeps/alpha/memchr.S