about summary refs log tree commit diff
path: root/sysdeps/ia64
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-07 09:03:23 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-07 09:03:23 +0000
commit739ca6906afb26bcf3c01cdf47e8cca0bbeca635 (patch)
tree745d311ad7f15fd7ffe1496f9d5d417d6e4c69d0 /sysdeps/ia64
parent4614167ae7b81851d332316d09bd418a062b1278 (diff)
downloadglibc-739ca6906afb26bcf3c01cdf47e8cca0bbeca635.tar.gz
glibc-739ca6906afb26bcf3c01cdf47e8cca0bbeca635.tar.xz
glibc-739ca6906afb26bcf3c01cdf47e8cca0bbeca635.zip
Update.
2002-12-07  Kenneth W. Chen <kenneth.w.chen@intel.com>.

	* sysdeps/ia64/strncpy.S (strncpy): Clear ar.ec.  Fix .recovery4.

2002-12-07  Jakub Jelinek  <jakub@redhat.com>

	* string/test-strncpy.c (do_random_tests): Improve test coverage.
Diffstat (limited to 'sysdeps/ia64')
-rw-r--r--sysdeps/ia64/strncpy.S6
1 files changed, 5 insertions, 1 deletions
diff --git a/sysdeps/ia64/strncpy.S b/sysdeps/ia64/strncpy.S
index a285f90bfc..4fe686165b 100644
--- a/sysdeps/ia64/strncpy.S
+++ b/sysdeps/ia64/strncpy.S
@@ -63,6 +63,8 @@ ENTRY(strncpy)
 	mov	saved_pr = pr           // save the predicate registers
 	.save ar.lc, saved_lc
 	mov 	saved_lc = ar.lc	// save the loop counter
+	mov	ar.ec = 0		// ec is not guaranteed to
+					// be zero upon function entry
 	.body
 	cmp.geu p6, p5 = 24, in2
 (p6)	br.cond.spnt .short_len
@@ -221,7 +223,9 @@ ENTRY(strncpy)
 	ld8	r[MEMLAT] = [tmp]
 	br.cond.sptk .back3
 .recovery4:
+	cmp.eq	p5, p6 = len, r0
 	add	tmp = -MEMLAT * 8, src ;;
-	ld8	r[MEMLAT - 1] = [tmp]
+(p6)	ld8	r[MEMLAT - 1] = [tmp]
+(p5)	mov	r[MEMLAT - 1] = r0
 	br.cond.sptk .back4
 END(strncpy)