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