Fix mdoc(7)/man(7) mix up.
[netbsd-mini2440.git] / lib / libc / arch / x86_64 / string / strncmp.S
blob5c02c0856dcf25514f106b493781ddf3a34e7642
1 /*
2  * Written by J.T. Conklin <jtc@NetBSD.org>.
3  * Public domain.
4  */
6 #include <machine/asm.h>
8 #if defined(LIBC_SCCS)
9         RCSID("$NetBSD: strncmp.S,v 1.2 2003/07/26 19:24:40 salo Exp $")
10 #endif
13  * NOTE: I've unrolled the loop eight times: large enough to make a
14  * significant difference, and small enough not to totally trash the
15  * cache.
16  */
18 ENTRY(strncmp)
19         testq   %rdx,%rdx
20         jmp     L2                      /* Jump into the loop! */
22 L1:     incq    %rdi
23         incq    %rsi
24         decq    %rdx
25 L2:     jz      L4                      /* strings are equal */
26         movb    (%rdi),%al
27         testb   %al,%al
28         jz      L3
29         cmpb    %al,(%rsi)
30         jne     L3
32         incq    %rdi
33         incq    %rsi
34         decq    %rdx
35         jz      L4
36         movb    (%rdi),%al
37         testb   %al,%al
38         jz      L3
39         cmpb    %al,(%rsi)
40         jne     L3
42         incq    %rdi
43         incq    %rsi
44         decq    %rdx
45         jz      L4
46         movb    (%rdi),%al
47         testb   %al,%al
48         jz      L3
49         cmpb    %al,(%rsi)
50         jne     L3
52         incq    %rdi
53         incq    %rsi
54         decq    %rdx
55         jz      L4
56         movb    (%rdi),%al
57         testb   %al,%al
58         jz      L3
59         cmpb    %al,(%rsi)
60         jne     L3
62         incq    %rdi
63         incq    %rsi
64         decq    %rdx
65         jz      L4
66         movb    (%rdi),%al
67         testb   %al,%al
68         jz      L3
69         cmpb    %al,(%rsi)
70         jne     L3
72         incq    %rdi
73         incq    %rsi
74         decq    %rdx
75         jz      L4
76         movb    (%rdi),%al
77         testb   %al,%al
78         jz      L3
79         cmpb    %al,(%rsi)
80         jne     L3
82         incq    %rdi
83         incq    %rsi
84         decq    %rdx
85         jz      L4
86         movb    (%rdi),%al
87         testb   %al,%al
88         jz      L3
89         cmpb    %al,(%rsi)
90         jne     L3
92         incq    %rdi
93         incq    %rsi
94         decq    %rdx
95         jz      L4
96         movb    (%rdi),%al
97         testb   %al,%al
98         jz      L3
99         cmpb    %al,(%rsi)
100         je      L1
102 L3:     movzbl  (%rdi),%eax             /* unsigned comparison */
103         movzbl  (%rsi),%ecx
104         subl    %ecx,%eax
105         ret
106 L4:     xorl    %eax,%eax
107         ret