18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * lib/clz_ctz.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2013 Chanho Min <chanho.min@lge.com> 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * The functions in this file aren't called directly, but are required by 88c2ecf20Sopenharmony_ci * GCC builtins such as __builtin_ctz, and therefore they can't be removed 98c2ecf20Sopenharmony_ci * despite appearing unreferenced in kernel source. 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * __c[lt]z[sd]i2 can be overridden by linking arch-specific versions. 128c2ecf20Sopenharmony_ci */ 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <linux/export.h> 158c2ecf20Sopenharmony_ci#include <linux/kernel.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ciint __weak __ctzsi2(int val); 188c2ecf20Sopenharmony_ciint __weak __ctzsi2(int val) 198c2ecf20Sopenharmony_ci{ 208c2ecf20Sopenharmony_ci return __ffs(val); 218c2ecf20Sopenharmony_ci} 228c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__ctzsi2); 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ciint __weak __clzsi2(int val); 258c2ecf20Sopenharmony_ciint __weak __clzsi2(int val) 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci return 32 - fls(val); 288c2ecf20Sopenharmony_ci} 298c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__clzsi2); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ciint __weak __clzdi2(u64 val); 328c2ecf20Sopenharmony_ciint __weak __clzdi2(u64 val) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci return 64 - fls64(val); 358c2ecf20Sopenharmony_ci} 368c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__clzdi2); 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ciint __weak __ctzdi2(u64 val); 398c2ecf20Sopenharmony_ciint __weak __ctzdi2(u64 val) 408c2ecf20Sopenharmony_ci{ 418c2ecf20Sopenharmony_ci return __ffs64(val); 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__ctzdi2); 44