aboutsummaryrefslogtreecommitdiff
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.zip
glibc-c9002c1b7a648fe49b8472d6dc6724c78fa1329f.tar.gz
glibc-c9002c1b7a648fe49b8472d6dc6724c78fa1329f.tar.bz2
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 3353000..84d8f0a 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