Super User's BSD Cross Reference: /OpenBSD/lib/libc/arch/i386/string/strcmp.S

1 /* $OpenBSD: strcmp.S,v 1.5 2017年11月29日 05:13:57 guenther Exp $ */
2 /*
3 * Written by J.T. Conklin <jtc@netbsd.org>.
4 * Public domain.
5 */
6
7#include "DEFS.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
15 ENTRY(strcmp)
16 movl 0x04(%esp),%eax
17 movl 0x08(%esp),%edx
18 jmp L2 /* Jump into the loop! */
19
20 .align 2,0x90
21 L1: incl %eax
22 incl %edx
23 L2: 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
78 L3: movzbl (%eax),%eax /* unsigned comparison */
79 movzbl (%edx),%edx
80 subl %edx,%eax
81 ret
82 END_STRONG(strcmp)
83 

AltStyle によって変換されたページ (->オリジナル) /