diff options
Diffstat (limited to 'newlib/libc/machine/i386/strlen.S')
-rw-r--r-- | newlib/libc/machine/i386/strlen.S | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/newlib/libc/machine/i386/strlen.S b/newlib/libc/machine/i386/strlen.S deleted file mode 100644 index 0e3cb640c..000000000 --- a/newlib/libc/machine/i386/strlen.S +++ /dev/null @@ -1,98 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1998, 2002, 2008 by Red Hat Inc. All rights reserved. - * - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - #include "i386mach.h" - - .global SYM (strlen) - SOTYPE_FUNCTION(strlen) - -SYM (strlen): - - pushl ebp - movl esp,ebp - pushl edi - movl 8(ebp),edx - -#ifdef __OPTIMIZE_SIZE__ - cld - movl edx,edi - movl $4294967295,ecx - xor eax,eax - repnz - scasb -#else -/* Modern x86 hardware is much faster at double-word - manipulation than with bytewise repnz scasb. */ - -/* Do byte-wise checks until string is aligned. */ - movl edx,edi - test $3,edi - je L5 - movb (edi),cl - incl edi - testb cl,cl - je L15 - - test $3,edi - je L5 - movb (edi),cl - incl edi - testb cl,cl - je L15 - - test $3,edi - je L5 - movb (edi),cl - incl edi - testb cl,cl - je L15 - -L5: - subl $4,edi - -/* loop performing 4 byte mask checking for desired 0 byte */ - .p2align 4,,7 -L10: - addl $4,edi - movl (edi),ecx - leal -16843009(ecx),eax - notl ecx - andl ecx,eax - testl $-2139062144,eax - je L10 - -/* Find which of four bytes is 0. */ - notl ecx - incl edi - - testb cl,cl - je L15 - incl edi - shrl $8,ecx - - testb cl,cl - je L15 - incl edi - shrl $8,ecx - - testb cl,cl - je L15 - incl edi - -#endif - -L15: - subl edx,edi - leal -1(edi),eax - - leal -4(ebp),esp - popl edi - leave - ret |