about summary refs log tree commit diff
path: root/sysdeps/ia64/memccpy.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-11-19 06:12:51 +0000
committerUlrich Drepper <drepper@redhat.com>2003-11-19 06:12:51 +0000
commitc9002c1b7a648fe49b8472d6dc6724c78fa1329f (patch)
treeb9a61d0ea66ac08f3bc064d1ddd8823a3e65ebba /sysdeps/ia64/memccpy.S
parentad7f28c29d06ddb4506d0d75e089732740b5bd2b (diff)
downloadglibc-c9002c1b7a648fe49b8472d6dc6724c78fa1329f.tar.gz
glibc-c9002c1b7a648fe49b8472d6dc6724c78fa1329f.tar.xz
glibc-c9002c1b7a648fe49b8472d6dc6724c78fa1329f.zip
Update.
2003-11-14 David Mosberger   <davidm@hpl.hp.com>

	* sysdeps/unix/sysv/linux/ia64/sysdep.h
	(GAS_ALIGN_BREAKS_UNWIND_INFO): Define this macro to indicate
	that all existing GAS versions have a problem with .align inside
	a function.
	* sysdeps/ia64/memccpy.S: Work around GAS_ALIGN_BREAKS_UNWIND_INFO bug.
	* sysdeps/ia64/memcpy.S: Likewise.
	* sysdeps/ia64/memset.S: Likewise.
	* sysdeps/ia64/memmove.S: Likewise.  Also move the jump-table to
	out of .text into .rodata, where it belongs.

	* sysdeps/unix/sysv/linux/ia64/pipe.S: There is no need to
	save/restore input-arguments, because they're necessarily
	preserved by the kernel to support syscall-restart.
Diffstat (limited to 'sysdeps/ia64/memccpy.S')
-rw-r--r--sysdeps/ia64/memccpy.S11
1 files changed, 10 insertions, 1 deletions
diff --git a/sysdeps/ia64/memccpy.S b/sysdeps/ia64/memccpy.S
index 6bccb96b70..53c43c512b 100644
--- a/sysdeps/ia64/memccpy.S
+++ b/sysdeps/ia64/memccpy.S
@@ -52,6 +52,15 @@
 #define loopcnt		r30
 #define	value		r31
 
+#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO
+/* Manually force proper loop-alignment.  Note: be sure to
+   double-check the code-layout after making any changes to
+   this routine! */
+# define ALIGN(n)	{ nop 0 }
+#else
+# define ALIGN(n)	.align n
+#endif
+
 ENTRY(memccpy)
 	.prologue
 	alloc 	r2 = ar.pfs, 4, 40 - 4, 0, 40
@@ -110,7 +119,7 @@ ENTRY(memccpy)
 	mov	ar.ec = MEMLAT + 6 + 1 	// six more passes needed
 	ld8	r[1] = [asrc], 8 	// r[1] = w0
 	cmp.ne	p6, p0 = r0, r0	;;	// clear p6
-	.align	32
+	ALIGN(32)
 .l2:
 (p[0])		ld8.s	r[0] = [asrc], 8		// r[0] = w1
 (p[MEMLAT])	shr.u	tmp1[0] = r[1 + MEMLAT], sh1	// tmp1 = w0 >> sh1