about summary refs log tree commit diff
path: root/sysdeps/alpha/alphaev67
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-12-27 23:38:53 +0000
committerUlrich Drepper <drepper@redhat.com>2000-12-27 23:38:53 +0000
commitbb548f63d59de945c244c11e9e5668c3916b477a (patch)
tree7c598fe2079e0f5c4d60d2208a0c841364782c4f /sysdeps/alpha/alphaev67
parent5fba3e5e3c6fd862a7159059898812ecfcf4249d (diff)
downloadglibc-bb548f63d59de945c244c11e9e5668c3916b477a.tar.gz
glibc-bb548f63d59de945c244c11e9e5668c3916b477a.tar.xz
glibc-bb548f63d59de945c244c11e9e5668c3916b477a.zip
Update.
2000-12-27  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/alpha/alphaev6/memcpy.S: Don't go through unrolled loop
	if we would go through it only once.
	Patch by Rick Gorton <rick.gorton@api-networks.com>.

	* sysdeps/alpha/alphaev67/strncat.S: Fix handling of numeric parameter.
	Patch by Richard Henderson <rth@redhat.com>.

2000-12-27  Jakub Jelinek  <jakub@redhat.com>

	* malloc/malloc.c (memmove): Add prototypes.
	(MALLOC_MEMMOVE): Define.
	(chunk_realloc): Use it instead of MALLOC_COPY if source and
	destination might overlap.
Diffstat (limited to 'sysdeps/alpha/alphaev67')
-rw-r--r--sysdeps/alpha/alphaev67/strncat.S56
1 files changed, 22 insertions, 34 deletions
diff --git a/sysdeps/alpha/alphaev67/strncat.S b/sysdeps/alpha/alphaev67/strncat.S
index 4d199d95fe..31ca19d299 100644
--- a/sysdeps/alpha/alphaev67/strncat.S
+++ b/sysdeps/alpha/alphaev67/strncat.S
@@ -38,57 +38,45 @@ ENTRY(strncat)
 #endif
 	.prologue 1
 
-	mov	$16, $0		# set up return value
-	beq	$18, $zerocount	# U :
+	mov	a0, v0		# set up return value
+	beq	a2, $zerocount	# U :
 	/* Find the end of the string.  */
-	ldq_u   $1, 0($16)	# L : load first quadword ($16 may be misaligned)
-	lda     $2, -1($31)	# E :
+	ldq_u   t0, 0(a0)	# L : load first quadword (a0 may be misaligned)
+	lda     t1, -1		# E :
 
-	insqh   $2, $0, $2	# U :
-	andnot  $16, 7, $16	# E :
+	insqh   t1, v0, t1	# U :
+	andnot  a0, 7, a0	# E :
 	nop			# E :
-	or      $2, $1, $1	# E :
+	or      t1, t0, t0	# E :
 
 	nop			# E :
 	nop			# E :
-	cmpbge  $31, $1, $2	# E : bits set iff byte == 0
-	bne     $2, $found	# U :
+	cmpbge  zero, t0, t1	# E : bits set iff byte == 0
+	bne     t1, $found	# U :
 
-$loop:	ldq     $1, 8($16)	# L :
-	addq    $16, 8, $16	# E :
-	cmpbge  $31, $1, $2	# E :
-	beq     $2, $loop	# U :
+$loop:	ldq     t0, 8(a0)	# L :
+	addq    a0, 8, a0	# E :
+	cmpbge  zero, t0, t1	# E :
+	beq     t1, $loop	# U :
 
-$found:	cttz	$2, $3		# U0 :
-	addq	$16, $3, $16	# E :
-	jsr	$23, __stxncpy	# L0 :/* Now do the append.  */
+$found:	cttz	t1, t2		# U0 :
+	addq	a0, t2, a0	# E :
+	jsr	t9, __stxncpy	# L0 : Now do the append.
 
 	/* Worry about the null termination.  */
 
-	zapnot	$1, $27, $2	# U : was last byte a null?
-	cmplt	$27, $24, $5	# E : did we fill the buffer completely?
-	bne	$2, 0f		# U :
-	ret			# L0 :
-
-0:	or	$5, $18, $2	# E :
-	nop
-	bne	$2, 2f		# U :
-	and	$24, 0x80, $3	# E : no zero next byte
-
+	cttz	t10, t2		# U0: byte offset of end-of-count.
 	nop			# E :
-	bne	$3, 1f		# U :
-	/* Here there are bytes left in the current word.  Clear one.  */
-	addq	$24, $24, $24	# E : end-of-count bit <<= 1
+	zapnot	t0, t8, t1	# U : was last byte a null?
 	nop			# E :
 
-2:	zap	$1, $24, $1	# U :
+	bne	t1, 0f		# U :
+	nop			# E :
 	nop			# E :
-	stq_u	$1, 0($16)	# L :
 	ret			# L0 :
 
-1:	/* Here we must clear the first byte of the next DST word */
-	stb	$31, 8($16)	# L :
-	nop			# E :
+0:	addq	t2, a0, a0	# E : address of end-of-count
+	stb	zero, 1(a0)	# L :
 	nop			# E :
 	ret			# L0 :