Various cleanups.
authordrepper <drepper>
Sun, 21 May 2000 21:56:19 +0000 (21:56 +0000)
committerdrepper <drepper>
Sun, 21 May 2000 21:56:19 +0000 (21:56 +0000)
13 files changed:
sysdeps/ia64/memccpy.S
sysdeps/ia64/memchr.S
sysdeps/ia64/memcmp.S
sysdeps/ia64/memcpy.S
sysdeps/ia64/memmove.S
sysdeps/ia64/memset.S
sysdeps/ia64/strcat.S
sysdeps/ia64/strchr.S
sysdeps/ia64/strcmp.S
sysdeps/ia64/strcpy.S
sysdeps/ia64/strlen.S
sysdeps/ia64/strncmp.S
sysdeps/ia64/strncpy.S

index 26bb31a..3dd1339 100644 (file)
@@ -1,23 +1,35 @@
-/*
- *
- * Optimized version of the memccpy() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: a pointer to the next byte after char in dest or NULL
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *     in2:    char
- *      in3:    byte count
- *
- * This implementation assumes little endian mode (UM.be = 0).
- *
- * This implementation assumes that it is safe to do read ahead
- * in the src block, without getting beyond its limit.
- *
- */
+/* Optimized version of the memccpy() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: a pointer to the next byte after char in dest or NULL
+
+   Inputs:
+        in0:    dest
+        in1:    src
+       in2:    char
+        in3:    byte count
+  
+   This implementation assumes little endian mode (UM.be = 0).
+  
+   This implementation assumes that it is safe to do read ahead
+   in the src block, without getting beyond its limit.  */
 
 #include <sysdep.h>
 #undef ret
index 86398f7..600f5c7 100644 (file)
@@ -1,31 +1,44 @@
-/*
- * Optimized version of the standard memchr() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the address of the first occurence of chr in str or NULL
- *
- * Inputs:
- *     in0:    str
- *     in1:    chr
- *     in2:    byte count
- *
- * This implementation assumes little endian mode.  For big endian mode,
- * the instruction czx1.r should be replaced by czx1.l.
- *
- * The algorithm is fairly straightforward: search byte by byte until we
- * we get to a word aligned address, then search word by word as much as
- * possible; the remaining few bytes are searched one at a time.
- *
- * The word by word search is performed by xor-ing the word with a word
- * containing chr in every byte.  If there is a hit, the result will 
- * contain a zero byte in the corresponding position.  The presence and 
- * position of that zero byte is detected with a czx instruction.
- *
- * All the loops in this function could have had the internal branch removed
- * if br.ctop and br.cloop could be predicated :-(
- *
- */
+/* Optimized version of the standard memchr() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the address of the first occurence of chr in str or NULL
+
+   Inputs:
+       in0:    str
+       in1:    chr
+       in2:    byte count
+
+   This implementation assumes little endian mode.  For big endian mode,
+   the instruction czx1.r should be replaced by czx1.l.
+
+   The algorithm is fairly straightforward: search byte by byte until we
+   we get to a word aligned address, then search word by word as much as
+   possible; the remaining few bytes are searched one at a time.
+
+   The word by word search is performed by xor-ing the word with a word
+   containing chr in every byte.  If there is a hit, the result will 
+   contain a zero byte in the corresponding position.  The presence and 
+   position of that zero byte is detected with a czx instruction.
+
+   All the loops in this function could have had the internal branch removed
+   if br.ctop and br.cloop could be predicated :-(.  */
 
 #include <sysdep.h>
 #undef ret
index ae283a2..2e4f2ec 100644 (file)
@@ -1,25 +1,37 @@
-/*
- *
- * Optimized version of the standard memcmp() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the result of the comparison
- *
- * Inputs:
- *      in0:    dest (aka s1)
- *      in1:    src  (aka s2)
- *      in2:    byte count
- *
- * In this form, it assumes little endian mode.  For big endian mode, the
- * the two shifts in .l2 must be inverted:
- *
- *     shl     tmp1[0] = r[1 + MEMLAT], sh1   // tmp1 = w0 << sh1
- *     shr.u   tmp2[0] = r[0 + MEMLAT], sh2   // tmp2 = w1 >> sh2
- *
- * and all the mux1 instructions should be replaced by plain mov's.
- *
- */
+/* Optimized version of the standard memcmp() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the result of the comparison
+
+   Inputs:
+        in0:    dest (aka s1)
+        in1:    src  (aka s2)
+        in2:    byte count
+
+   In this form, it assumes little endian mode.  For big endian mode, the
+   the two shifts in .l2 must be inverted:
+
+       shl     tmp1[0] = r[1 + MEMLAT], sh1   // tmp1 = w0 << sh1
+       shr.u   tmp2[0] = r[0 + MEMLAT], sh2   // tmp2 = w1 >> sh2
+
+   and all the mux1 instructions should be replaced by plain mov's.  */
 
 #include <sysdep.h>
 #undef ret
index ebba5d2..a254202 100644 (file)
@@ -1,26 +1,38 @@
-/*
- *
- * Optimized version of the standard memcpy() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *      in2:    byte count
- *
- * An assembly implementation of the algorithm used by the generic C
- * version from glibc.  The case when all three arguments are multiples
- * of 8 is treated separatedly, for extra performance.
- *
- * In this form, it assumes little endian mode.  For big endian mode,
- * sh1 must be computed using an extra instruction: sub sh1 = 64, sh1
- * and the order of r[MEMLAT] and r[MEMLAT+1] must be reverted in the
- * shrp instruction.
- *
- */
+/* Optimized version of the standard memcpy() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 1991,92,93,97,98,99 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+
+   Inputs:
+        in0:    dest
+        in1:    src
+        in2:    byte count
+
+   An assembly implementation of the algorithm used by the generic C
+   version from glibc.  The case when all three arguments are multiples
+   of 8 is treated separatedly, for extra performance.
+
+   In this form, it assumes little endian mode.  For big endian mode,
+   sh1 must be computed using an extra instruction: sub sh1 = 64, sh1
+   and the order of r[MEMLAT] and r[MEMLAT+1] must be reverted in the
+   shrp instruction.  */
 
 #include <sysdep.h>
 #undef ret
index 11fd2b3..3fc38b9 100644 (file)
@@ -1,25 +1,37 @@
-/*
- *
- * Optimized version of the standard memmove() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *      in2:    byte count
- *
- * The core of the function is the memcpy implementation used in memcpy.S.
- * When bytes have to be copied backwards, only the easy case, when 
- * all arguments are multiples of 8, is optimised.
- *
- * In this form, it assumes little endian mode.  For big endian mode,
- * sh1 must be computed using an extra instruction: sub sh1 = 64, sh1
- * or the UM.be bit should be cleared at the beginning and set at the end.
- *
- */
+/* Optimized version of the standard memmove() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+
+   Inputs:
+        in0:    dest
+        in1:    src
+        in2:    byte count
+
+   The core of the function is the memcpy implementation used in memcpy.S.
+   When bytes have to be copied backwards, only the easy case, when 
+   all arguments are multiples of 8, is optimised.
+
+   In this form, it assumes little endian mode.  For big endian mode,
+   sh1 must be computed using an extra instruction: sub sh1 = 64, sh1
+   or the UM.be bit should be cleared at the beginning and set at the end.  */
 
 #include <sysdep.h>
 #undef ret
index 1a00c21..0ebd9bc 100644 (file)
@@ -1,20 +1,33 @@
-/*
- * Optimized version of the standard memset() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    value
- *      in2:    count
- *
- * The algorithm is fairly straightforward: set byte by byte until we
- * we get to a word aligned address, then set word by word as much as
- * possible; the remaining few bytes are set one by one.
- *
- */
+/* Optimized version of the standard memset() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+  
+   Inputs:
+        in0:    dest
+        in1:    value
+        in2:    count
+
+   The algorithm is fairly straightforward: set byte by byte until we
+   we get to a word aligned address, then set word by word as much as
+   possible; the remaining few bytes are set one by one.  */
 
 #include <sysdep.h>
 #undef ret
@@ -37,45 +50,45 @@ ENTRY(memset)
        mov     ret0 = dest
        and     tmp = 7, dest
        cmp.eq  p6, p0 = cnt, r0
-(p6)   br.cond.spnt restore_and_exit ;;
+(p6)   br.cond.spnt .restore_and_exit ;;
        mov     ptr1 = dest
        sub     loopcnt = 8, tmp
        cmp.gt  p6, p0 = 16, cnt
-(p6)   br.cond.spnt set_few;;
+(p6)   br.cond.spnt .set_few;;
        cmp.eq  p6, p0 = tmp, r0
-(p6)   br.cond.sptk dest_aligned
+(p6)   br.cond.sptk .dest_aligned
        sub     cnt = cnt, loopcnt
        adds    loopcnt = -1, loopcnt;;
        mov     ar.lc = loopcnt;;       
-l1:
+.l1:
        st1     [ptr1] = byteval, 1
-       br.cloop.dptk   l1 ;;
-dest_aligned:
+       br.cloop.dptk   .l1 ;;
+.dest_aligned:
        adds    ptr2 = 8, ptr1
        mux1    wordval = byteval, @brcst
        shr.u   loopcnt = cnt, 4 ;;     // loopcnt = cnt / 16
        cmp.eq  p6, p0 = loopcnt, r0
-(p6)   br.cond.spnt    one_more
+(p6)   br.cond.spnt    .one_more
        and     cnt = 0xf, cnt          // compute the remaining cnt
        adds    loopcnt = -1, loopcnt;;
        mov     ar.lc = loopcnt;;       
-l2:
+.l2:
        st8     [ptr1] = wordval, 16
        st8     [ptr2] = wordval, 16
-       br.cloop.dptk l2
+       br.cloop.dptk .l2
        cmp.le  p6, p0 = 8, cnt ;;
-one_more:
+.one_more:
 (p6)   st8     [ptr1] = wordval, 8
 (p6)   adds    cnt = -8, cnt ;;
        cmp.eq  p6, p0 = cnt, r0
-(p6)   br.cond.spnt    restore_and_exit
-set_few:
+(p6)   br.cond.spnt    .restore_and_exit
+.set_few:
        adds    loopcnt = -1, cnt;;
        mov     ar.lc = loopcnt;;
-l3:    
+.l3:   
        st1     [ptr1] = byteval, 1
-       br.cloop.dptk   l3 ;;   
-restore_and_exit:
+       br.cloop.dptk   .l3 ;;  
+.restore_and_exit:
        mov     ar.lc = save_lc
        mov     ar.pfs = save_pfs
        br.ret.sptk.many b0                                     
index 2413f85..d8afacb 100644 (file)
@@ -1,24 +1,36 @@
-/*
- *
- * Assembly version of the standard strcat() function.  
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *
- * A straightforword implementation: strcpy(dest + strlen(dest), src).
- *
- * Could be marginally optimised by inlining the code of strcpy() and
- * strlen(), to avoid the two function calls.  OTOH, by not doing that,
- * we avoid L1I cache pollution (code using strcat() is likely to also
- * use strcpy() and strlen(), so we already have a copy of these functions
- * in the cache).
- *
- */
+/* IA-64 assembly version of the standard strcat() function.  
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+
+   Inputs:
+        in0:    dest
+        in1:    src
+
+   A straightforword implementation: strcpy(dest + strlen(dest), src).
+
+   Could be marginally optimised by inlining the code of strcpy() and
+   strlen(), to avoid the two function calls.  OTOH, by not doing that,
+   we avoid L1I cache pollution (code using strcat() is likely to also
+   use strcpy() and strlen(), so we already have a copy of these functions
+   in the cache).  */
 
 #include <sysdep.h>
 #undef ret
index 474254f..48cbf89 100644 (file)
@@ -1,21 +1,34 @@
-/*
- * Optimized version of the standard strchr() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the address of the first occurence of chr in str or NULL
- *
- * Inputs:
- *      in0:    str
- *      in1:    chr
- *
- * A modified version of memchr.S, the search ends when the character is
- * found or the terminating null character is encountered.
- *
- * This implementation assumes little endian mode.  For big endian mode,
- * the instruction czx1.r should be replaced by czx1.l.
- *
- */
+/* Optimized version of the standard strchr() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the address of the first occurence of chr in str or NULL
+
+   Inputs:
+        in0:    str
+        in1:    chr
+
+   A modified version of memchr.S, the search ends when the character is
+   found or the terminating null character is encountered.
+
+   This implementation assumes little endian mode.  For big endian mode,
+   the instruction czx1.r should be replaced by czx1.l.  */
 
 #include <sysdep.h>
 #undef ret
index 8e302d3..164dd1b 100644 (file)
@@ -1,19 +1,31 @@
-/*
- *
- * Optimized version of the standard strcmp() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the result of the comparison
- *
- * Inputs:
- *      in0:    s1
- *      in1:    s2
- *
- * Unlike memcmp(), this function is optimized for mismatches within the
- * first few characters.
- *
- */
+/* Optimized version of the standard strcmp() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the result of the comparison
+
+   Inputs:
+        in0:    s1
+        in1:    s2
+
+   Unlike memcmp(), this function is optimized for mismatches within the
+   first few characters.  */
 
 #include <sysdep.h>
 #undef ret
index d54a742..1250ede 100644 (file)
@@ -1,21 +1,34 @@
-/*
- *
- * Optimized version of the standard strcpy() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *
- * In this form, it assumes little endian mode.  For big endian mode, the
- * the two shifts in .l2 must be inverted:
- *
- *     shl     value = r[1], sh1       // value = w0 << sh1
- *     shr.u   tmp = r[0], sh2         // tmp = w1 >> sh2
- *
+/* Optimized version of the standard strcpy() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+
+   Inputs:
+        in0:    dest
+        in1:    src
+
+   In this form, it assumes little endian mode.  For big endian mode, the
+   the two shifts in .l2 must be inverted:
+
+       shl     value = r[1], sh1       // value = w0 << sh1
+       shr.u   tmp = r[0], sh2         // tmp = w1 >> sh2
  */
 
 #include <sysdep.h>
index 69cb867..32079f9 100644 (file)
@@ -1,24 +1,37 @@
-/*
- * Optimized version of the standard strlen() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the length of the input string
- *
- * Input:
- *      in0:    str
- *
- * Look for the null character byte by byte, until we reach a word aligned
- * address, then search word by word, using the czx instruction.  We're
- * also doing one word of read ahead, which could cause problems if the
- * null character is on the last word of a page and the next page is not
- * mapped in the process address space.  Hence the use of the speculative
- * load.
- *
- * This implementation assumes little endian mode.  For big endian mode,
- * the instruction czx1.r should be replaced by czx1.l.
- *
- */
+/* Optimized version of the standard strlen() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the length of the input string
+
+   Input:
+        in0:    str
+
+   Look for the null character byte by byte, until we reach a word aligned
+   address, then search word by word, using the czx instruction.  We're
+   also doing one word of read ahead, which could cause problems if the
+   null character is on the last word of a page and the next page is not
+   mapped in the process address space.  Hence the use of the speculative
+   load.
+
+   This implementation assumes little endian mode.  For big endian mode,
+   the instruction czx1.r should be replaced by czx1.l.  */
 
 #include <sysdep.h>
 #undef ret
@@ -43,41 +56,41 @@ ENTRY(strlen)
        ;;
        sub     loopcnt = 8, tmp        // loopcnt = 8 - tmp
        cmp.eq  p6, p0 = tmp, r0
-(p6)   br.cond.sptk    str_aligned;;
+(p6)   br.cond.sptk    .str_aligned;;
        adds    loopcnt = -1, loopcnt;;
        mov     ar.lc = loopcnt
-l1:
+.l1:
        ld1     val2 = [str], 1
        ;;
        cmp.eq  p6, p0 = val2, r0
-(p6)   br.cond.spnt    restore_and_exit
+(p6)   br.cond.spnt    .restore_and_exit
        adds    len = 1, len
-       br.cloop.dptk   l1
-str_aligned:
-       mov     origadd = str   // origadd = orig
+       br.cloop.dptk   .l1
+.str_aligned:
+       mov     origadd = str           // origadd = orig
        ld8     val1 = [str], 8;;
        nop.b   0
        nop.b   0
-l2:    ld8.s   val2 = [str], 8 // don't bomb out here
+l2:    ld8.s   val2 = [str], 8         // don't bomb out here
        czx1.r  pos0 = val1     
        ;;
        cmp.ne  p6, p0 = 8, pos0
-(p6)   br.cond.spnt foundit
-       chk.s   val2, recovery
-back:
+(p6)   br.cond.spnt .foundit
+       chk.s   val2, .recovery
+.back:
        mov     val1 = val2     
        br.cond.dptk l2
-foundit:
+.foundit:
        sub     tmp = str, origadd      // tmp = crt address - orig
        add     len = len, pos0;;
        add     len = len, tmp;;
        adds    len = -16, len
-restore_and_exit:
-       mov ar.pfs = saved_pfs  // restore the PFS
+.restore_and_exit:
+       mov ar.pfs = saved_pfs          // restore the PFS
        mov ar.lc = saved_lc            // restore the loop counter
        br.ret.sptk.many b0
-recovery:
+.recovery:
        adds    str = -8, str;;
-       ld8     val2 = [str], 8 // bomb out here
-       br.cond.sptk    back
+       ld8     val2 = [str], 8         // bomb out here
+       br.cond.sptk    .back
 END(strlen)
index fa9f91e..d24bcdf 100644 (file)
@@ -1,20 +1,32 @@
-/*
- *
- * Optimized version of the standard strncmp() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: the result of the comparison
- *
- * Inputs:
- *      in0:    s1
- *      in1:    s2
- *     in2:    n
- *
- * Unlike memcmp(), this function is optimized for mismatches within the
- * first few characters.
- *
- */
+/* Optimized version of the standard strncmp() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: the result of the comparison
+
+   Inputs:
+        in0:    s1
+        in1:    s2
+       in2:    n
+
+   Unlike memcmp(), this function is optimized for mismatches within the
+   first few characters.  */
 
 #include <sysdep.h>
 #undef ret
index 2f846ae..96f19c4 100644 (file)
@@ -1,21 +1,34 @@
-/*
- * Optimized version of the standard strncpy() function
- *
- * Contributed by Dan Pop <Dan.Pop@cern.ch>
- *
- * Return: dest
- *
- * Inputs:
- *      in0:    dest
- *      in1:    src
- *      in2:    char count
- *
- * If n >= 24, do a memcpy(dest, src, min(strlen(src)+1, n)), followed by a
- * memset(dest + strlen(src), 0, n - strlen(src) - 1) if necessary.
- *
- * Otherwise, copy characters one by one and fill with nulls if necessary.
- *
- */
+/* Optimized version of the standard strncpy() function.
+   This file is part of the GNU C Library.
+   Copyright (C) 2000 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
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Return: dest
+
+   Inputs:
+        in0:    dest
+        in1:    src
+        in2:    char count
+
+   If n >= 24, do a memcpy(dest, src, min(strlen(src)+1, n)), followed by a
+   memset(dest + strlen(src), 0, n - strlen(src) - 1) if necessary.
+
+   Otherwise, copy characters one by one and fill with nulls if necessary.  */
 
 #include <sysdep.h>
 #undef ret