xref: /openbsd-src/lib/libc/arch/i386/string/bcmp.S (revision 447c6881e52f329a5283ae895130c5e2377d00c6)
1*447c6881Stb/*	$OpenBSD: bcmp.S,v 1.6 2022/12/04 08:22:13 tb Exp $ */
2df930be7Sderaadt/*
3df930be7Sderaadt * Written by J.T. Conklin <jtc@netbsd.org>.
4df930be7Sderaadt * Public domain.
5df930be7Sderaadt */
6df930be7Sderaadt
7ea6088e7Sguenther#include "DEFS.h"
8df930be7Sderaadt
9*447c6881StbENTRY_NB(bcmp)
10df930be7Sderaadt	pushl	%edi
11df930be7Sderaadt	pushl	%esi
12df930be7Sderaadt	movl	12(%esp),%edi
13df930be7Sderaadt	movl	16(%esp),%esi
14df930be7Sderaadt	xorl	%eax,%eax		/* clear return value */
15df930be7Sderaadt	cld				/* set compare direction forward */
16df930be7Sderaadt
17df930be7Sderaadt	movl	20(%esp),%ecx		/* compare by words */
18df930be7Sderaadt	shrl	$2,%ecx
19df930be7Sderaadt	repe
20df930be7Sderaadt	cmpsl
21df930be7Sderaadt	jne	L1
22df930be7Sderaadt
23df930be7Sderaadt	movl	20(%esp),%ecx		/* compare remainder by bytes */
24df930be7Sderaadt	andl	$3,%ecx
25df930be7Sderaadt	repe
26df930be7Sderaadt	cmpsb
27df930be7Sderaadt	je	L2
28df930be7Sderaadt
29df930be7SderaadtL1:	incl	%eax
30df930be7SderaadtL2:	popl	%esi
31df930be7Sderaadt	popl	%edi
32df930be7Sderaadt	ret
339b9d2a55SguentherEND_WEAK(bcmp)
34