diff --git a/libc/arch-x86_64/string/ffs.S b/libc/arch-x86_64/string/ffs.S new file mode 100644 index 000000000..2666bc49e --- /dev/null +++ b/libc/arch-x86_64/string/ffs.S @@ -0,0 +1,18 @@ +/* $OpenBSD: ffs.S,v 1.1 2004/01/28 01:44:45 mickey Exp $ */ +/* + * Written by J.T. Conklin . + * Public domain. + * Adapted for NetBSD/x86_64 by Frank van der Linden + */ + +#include + +ENTRY(ffs) + bsfl %edi,%eax + jz L1 /* ZF is set if all bits are 0 */ + incl %eax /* bits numbered from 1, not 0 */ + ret + + _ALIGN_TEXT +L1: xorl %eax,%eax /* clear result */ + ret diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk index 244eb5690..b17b1384e 100644 --- a/libc/arch-x86_64/x86_64.mk +++ b/libc/arch-x86_64/x86_64.mk @@ -9,6 +9,8 @@ _LIBC_ARCH_COMMON_SRC_FILES := \ arch-x86_64/bionic/__set_tls.c \ arch-x86_64/bionic/sigsetjmp.S \ arch-x86_64/bionic/syscall.S \ + arch-x86_64/string/ffs.S \ + string/memcmp16.c \ _LIBC_ARCH_STATIC_SRC_FILES := \ bionic/dl_iterate_phdr_static.c \