blob: 22ba5460eae463e42d68946930257667c5101127 [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/* $OpenBSD: strcmp.S,v 1.3 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
9/*
10 * NOTE: I've unrolled the loop eight times: large enough to make a
11 * significant difference, and small enough not to totally trash the
12 * cache.
13 */
14
15ENTRY(strcmp)
16 movl 0x04(%esp),%eax
17 movl 0x08(%esp),%edx
18 jmp L2 /* Jump into the loop! */
19
20 .align 2,0x90
21L1: incl %eax
22 incl %edx
23L2: movb (%eax),%cl
24 testb %cl,%cl /* null terminator??? */
25 jz L3
26 cmpb %cl,(%edx) /* chars match??? */
27 jne L3
28 incl %eax
29 incl %edx
30 movb (%eax),%cl
31 testb %cl,%cl
32 jz L3
33 cmpb %cl,(%edx)
34 jne L3
35 incl %eax
36 incl %edx
37 movb (%eax),%cl
38 testb %cl,%cl
39 jz L3
40 cmpb %cl,(%edx)
41 jne L3
42 incl %eax
43 incl %edx
44 movb (%eax),%cl
45 testb %cl,%cl
46 jz L3
47 cmpb %cl,(%edx)
48 jne L3
49 incl %eax
50 incl %edx
51 movb (%eax),%cl
52 testb %cl,%cl
53 jz L3
54 cmpb %cl,(%edx)
55 jne L3
56 incl %eax
57 incl %edx
58 movb (%eax),%cl
59 testb %cl,%cl
60 jz L3
61 cmpb %cl,(%edx)
62 jne L3
63 incl %eax
64 incl %edx
65 movb (%eax),%cl
66 testb %cl,%cl
67 jz L3
68 cmpb %cl,(%edx)
69 jne L3
70 incl %eax
71 incl %edx
72 movb (%eax),%cl
73 testb %cl,%cl
74 jz L3
75 cmpb %cl,(%edx)
76 je L1
77 .align 2, 0x90
78L3: movzbl (%eax),%eax /* unsigned comparison */
79 movzbl (%edx),%edx
80 subl %edx,%eax
81 ret