xref: /openbsd-src/lib/libc/arch/i386/string/memchr.S (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
1/*
2 * Written by J.T. Conklin <jtc@netbsd.org>.
3 * Public domain.
4 */
5
6#include <machine/asm.h>
7
8#if defined(LIBC_SCCS)
9	.text
10	.asciz "$OpenBSD: memchr.S,v 1.2 1996/08/19 08:13:01 tholo Exp $"
11#endif
12
13ENTRY(memchr)
14	pushl	%edi
15	movl	8(%esp),%edi		/* string address */
16	movl	12(%esp),%eax		/* set character to search for */
17	movl	16(%esp),%ecx		/* set length of search */
18	testl	%ecx,%ecx		/* test for len == 0 */
19	jz	L1
20	cld				/* set search forward */
21	repne				/* search! */
22	scasb
23	jne	L1			/* scan failed, return null */
24	leal	-1(%edi),%eax		/* adjust result of scan */
25	popl	%edi
26	ret
27	.align 2,0x90
28L1:	xorl	%eax,%eax
29	popl	%edi
30	ret
31