/* $OpenBSD: memcmp.S,v 1.4 2005/08/07 11:30:38 espie Exp $ */ /* * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ #include <machine/asm.h> ENTRY(memcmp) pushl %edi pushl %esi movl 12(%esp),%edi movl 16(%esp),%esi cld /* set compare direction forward */ movl 20(%esp),%ecx /* compare by words */ shrl $2,%ecx repe cmpsl jne L5 /* do we match so far? */ movl 20(%esp),%ecx /* compare remainder by bytes */ andl $3,%ecx repe cmpsb jne L6 /* do we match? */ xorl %eax,%eax /* we match, return zero */ popl %esi popl %edi ret L5: movl $4,%ecx /* We know that one of the next */ subl %ecx,%edi /* four pairs of bytes do not */ subl %ecx,%esi /* match. */ repe cmpsb L6: movzbl -1(%edi),%eax /* Perform unsigned comparison */ movzbl -1(%esi),%edx subl %edx,%eax popl %esi popl %edi ret END(memcmp)