1 /* $OpenBSD: strcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */ 2 /* 3 * Written by J.T. Conklin <jtc (at) netbsd.org>. 4 * Public domain. 5 */ 6 7 #include <machine/asm.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