Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/libc/i386/string/wcschr.S
48254 views
1
/*-
2
* Copyright (c) 2003 Tim J. Robbins.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
* SUCH DAMAGE.
25
*/
26
27
#include <machine/asm.h>
28
/*
29
* wchar_t *
30
* wcschr(const wchar_t *s, wchar_t c) --
31
* Return pointer to first occurrence of the character `c' in the wide
32
* character string `s', or NULL if not found.
33
*/
34
ENTRY(wcschr)
35
movl 4(%esp),%ecx /* String */
36
movl 8(%esp),%eax /* Character */
37
pushl %ebx
38
.p2align 4,0x90
39
L1: movl (%ecx),%ebx
40
cmpl %eax,%ebx
41
je found0
42
testl %ebx,%ebx
43
jz no
44
movl 4(%ecx),%ebx
45
cmpl %eax,%ebx
46
je found1
47
testl %ebx,%ebx
48
jz no
49
movl 8(%ecx),%ebx
50
cmpl %eax,%ebx
51
je found2
52
testl %ebx,%ebx
53
jz no
54
movl 12(%ecx),%ebx
55
cmpl %eax,%ebx
56
je found3
57
testl %ebx,%ebx
58
jz no
59
leal 16(%ecx),%ecx
60
jmp L1
61
.p2align 2,0x90
62
found3: leal 4(%ecx),%ecx
63
.p2align 2,0x90
64
found2: leal 4(%ecx),%ecx
65
.p2align 2,0x90
66
found1: leal 4(%ecx),%ecx
67
.p2align 2,0x90
68
found0: popl %ebx
69
movl %ecx,%eax
70
ret
71
.p2align 2,0x90
72
no: popl %ebx
73
xorl %eax,%eax
74
ret
75
END(wcschr)
76
77
.section .note.GNU-stack,"",%progbits
78
79