/* $OpenBSD: strcmp.S,v 1.3 2005/08/07 11:30:38 espie Exp $ */ /* * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ #include <machine/asm.h> /* * NOTE: I've unrolled the loop eight times: large enough to make a * significant difference, and small enough not to totally trash the * cache. */ ENTRY(strcmp) movl 0x04(%esp),%eax movl 0x08(%esp),%edx jmp L2 /* Jump into the loop! */ .align 2,0x90 L1: incl %eax incl %edx L2: movb (%eax),%cl testb %cl,%cl /* null terminator??? */ jz L3 cmpb %cl,(%edx) /* chars match??? */ jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) jne L3 incl %eax incl %edx movb (%eax),%cl testb %cl,%cl jz L3 cmpb %cl,(%edx) je L1 .align 2, 0x90 L3: movzbl (%eax),%eax /* unsigned comparison */ movzbl (%edx),%edx subl %edx,%eax ret END(strcmp)