12ceb2ce9SGarrett Wollman/* 22ceb2ce9SGarrett Wollman * Copyright (c) 1993 Winning Strategies, Inc. 32ceb2ce9SGarrett Wollman * All rights reserved. 42ceb2ce9SGarrett Wollman * 52ceb2ce9SGarrett Wollman * Redistribution and use in source and binary forms, with or without 62ceb2ce9SGarrett Wollman * modification, are permitted provided that the following conditions 72ceb2ce9SGarrett Wollman * are met: 82ceb2ce9SGarrett Wollman * 1. Redistributions of source code must retain the above copyright 92ceb2ce9SGarrett Wollman * notice, this list of conditions and the following disclaimer. 102ceb2ce9SGarrett Wollman * 2. Redistributions in binary form must reproduce the above copyright 112ceb2ce9SGarrett Wollman * notice, this list of conditions and the following disclaimer in the 122ceb2ce9SGarrett Wollman * documentation and/or other materials provided with the distribution. 132ceb2ce9SGarrett Wollman * 3. All advertising materials mentioning features or use of this software 142ceb2ce9SGarrett Wollman * must display the following acknowledgement: 152ceb2ce9SGarrett Wollman * This product includes software developed by Winning Strategies, Inc. 162ceb2ce9SGarrett Wollman * 4. The name of the author may not be used to endorse or promote products 172ceb2ce9SGarrett Wollman * derived from this software without specific prior written permission 182ceb2ce9SGarrett Wollman * 192ceb2ce9SGarrett Wollman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 202ceb2ce9SGarrett Wollman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 212ceb2ce9SGarrett Wollman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 222ceb2ce9SGarrett Wollman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 232ceb2ce9SGarrett Wollman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 242ceb2ce9SGarrett Wollman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252ceb2ce9SGarrett Wollman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262ceb2ce9SGarrett Wollman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272ceb2ce9SGarrett Wollman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 282ceb2ce9SGarrett Wollman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292ceb2ce9SGarrett Wollman */ 302ceb2ce9SGarrett Wollman 31e6d808aeSPeter Wemm#include <machine/asm.h> 322ceb2ce9SGarrett Wollman/* 332ceb2ce9SGarrett Wollman * memset(void *b, int c, size_t len) 342ceb2ce9SGarrett Wollman * write len bytes of value c (converted to an unsigned char) to 352ceb2ce9SGarrett Wollman * the string b. 362ceb2ce9SGarrett Wollman * 372ceb2ce9SGarrett Wollman * Written by: 382ceb2ce9SGarrett Wollman * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc. 392ceb2ce9SGarrett Wollman */ 402ceb2ce9SGarrett Wollman 412ceb2ce9SGarrett WollmanENTRY(memset) 422ceb2ce9SGarrett Wollman pushl %edi 432ceb2ce9SGarrett Wollman pushl %ebx 442ceb2ce9SGarrett Wollman movl 12(%esp),%edi 452ceb2ce9SGarrett Wollman movzbl 16(%esp),%eax /* unsigned char, zero extend */ 462ceb2ce9SGarrett Wollman movl 20(%esp),%ecx 472ceb2ce9SGarrett Wollman pushl %edi /* push address of buffer */ 482ceb2ce9SGarrett Wollman 492ceb2ce9SGarrett Wollman cld /* set fill direction forward */ 502ceb2ce9SGarrett Wollman 512ceb2ce9SGarrett Wollman /* 522ceb2ce9SGarrett Wollman * if the string is too short, it's really not worth the overhead 532ceb2ce9SGarrett Wollman * of aligning to word boundries, etc. So we jump to a plain 542ceb2ce9SGarrett Wollman * unaligned set. 552ceb2ce9SGarrett Wollman */ 562ceb2ce9SGarrett Wollman cmpl $0x0f,%ecx 572ceb2ce9SGarrett Wollman jle L1 582ceb2ce9SGarrett Wollman 592ceb2ce9SGarrett Wollman movb %al,%ah /* copy char to all bytes in word */ 602ceb2ce9SGarrett Wollman movl %eax,%edx 612ceb2ce9SGarrett Wollman sall $16,%eax 622ceb2ce9SGarrett Wollman orl %edx,%eax 632ceb2ce9SGarrett Wollman 642ceb2ce9SGarrett Wollman movl %edi,%edx /* compute misalignment */ 652ceb2ce9SGarrett Wollman negl %edx 662ceb2ce9SGarrett Wollman andl $3,%edx 672ceb2ce9SGarrett Wollman movl %ecx,%ebx 682ceb2ce9SGarrett Wollman subl %edx,%ebx 692ceb2ce9SGarrett Wollman 702ceb2ce9SGarrett Wollman movl %edx,%ecx /* set until word aligned */ 712ceb2ce9SGarrett Wollman rep 722ceb2ce9SGarrett Wollman stosb 732ceb2ce9SGarrett Wollman 742ceb2ce9SGarrett Wollman movl %ebx,%ecx 752ceb2ce9SGarrett Wollman shrl $2,%ecx /* set by words */ 762ceb2ce9SGarrett Wollman rep 772ceb2ce9SGarrett Wollman stosl 782ceb2ce9SGarrett Wollman 792ceb2ce9SGarrett Wollman movl %ebx,%ecx /* set remainder by bytes */ 802ceb2ce9SGarrett Wollman andl $3,%ecx 812ceb2ce9SGarrett WollmanL1: rep 822ceb2ce9SGarrett Wollman stosb 832ceb2ce9SGarrett Wollman 842ceb2ce9SGarrett Wollman popl %eax /* pop address of buffer */ 852ceb2ce9SGarrett Wollman popl %ebx 862ceb2ce9SGarrett Wollman popl %edi 872ceb2ce9SGarrett Wollman ret 88ed820052SPeter WemmEND(memset) 89*93ab7586SKonstantin Belousov 90*93ab7586SKonstantin Belousov .section .note.GNU-stack,"",%progbits 91