Annotation of sys/lib/libkern/arch/i386/strcmp.S, Revision 1.1
1.1 ! nbrk 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:
! 16: ENTRY(strcmp)
! 17: movl 0x04(%esp),%eax
! 18: movl 0x08(%esp),%edx
! 19: jmp L2 /* Jump into the loop! */
! 20:
! 21: .align 2,0x90
! 22: L1: incl %eax
! 23: incl %edx
! 24: L2: 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
! 79: L3: movzbl (%eax),%eax /* unsigned comparison */
! 80: movzbl (%edx),%edx
! 81: subl %edx,%eax
! 82: ret
CVSweb