patches/glibc/ports-2.10.1/540-alpha-fix-memchr.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Dec 30 15:36:22 2009 +0100 (2009-12-30)
changeset 1669 61edd9d19e3c
permissions -rw-r--r--
scripts/functions: add aria2, a powerfull downloader

aria2 is a powerfull downloader that is capable of chunking and
parallel retrieval.

Due to li;itations in crosstool-NG retrieval facilities, it's not possible
to take fully advantage of aria2. It might happen that, in the future,
those limitations get lifted away, so we can take use features such as
parallel downloading from more than one server at the same time. For now,
it should still speed up downloads thanks to parallel downloading of chunks.
     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