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