xref: /netbsd-src/common/lib/libc/string/ffsl.c (revision 84f46203151c2c6d83d47d90459178b6fd6d1a57)
1*84f46203Schristos /*	$NetBSD: ffsl.c,v 1.2 2024/11/07 18:12:09 christos Exp $	*/
2235f3e57Sriastradh 
3235f3e57Sriastradh /*-
4235f3e57Sriastradh  * Copyright (c) 2024 The NetBSD Foundation, Inc.
5235f3e57Sriastradh  * All rights reserved.
6235f3e57Sriastradh  *
7235f3e57Sriastradh  * Redistribution and use in source and binary forms, with or without
8235f3e57Sriastradh  * modification, are permitted provided that the following conditions
9235f3e57Sriastradh  * are met:
10235f3e57Sriastradh  * 1. Redistributions of source code must retain the above copyright
11235f3e57Sriastradh  *    notice, this list of conditions and the following disclaimer.
12235f3e57Sriastradh  * 2. Redistributions in binary form must reproduce the above copyright
13235f3e57Sriastradh  *    notice, this list of conditions and the following disclaimer in the
14235f3e57Sriastradh  *    documentation and/or other materials provided with the distribution.
15235f3e57Sriastradh  *
16235f3e57Sriastradh  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17235f3e57Sriastradh  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18235f3e57Sriastradh  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19235f3e57Sriastradh  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20235f3e57Sriastradh  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21235f3e57Sriastradh  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22235f3e57Sriastradh  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23235f3e57Sriastradh  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24235f3e57Sriastradh  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25235f3e57Sriastradh  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26235f3e57Sriastradh  * POSSIBILITY OF SUCH DAMAGE.
27235f3e57Sriastradh  */
28235f3e57Sriastradh 
29235f3e57Sriastradh #include <sys/cdefs.h>
30*84f46203Schristos __RCSID("$NetBSD: ffsl.c,v 1.2 2024/11/07 18:12:09 christos Exp $");
31235f3e57Sriastradh 
32235f3e57Sriastradh #include <sys/bitops.h>
33235f3e57Sriastradh 
34235f3e57Sriastradh #include <limits.h>
35235f3e57Sriastradh #include <strings.h>
36235f3e57Sriastradh 
37235f3e57Sriastradh #undef	ffsl			/* paranoia */
38235f3e57Sriastradh 
39235f3e57Sriastradh int
40235f3e57Sriastradh ffsl(long x)
41235f3e57Sriastradh {
42235f3e57Sriastradh 
43235f3e57Sriastradh #ifdef _LP64
44235f3e57Sriastradh 	__CTASSERT(CHAR_BIT*sizeof(x) == 64);
45235f3e57Sriastradh 	return ffs64(x);
46235f3e57Sriastradh #else
47235f3e57Sriastradh 	__CTASSERT(CHAR_BIT*sizeof(x) == 32);
48*84f46203Schristos 	return ffs32((uint32_t)x);
49235f3e57Sriastradh #endif
50235f3e57Sriastradh }
51