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