blob: 3b5053024aa7ebf13b7ac7dec7522568f26a0020 [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/* $OpenBSD: memcmp.S,v 1.4 2005/08/07 11:30:38 espie Exp $ */
2/*
3 * Written by J.T. Conklin <jtc@netbsd.org>.
4 * Public domain.
5 */
6
7#include <machine/asm.h>
8
9ENTRY(memcmp)
10 pushl %edi
11 pushl %esi
12 movl 12(%esp),%edi
13 movl 16(%esp),%esi
14 cld /* set compare direction forward */
15
16 movl 20(%esp),%ecx /* compare by words */
17 shrl $2,%ecx
18 repe
19 cmpsl
20 jne L5 /* do we match so far? */
21
22 movl 20(%esp),%ecx /* compare remainder by bytes */
23 andl $3,%ecx
24 repe
25 cmpsb
26 jne L6 /* do we match? */
27
28 xorl %eax,%eax /* we match, return zero */
29 popl %esi
30 popl %edi
31 ret
32
33L5: movl $4,%ecx /* We know that one of the next */
34 subl %ecx,%edi /* four pairs of bytes do not */
35 subl %ecx,%esi /* match. */
36 repe
37 cmpsb
38L6: movzbl -1(%edi),%eax /* Perform unsigned comparison */
39 movzbl -1(%esi),%edx
40 subl %edx,%eax
41 popl %esi
42 popl %edi
43 ret
Elliott Hughes67195002013-02-13 15:12:32 -080044END(memcmp)