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/memset.S')
-rw-r--r--newlib/libc/machine/i386/memset.S69
1 files changed, 15 insertions, 54 deletions
diff --git a/newlib/libc/machine/i386/memset.S b/newlib/libc/machine/i386/memset.S
index 6eb2cd6da..ce40820ff 100644
--- a/newlib/libc/machine/i386/memset.S
+++ b/newlib/libc/machine/i386/memset.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
@@ -18,82 +18,43 @@ SYM (memset):
pushl ebp
movl esp,ebp
pushl edi
+ pushl ebx
movl 8(ebp),edi
- movzbl 12(ebp),eax
+ movl 12(ebp),eax
movl 16(ebp),ecx
cld
#ifndef __OPTIMIZE_SIZE__
-/* Less than 16 bytes won't benefit from the 'rep stosl' loop. */
+ andl $255,eax
+ movl ecx,ebx
+ testl $3,edi
+ jne .L19
cmpl $16,ecx
jbe .L19
- testl $7,edi
- je .L10
-/* It turns out that 8-byte aligned 'rep stosl' outperforms
- 4-byte aligned on some x86 platforms. */
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
- testl $7,edi
- je .L10
-
- movb al,(edi)
- incl edi
- decl ecx
+ movl eax,edx
+ sall $8,eax
+ orl edx,eax
-/* At this point, ecx>8 and edi%8==0. */
-.L10:
- movb al,ah
movl eax,edx
sall $16,edx
orl edx,eax
- movl ecx,edx
shrl $2,ecx
- andl $3,edx
+ andl $3,ebx
rep
stosl
- movl edx,ecx
+ movl ebx,ecx
#endif /* not __OPTIMIZE_SIZE__ */
-
+
.L19:
rep
stosb
movl 8(ebp),eax
- leal -4(ebp),esp
+ leal -8(ebp),esp
+ popl ebx
popl edi
leave
ret