memcmp.S revision 1.1
1/* 2 * Written by J.T. Conklin <jtc@netbsd.org>. 3 * Public domain. 4 * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com> 5 */ 6 7#include <machine/asm.h> 8 9#if defined(LIBC_SCCS) 10 RCSID("$NetBSD: memcmp.S,v 1.1 2001/06/19 00:22:46 fvdl Exp $") 11#endif 12 13ENTRY(memcmp) 14 cld /* set compare direction forward */ 15 movq %rdx,%rcx /* compare by longs */ 16 shrq $3,%rcx 17 repe 18 cmpsq 19 jne L5 /* do we match so far? */ 20 21 movq %rdx,%rcx /* compare remainder by bytes */ 22 andq $7,%rcx 23 repe 24 cmpsb 25 jne L6 /* do we match? */ 26 27 xorl %eax,%eax /* we match, return zero */ 28 ret 29 30L5: movl $8,%ecx /* We know that one of the next */ 31 subq %rcx,%rdi /* eight pairs of bytes do not */ 32 subq %rcx,%rsi /* match. */ 33 repe 34 cmpsb 35L6: xorl %eax,%eax /* Perform unsigned comparison */ 36 movb -1(%rdi),%al 37 xorl %edx,%edx 38 movb -1(%rsi),%dl 39 subl %edx,%eax 40 ret 41