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.
30 / Wide character wcschr
() implementation
32 / Algorithm based on Solaris
2.6 gen
/strchr.s implementation
35 #include <sys/asm_linkage.h>
37 ANSI_PRAGMA_WEAK
(wcschr
,function
)
38 ANSI_PRAGMA_WEAK
(wschr
,function
)
40 .align 8 / accounts for .loop alignment and prolog
42 ENTRY
(wcschr
) /* (wchar_t *s, wchar_t wc) */
45 movl
(%rax
),%edx
/ %edx
= wchar of string
46 cmpl %esi
,%edx
/ find it?
48 testl
%edx
,%edx
/ is it null?
51 movl
4(%rax
),%edx
/ %edx
= wchar of string
52 cmpl %esi
,%edx
/ find it?
54 testl
%edx
,%edx
/ is it null?
57 movl
8(%rax
),%edx
/ %edx
= wchar of string
58 cmpl %esi
,%edx
/ find it?
60 testl
%edx
,%edx
/ is it null?
63 movl
12(%rax
),%edx
/ %edx
= wchar of string
64 cmpl %esi
,%edx
/ find it?
67 testl
%edx
,%edx
/ is it null?
71 xorl
%eax
,%eax
/ %rax
= NULL
87 jmp wcschr
/ tail call into wcschr