patches/glibc/ports-2.10.1/540-alpha-fix-memchr.patch
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
permissions -rw-r--r--
arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
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