ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/trunk/lib/libc/i386/string/memcmp.S
Revision: 10585
Committed: Fri Jun 8 12:06:55 2018 UTC (5 years, 10 months ago) by laffer1
File size: 2714 byte(s)
Log Message:
sync with freebsd

File Contents

# Content
1 /* $MidnightBSD$ */
2 /*
3 * Copyright (c) 1993 Winning Strategies, Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Winning Strategies, Inc.
17 * 4. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #include <machine/asm.h>
33 __FBSDID("$FreeBSD: stable/10/lib/libc/i386/string/memcmp.S 217106 2011-01-07 16:08:40Z kib $");
34
35 /*
36 * memcmp (void *b1, void *b2, size_t len)
37 *
38 * Written by:
39 * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
40 */
41
42 ENTRY(memcmp)
43 pushl %edi
44 pushl %esi
45 movl 12(%esp),%edi
46 movl 16(%esp),%esi
47 cld /* set compare direction forward */
48
49 movl 20(%esp),%ecx /* compare by words */
50 shrl $2,%ecx
51 repe
52 cmpsl
53 jne L5 /* do we match so far? */
54
55 movl 20(%esp),%ecx /* compare remainder by bytes */
56 andl $3,%ecx
57 repe
58 cmpsb
59 jne L6 /* do we match? */
60
61 xorl %eax,%eax /* we match, return zero */
62 popl %esi
63 popl %edi
64 ret
65
66 L5: movl $4,%ecx /* We know that one of the next */
67 subl %ecx,%edi /* four pairs of bytes do not */
68 subl %ecx,%esi /* match. */
69 repe
70 cmpsb
71 L6: movzbl -1(%edi),%eax /* Perform unsigned comparison */
72 movzbl -1(%esi),%edx
73 subl %edx,%eax
74 popl %esi
75 popl %edi
76 ret
77 END(memcmp)
78
79 .section .note.GNU-stack,"",%progbits

Properties

Name Value
svn:keywords MidnightBSD=%H