1/* $OpenBSD: strcmp.S,v 1.2 1996/09/27 06:47:49 mickey Exp $ */ 2 3/* 4 * Written by J.T. Conklin <jtc@netbsd.org>. 5 * Public domain. 6 */ 7 8#include <machine/asm.h> 9 10/* 11 * NOTE: I've unrolled the loop eight times: large enough to make a 12 * significant difference, and small enough not to totally trash the 13 * cache. 14 */ 15 16ENTRY(strcmp) 17 movl 0x04(%esp),%eax 18 movl 0x08(%esp),%edx 19 jmp L2 /* Jump into the loop! */ 20 21 .align 2,0x90 22L1: incl %eax 23 incl %edx 24L2: movb (%eax),%cl 25 testb %cl,%cl /* null terminator??? */ 26 jz L3 27 cmpb %cl,(%edx) /* chars match??? */ 28 jne L3 29 incl %eax 30 incl %edx 31 movb (%eax),%cl 32 testb %cl,%cl 33 jz L3 34 cmpb %cl,(%edx) 35 jne L3 36 incl %eax 37 incl %edx 38 movb (%eax),%cl 39 testb %cl,%cl 40 jz L3 41 cmpb %cl,(%edx) 42 jne L3 43 incl %eax 44 incl %edx 45 movb (%eax),%cl 46 testb %cl,%cl 47 jz L3 48 cmpb %cl,(%edx) 49 jne L3 50 incl %eax 51 incl %edx 52 movb (%eax),%cl 53 testb %cl,%cl 54 jz L3 55 cmpb %cl,(%edx) 56 jne L3 57 incl %eax 58 incl %edx 59 movb (%eax),%cl 60 testb %cl,%cl 61 jz L3 62 cmpb %cl,(%edx) 63 jne L3 64 incl %eax 65 incl %edx 66 movb (%eax),%cl 67 testb %cl,%cl 68 jz L3 69 cmpb %cl,(%edx) 70 jne L3 71 incl %eax 72 incl %edx 73 movb (%eax),%cl 74 testb %cl,%cl 75 jz L3 76 cmpb %cl,(%edx) 77 je L1 78 .align 2, 0x90 79L3: movzbl (%eax),%eax /* unsigned comparison */ 80 movzbl (%edx),%edx 81 subl %edx,%eax 82 ret 83