Remove building with NOCRYPTO option
[minix.git] / lib / libc / arch / i386 / string / strncmp.S
blob12be5b79141e10480cb5ea53cd5353a46d6c087b
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.15 2014/05/23 02:34:19 uebayasi 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         pushl   %ebx
20         movl    8(%esp),%eax
21         movl    12(%esp),%ecx
22         movl    16(%esp),%edx
23         testl   %edx,%edx
24         jmp     L2                      /* Jump into the loop! */
26         _ALIGN_TEXT,0x90
27 L1:     incl    %eax
28         incl    %ecx
29         decl    %edx
30 L2:     jz      L4                      /* strings are equal */
31         movb    (%eax),%bl
32         testb   %bl,%bl
33         jz      L3
34         cmpb    %bl,(%ecx)
35         jne     L3
37         incl    %eax
38         incl    %ecx
39         decl    %edx
40         jz      L4
41         movb    (%eax),%bl
42         testb   %bl,%bl
43         jz      L3
44         cmpb    %bl,(%ecx)
45         jne     L3
47         incl    %eax
48         incl    %ecx
49         decl    %edx
50         jz      L4
51         movb    (%eax),%bl
52         testb   %bl,%bl
53         jz      L3
54         cmpb    %bl,(%ecx)
55         jne     L3
57         incl    %eax
58         incl    %ecx
59         decl    %edx
60         jz      L4
61         movb    (%eax),%bl
62         testb   %bl,%bl
63         jz      L3
64         cmpb    %bl,(%ecx)
65         jne     L3
67         incl    %eax
68         incl    %ecx
69         decl    %edx
70         jz      L4
71         movb    (%eax),%bl
72         testb   %bl,%bl
73         jz      L3
74         cmpb    %bl,(%ecx)
75         jne     L3
77         incl    %eax
78         incl    %ecx
79         decl    %edx
80         jz      L4
81         movb    (%eax),%bl
82         testb   %bl,%bl
83         jz      L3
84         cmpb    %bl,(%ecx)
85         jne     L3
87         incl    %eax
88         incl    %ecx
89         decl    %edx
90         jz      L4
91         movb    (%eax),%bl
92         testb   %bl,%bl
93         jz      L3
94         cmpb    %bl,(%ecx)
95         jne     L3
97         incl    %eax
98         incl    %ecx
99         decl    %edx
100         jz      L4
101         movb    (%eax),%bl
102         testb   %bl,%bl
103         jz      L3
104         cmpb    %bl,(%ecx)
105         je      L1
107         _ALIGN_TEXT,0x90
108 L3:     movzbl  (%eax),%eax             /* unsigned comparison */
109         movzbl  (%ecx),%ecx
110         subl    %ecx,%eax
111         popl    %ebx
112         ret
113         _ALIGN_TEXT,0x90
114 L4:     xorl    %eax,%eax
115         popl    %ebx
116         ret
117 END(strncmp)