Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/i386/memchr.S')
-rw-r--r--newlib/libc/machine/i386/memchr.S88
1 files changed, 8 insertions, 80 deletions
diff --git a/newlib/libc/machine/i386/memchr.S b/newlib/libc/machine/i386/memchr.S
index 7639685be..d29a04521 100644
--- a/newlib/libc/machine/i386/memchr.S
+++ b/newlib/libc/machine/i386/memchr.S
@@ -1,6 +1,6 @@
/*
* ====================================================
- * Copyright (C) 1998, 2002, 2008 by Red Hat Inc. All rights reserved.
+ * Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
*
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
@@ -9,23 +9,21 @@
*/
#include "i386mach.h"
-
+
.global SYM (memchr)
SOTYPE_FUNCTION(memchr)
SYM (memchr):
pushl ebp
movl esp,ebp
- pushl edi
- movzbl 12(ebp),eax
- movl 16(ebp),ecx
- movl 8(ebp),edi
+ pushl edi
+ movl 12(ebp),eax
+ movl 16(ebp),ecx
+ movl 8(ebp),edi
xorl edx,edx
testl ecx,ecx
- jz L20
-
-#ifdef __OPTIMIZE_SIZE__
+ jz L1
cld
repnz
@@ -33,79 +31,9 @@ SYM (memchr):
setnz dl
decl edi
-
-#else /* !__OPTIMIZE_SIZE__ */
-/* Do byte-wise checks until string is aligned. */
- testl $3,edi
- je L5
- cmpb (edi),al
- je L15
- incl edi
- decl ecx
- je L20
-
- testl $3,edi
- je L5
- cmpb (edi),al
- je L15
- incl edi
- decl ecx
- je L20
-
- testl $3,edi
- je L5
- cmpb (edi),al
- je L15
- incl edi
- decl ecx
- je L20
-
-/* Create a mask, then check a word at a time. */
-L5:
- movb al,ah
- movl eax,edx
- sall $16,edx
- orl edx,eax
- pushl ebx
-
- .p2align 4,,7
-L8:
- subl $4,ecx
- jc L9
- movl (edi),edx
- addl $4,edi
- xorl eax,edx
- leal -16843009(edx),ebx
- notl edx
- andl edx,ebx
- testl $-2139062144,ebx
- je L8
-
- subl $4,edi
-
-L9:
- popl ebx
- xorl edx,edx
- addl $4,ecx
- je L20
-
-/* Final byte-wise checks. */
- .p2align 4,,7
-L10:
- cmpb (edi),al
- je L15
- incl edi
- decl ecx
- jne L10
-
- xorl edi,edi
-
-#endif /* !__OPTIMIZE_SIZE__ */
-
-L15:
decl edx
andl edi,edx
-L20:
+L1:
movl edx,eax
leal -4(ebp),esp