summary refs log tree commit diff
path: root/sysdeps/ia64/memset.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/memset.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/memset.S')
-rw-r--r--sysdeps/ia64/memset.S12
1 files changed, 10 insertions, 2 deletions
diff --git a/sysdeps/ia64/memset.S b/sysdeps/ia64/memset.S
index 3353000186..84d8f0a191 100644
--- a/sysdeps/ia64/memset.S
+++ b/sysdeps/ia64/memset.S
@@ -153,7 +153,9 @@ ENTRY(memset)
 (p_zr)	br.cond.dptk.many .l1b			// Jump to use stf.spill
 ;; }
 
+#ifndef GAS_ALIGN_BREAKS_UNWIND_INFO
 	.align 32 // -------- //  L1A: store ahead into cache lines; fill later
+#endif
 { .mmi
 	and	tmp = -(LINE_SIZE), cnt		// compute end of range
 	mov	ptr9 = ptr1			// used for prefetching
@@ -222,7 +224,11 @@ ENTRY(memset)
 	br.cond.dpnt.many  .move_bytes_from_alignment	// Branch no. 3
 ;; }
 
+#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO
+	{ nop 0 }
+#else
 	.align 32
+#endif
 .l1b:	// ------------------ //  L1B: store ahead into cache lines; fill later
 { .mmi
 	and	tmp = -(LINE_SIZE), cnt		// compute end of range
@@ -283,13 +289,15 @@ ENTRY(memset)
 { .mib
 	cmp.eq	p_scr, p0 = loopcnt, r0
 	add	loopcnt = -1, loopcnt
-(p_scr)	br.cond.dpnt.many .store_words
+(p_scr)	br.cond.dpnt.many store_words
 ;; }
 { .mib
 	and	cnt = 0x1f, cnt		// compute the remaining cnt
 	movi0   ar.lc = loopcnt
 ;; }
+#ifndef GAS_ALIGN_BREAKS_UNWIND_INFO
 	.align 32
+#endif
 .l2:	// ---------------------------- //  L2A:  store 32B in 2 cycles
 { .mmb
 	store	[ptr1] = myval, 8
@@ -299,7 +307,7 @@ ENTRY(memset)
 	store	[ptr2] = myval, 24
 	br.cloop.dptk.many .l2
 ;; }
-.store_words:
+store_words:
 { .mib
 	cmp.gt	p_scr, p0 = 8, cnt		// just a few bytes left ?
 (p_scr)	br.cond.dpnt.many .move_bytes_from_alignment	// Branch