Annotation of sys/lib/libkern/arch/amd64/strcmp.S, Revision 1.1.1.1
1.1 nbrk 1: /*
2: * Written by J.T. Conklin <jtc@netbsd.org>.
3: * Public domain.
4: * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
5: */
6:
7: #include <machine/asm.h>
8:
9: #if defined(LIBC_SCCS)
10: RCSID("$NetBSD: strcmp.S,v 1.1 2001/06/19 00:22:47 fvdl Exp $")
11: #endif
12:
13: /*
14: * NOTE: I've unrolled the loop eight times: large enough to make a
15: * significant difference, and small enough not to totally trash the
16: * cache.
17: */
18:
19: ENTRY(strcmp)
20: jmp L2 /* Jump into the loop. */
21:
22: L1: incq %rdi
23: incq %rsi
24: L2: movb (%rdi),%cl
25: testb %cl,%cl /* null terminator */
26: jz L3
27: cmpb %cl,(%rsi) /* chars match */
28: jne L3
29:
30: incq %rdi
31: incq %rsi
32: movb (%rdi),%cl
33: testb %cl,%cl
34: jz L3
35: cmpb %cl,(%rsi)
36: jne L3
37:
38: incq %rdi
39: incq %rsi
40: movb (%rdi),%cl
41: testb %cl,%cl
42: jz L3
43: cmpb %cl,(%rsi)
44: jne L3
45:
46: incq %rdi
47: incq %rsi
48: movb (%rdi),%cl
49: testb %cl,%cl
50: jz L3
51: cmpb %cl,(%rsi)
52: jne L3
53:
54: incq %rdi
55: incq %rsi
56: movb (%rdi),%cl
57: testb %cl,%cl
58: jz L3
59: cmpb %cl,(%rsi)
60: jne L3
61:
62: incq %rdi
63: incq %rsi
64: movb (%rdi),%cl
65: testb %cl,%cl
66: jz L3
67: cmpb %cl,(%rsi)
68: jne L3
69:
70: incq %rdi
71: incq %rsi
72: movb (%rdi),%cl
73: testb %cl,%cl
74: jz L3
75: cmpb %cl,(%rsi)
76: jne L3
77:
78: incq %rdi
79: incq %rsi
80: movb (%rdi),%cl
81: testb %cl,%cl
82: jz L3
83: cmpb %cl,(%rsi)
84: je L1
85: L3: movzbl (%rdi),%eax /* unsigned comparison */
86: movzbl (%rsi),%edx
87: subl %edx,%eax
88: ret
CVSweb