1f5df1827Smickey/* 2f5df1827Smickey * Written by J.T. Conklin <jtc@netbsd.org>. 3f5df1827Smickey * Public domain. 4f5df1827Smickey * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com> 5f5df1827Smickey */ 6f5df1827Smickey 7f5df1827Smickey#include <machine/asm.h> 8f5df1827Smickey 9f5df1827SmickeyENTRY(memchr) 101d66f0a0Smortimer RETGUARD_SETUP(memchr, r11) 11f5df1827Smickey movb %sil,%al /* set character to search for */ 12f5df1827Smickey movq %rdx,%rcx /* set length of search */ 13f5df1827Smickey testq %rcx,%rcx /* test for len == 0 */ 14*5cd8e87fSguenther jz 1f 15f5df1827Smickey repne /* search! */ 16f5df1827Smickey scasb 17*5cd8e87fSguenther jne 1f /* scan failed, return null */ 18f5df1827Smickey leaq -1(%rdi),%rax /* adjust result of scan */ 19*5cd8e87fSguenther jmp 2f 20*5cd8e87fSguenther1: xorq %rax,%rax 21*5cd8e87fSguenther2: RETGUARD_CHECK(memchr, r11) 22f5df1827Smickey ret 23fc541c5dSguenther lfence 24*5cd8e87fSguentherEND(memchr) 25