Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/libc/i386/string/wcscmp.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
* int
30
* wcscmp(const wchar_t *s1, const wchar_t *s2) --
31
* Return an integer greater than, equal to, or less than 0, when
32
* the string s1 is greater than, equal to, or less than the string s2.
33
*/
34
ENTRY(wcscmp)
35
pushl %edi
36
pushl %esi
37
movl 12(%esp),%edi /* s1 */
38
movl 16(%esp),%esi /* s2 */
39
.p2align 4,0x90
40
top: movl (%edi),%eax
41
cmpl %eax,(%esi)
42
jne no0
43
testl %eax,%eax
44
jz same
45
movl 4(%edi),%eax
46
cmpl %eax,4(%esi)
47
jne no4
48
testl %eax,%eax
49
jz same
50
movl 8(%edi),%eax
51
cmpl %eax,8(%esi)
52
jne no8
53
testl %eax,%eax
54
jz same
55
movl 12(%edi),%eax
56
cmpl %eax,12(%esi)
57
jne no12
58
leal 16(%edi),%edi
59
leal 16(%esi),%esi
60
testl %eax,%eax
61
jnz top
62
.p2align 2,0x90
63
same: xorl %eax,%eax
64
popl %esi
65
popl %edi
66
ret
67
.p2align 2,0x90
68
no12: leal 4(%esi),%esi
69
.p2align 2,0x90
70
no8: leal 4(%esi),%esi
71
.p2align 2,0x90
72
no4: leal 4(%esi),%esi
73
.p2align 2,0x90
74
no0: subl (%esi),%eax
75
popl %esi
76
popl %edi
77
ret
78
END(wcscmp)
79
80
.section .note.GNU-stack,"",%progbits
81
82