1/* 2 * ==================================================== 3 * Copyright (C) 1998, 2002, 2008 by Red Hat Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and distribute this 6 * software is freely granted, provided that this notice 7 * is preserved. 8 * ==================================================== 9 */ 10 11 #include "i386mach.h" 12 13 .global SYM (memset) 14 SOTYPE_FUNCTION(memset) 15 16SYM (memset): 17 18#ifdef __iamcu__ 19 pushl edi 20 movl eax,edi 21 movzbl dl,eax 22 mov edi,edx 23 rep stosb 24 mov edx,eax 25 popl edi 26#else 27 pushl ebp 28 movl esp,ebp 29 pushl edi 30 movl 8(ebp),edi 31 movzbl 12(ebp),eax 32 movl 16(ebp),ecx 33 cld 34 35#ifndef __OPTIMIZE_SIZE__ 36/* Less than 16 bytes won't benefit from the 'rep stosl' loop. */ 37 cmpl $16,ecx 38 jbe .L19 39 testl $7,edi 40 je .L10 41 42/* It turns out that 8-byte aligned 'rep stosl' outperforms 43 4-byte aligned on some x86 platforms. */ 44 movb al,(edi) 45 incl edi 46 decl ecx 47 testl $7,edi 48 je .L10 49 50 movb al,(edi) 51 incl edi 52 decl ecx 53 testl $7,edi 54 je .L10 55 56 movb al,(edi) 57 incl edi 58 decl ecx 59 testl $7,edi 60 je .L10 61 62 movb al,(edi) 63 incl edi 64 decl ecx 65 testl $7,edi 66 je .L10 67 68 movb al,(edi) 69 incl edi 70 decl ecx 71 testl $7,edi 72 je .L10 73 74 movb al,(edi) 75 incl edi 76 decl ecx 77 testl $7,edi 78 je .L10 79 80 movb al,(edi) 81 incl edi 82 decl ecx 83 84/* At this point, ecx>8 and edi%8==0. */ 85.L10: 86 movb al,ah 87 movl eax,edx 88 sall $16,edx 89 orl edx,eax 90 91 movl ecx,edx 92 shrl $2,ecx 93 andl $3,edx 94 rep 95 stosl 96 movl edx,ecx 97#endif /* not __OPTIMIZE_SIZE__ */ 98 99.L19: 100 rep 101 stosb 102 103 movl 8(ebp),eax 104 105 leal -4(ebp),esp 106 popl edi 107 leave 108#endif 109 ret 110 111#if defined(__linux__) && defined(__ELF__) 112.section .note.GNU-stack,"",%progbits 113#endif 114