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