diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
commit | 0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch) | |
tree | 2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /sysdeps/ia64/memccpy.S | |
parent | 7d58530341304d403a6626d7f7a1913165fe2f32 (diff) | |
download | glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.xz glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip |
2.5-18.1
Diffstat (limited to 'sysdeps/ia64/memccpy.S')
-rw-r--r-- | sysdeps/ia64/memccpy.S | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/sysdeps/ia64/memccpy.S b/sysdeps/ia64/memccpy.S index 53c43c512b..dd638d43c8 100644 --- a/sysdeps/ia64/memccpy.S +++ b/sysdeps/ia64/memccpy.S @@ -1,6 +1,6 @@ /* Optimized version of the memccpy() function. This file is part of the GNU C Library. - Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 2000,2001,2003,2006 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -183,27 +183,64 @@ ENTRY(memccpy) br.ret.sptk.many b0 .recovery1: - adds src = -(MEMLAT + 6 + 1) * 8, asrc +#if MEMLAT != 6 +# error "MEMLAT must be 6!" +#endif + adds src = -8, asrc mov loopcnt = ar.lc - mov tmp = ar.ec ;; + mov tmp = ar.ec + ;; +(p[0]) adds src = -8, src + ;; +(p[1]) adds src = -8, src sub sh1 = (MEMLAT + 6 + 1), tmp - shr.u sh2 = sh2, 3 - ;; + ;; +(p[2]) adds src = -8, src + ;; +(p[3]) adds src = -8, src shl loopcnt = loopcnt, 3 - sub src = src, sh2 + ;; +(p[4]) adds src = -8, src + ;; +(p[5]) adds src = -8, src shl sh1 = sh1, 3 + ;; +(p[6]) adds src = -8, src + ;; +(p[7]) adds src = -8, src shl tmp = tmp, 3 ;; +(p[8]) adds src = -8, src + ;; +(p[9]) adds src = -8, src + shr.u sh2 = sh2, 3 + ;; +(p[10]) adds src = -8, src + ;; +(p[11]) adds src = -8, src add len = len, loopcnt - add src = sh1, src ;; + ;; + sub src = src, sh2 + ;; add len = tmp, len -.back1: + add src = sh1, src br.cond.sptk .cpyfew .recovery2: - add tmp = -(MEMLAT + 3) * 8, src +#if MEMLAT != 6 +# error "MEMLAT must be 6!" +#endif + add tmp = -8, src (p7) br.cond.spnt .gotit ;; +(p[0]) add tmp = -8, tmp ;; +(p[1]) add tmp = -8, tmp ;; +(p[2]) add tmp = -8, tmp ;; +(p[3]) add tmp = -8, tmp ;; +(p[4]) add tmp = -8, tmp ;; +(p[5]) add tmp = -8, tmp ;; +(p[6]) add tmp = -8, tmp ;; +(p[7]) add tmp = -8, tmp ;; ld8 r[MEMLAT+2] = [tmp] ;; xor pos0[1] = r[MEMLAT+2], charx8 ;; czx1.r pos0[1] = pos0[1] ;; |