diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-11-19 06:12:51 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-11-19 06:12:51 +0000 |
commit | c9002c1b7a648fe49b8472d6dc6724c78fa1329f (patch) | |
tree | b9a61d0ea66ac08f3bc064d1ddd8823a3e65ebba /sysdeps/ia64/memset.S | |
parent | ad7f28c29d06ddb4506d0d75e089732740b5bd2b (diff) | |
download | glibc-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.S | 12 |
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 |