4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
29 #include <sys/asm_linkage.h>
31 ANSI_PRAGMA_WEAK
(memset
,function
)
36 pushl
%edi
/ save register variable
37 movl
8(%esp
),%edi
/ %edi
= string address
38 movl
12(%esp
),%eax
/ %al
= byte to duplicate
39 movl
16(%esp
),%ecx
/ %ecx
= number of copies
40 cmpl $
20,%ecx
/ strings with
20 or more chars should
41 jbe
.byteset / byteset one word at a time
43 andl $
0xff,%eax
/ Duplicate fill const
4 times in
%eax
44 shrl $
2,%ecx
/ %ecx
= number of words to set
46 shll $
8,%eax
/ This is ugly
, but no P6 partial stalls
47 orl
%edx
,%eax
/ get introduced as before
54 andl $
3,%ecx
/ %ecx
= number of bytes left
57 movl
8(%esp
),%eax
/ return string address
58 popl
%edi
/ restore register variable