xref: /openbsd-src/lib/libc/arch/amd64/string/memchr.S (revision 631951aab24dc7dce7719dfa2487185ea5ef120f)
15b859c19Sderaadt/*
25b859c19Sderaadt * Written by J.T. Conklin <jtc@netbsd.org>.
35b859c19Sderaadt * Public domain.
45b859c19Sderaadt * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
55b859c19Sderaadt */
65b859c19Sderaadt
7b4551fdeSguenther#include "DEFS.h"
85b859c19Sderaadt
95b859c19SderaadtENTRY(memchr)
10*631951aaSmortimer	RETGUARD_SETUP(memchr, r11)
115b859c19Sderaadt	movb	%sil,%al		/* set character to search for */
125b859c19Sderaadt	movq	%rdx,%rcx		/* set length of search */
135b859c19Sderaadt	testq	%rcx,%rcx		/* test for len == 0 */
145b859c19Sderaadt	jz	L1
155b859c19Sderaadt	cld				/* set search forward */
165b859c19Sderaadt	repne				/* search! */
175b859c19Sderaadt	scasb
185b859c19Sderaadt	jne	L1			/* scan failed, return null */
195b859c19Sderaadt	leaq	-1(%rdi),%rax		/* adjust result of scan */
20*631951aaSmortimer	jmp L2
215b859c19SderaadtL1:	xorq	%rax,%rax
22*631951aaSmortimerL2:	RETGUARD_CHECK(memchr, r11)
235b859c19Sderaadt	ret
249b9d2a55SguentherEND_STRONG(memchr)
25