1b6cbf720SGianluca Guida/* 2b6cbf720SGianluca Guida * Written by J.T. Conklin <jtc@NetBSD.org>. 3b6cbf720SGianluca Guida * Public domain. 4b6cbf720SGianluca Guida */ 5b6cbf720SGianluca Guida 6b6cbf720SGianluca Guida#include <machine/asm.h> 7b6cbf720SGianluca Guida 8b6cbf720SGianluca Guida#if defined(LIBC_SCCS) 9*0a6a1f1dSLionel Sambuc RCSID("$NetBSD: memcmp.S,v 1.3 2014/03/22 19:38:46 jakllsch Exp $") 10b6cbf720SGianluca Guida#endif 11b6cbf720SGianluca Guida 12b6cbf720SGianluca GuidaENTRY(memcmp) 13b6cbf720SGianluca Guida pushl %edi 14b6cbf720SGianluca Guida pushl %esi 15b6cbf720SGianluca Guida movl 12(%esp),%edi 16b6cbf720SGianluca Guida movl 16(%esp),%esi 17b6cbf720SGianluca Guida 18b6cbf720SGianluca Guida movl 20(%esp),%ecx /* compare by words */ 19b6cbf720SGianluca Guida shrl $2,%ecx 20b6cbf720SGianluca Guida repe 21b6cbf720SGianluca Guida cmpsl 22b6cbf720SGianluca Guida jne L5 /* do we match so far? */ 23b6cbf720SGianluca Guida 24b6cbf720SGianluca Guida movl 20(%esp),%ecx /* compare remainder by bytes */ 25b6cbf720SGianluca Guida andl $3,%ecx 26b6cbf720SGianluca Guida repe 27b6cbf720SGianluca Guida cmpsb 28b6cbf720SGianluca Guida jne L6 /* do we match? */ 29b6cbf720SGianluca Guida 30b6cbf720SGianluca Guida xorl %eax,%eax /* we match, return zero */ 31b6cbf720SGianluca Guida popl %esi 32b6cbf720SGianluca Guida popl %edi 33b6cbf720SGianluca Guida ret 34b6cbf720SGianluca Guida 35b6cbf720SGianluca GuidaL5: movl $4,%ecx /* We know that one of the next */ 36b6cbf720SGianluca Guida subl %ecx,%edi /* four pairs of bytes do not */ 37b6cbf720SGianluca Guida subl %ecx,%esi /* match. */ 38b6cbf720SGianluca Guida repe 39b6cbf720SGianluca Guida cmpsb 40b6cbf720SGianluca GuidaL6: xorl %eax,%eax /* Perform unsigned comparison */ 41b6cbf720SGianluca Guida movb -1(%edi),%al 42b6cbf720SGianluca Guida xorl %edx,%edx 43b6cbf720SGianluca Guida movb -1(%esi),%dl 44b6cbf720SGianluca Guida subl %edx,%eax 45b6cbf720SGianluca Guida popl %esi 46b6cbf720SGianluca Guida popl %edi 47b6cbf720SGianluca Guida ret 48*0a6a1f1dSLionel SambucEND(memcmp) 49