xref: /openbsd-src/lib/libc/arch/amd64/string/ffs.S (revision 631951aab24dc7dce7719dfa2487185ea5ef120f)
1*631951aaSmortimer/*	$OpenBSD: ffs.S,v 1.6 2018/07/03 23:14:05 mortimer Exp $	*/
2118f6189Smickey/*
3118f6189Smickey * Written by J.T. Conklin <jtc@netbsd.org>.
4118f6189Smickey * Public domain.
5118f6189Smickey * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com>
6118f6189Smickey */
7118f6189Smickey
8b4551fdeSguenther#include "DEFS.h"
9118f6189Smickey
10118f6189SmickeyENTRY(ffs)
11*631951aaSmortimer	RETGUARD_SETUP(ffs, r11)
12118f6189Smickey	bsfl	%edi,%eax
13118f6189Smickey	jz	L1	 		/* ZF is set if all bits are 0 */
14118f6189Smickey	incl	%eax			/* bits numbered from 1, not 0 */
15*631951aaSmortimer	jmp L2
16118f6189Smickey
17118f6189Smickey	_ALIGN_TEXT
18118f6189SmickeyL1:	xorl	%eax,%eax		/* clear result */
19*631951aaSmortimerL2:	RETGUARD_CHECK(ffs, r11)
20118f6189Smickey	ret
21ae3cb403SguentherEND(ffs)
22ae3cb403Sguenther.protected ffs
23