diff options
Diffstat (limited to 'sysdeps/i386/stpcpy.S')
-rw-r--r-- | sysdeps/i386/stpcpy.S | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/sysdeps/i386/stpcpy.S b/sysdeps/i386/stpcpy.S deleted file mode 100644 index d9981b677b..0000000000 --- a/sysdeps/i386/stpcpy.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper (drepper@gnu.ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -/* This function is defined neither in ANSI nor POSIX standards but is - also not invented here. */ - -#include <sysdep.h> -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 - - .text -ENTRY (__stpcpy) - - movl DEST(%esp), %eax - movl SRC(%esp), %ecx - subl %eax, %ecx /* magic: reduce number of loop variants - to one using addressing mode */ - - /* Here we would like to write - - subl $4, %eax - ALIGN (4) - - but the assembler is too smart and optimizes for the shortest - form where the number only needs one byte. But if we could - have the long form we would not need the alignment. */ - - .byte 0x81, 0xe8 /* This is `subl $0x00000004, %eax' */ - .long 0x00000004 - - /* Four times unfolded loop with only one loop counter. This - is achieved by the use of index+base addressing mode. As the - loop counter we use the destination address because this is - also the result. */ -L(1): addl $4, %eax /* increment loop counter */ - - movb (%eax,%ecx), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(2) /* yes, then exit */ - - movb 1(%eax,%ecx), %dl /* load current char */ - movb %dl, 1(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(3) /* yes, then exit */ - - movb 2(%eax,%ecx), %dl /* load current char */ - movb %dl, 2(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(4) /* yes, then exit */ - - movb 3(%eax,%ecx), %dl /* load current char */ - movb %dl, 3(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jnz L(1) /* no, then continue loop */ - - incl %eax /* correct loop counter */ -L(4): incl %eax -L(3): incl %eax -L(2): - - ret -END (__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) |