Path: blob/main/lib/libc/stdbit/stdc_first_leading_one.c
96290 views
/*1* Copyright (c) 2025 Robert Clausecker <[email protected]>2*3* SPDX-License-Identifier: BSD-2-Clause4*/56#include <limits.h>7#include <stdbit.h>89unsigned int10stdc_first_leading_one_uc(unsigned char x)11{12const int offset = UINT_WIDTH - UCHAR_WIDTH;1314if (x == 0)15return (0);1617return (__builtin_clz(x << offset) + 1);18}1920unsigned int21stdc_first_leading_one_us(unsigned short x)22{23const int offset = UINT_WIDTH - USHRT_WIDTH;2425if (x == 0)26return (0);2728return (__builtin_clz(x << offset) + 1);29}3031unsigned int32stdc_first_leading_one_ui(unsigned int x)33{34if (x == 0)35return (0);3637return (__builtin_clz(x) + 1);38}3940unsigned int41stdc_first_leading_one_ul(unsigned long x)42{43if (x == 0)44return (0);4546return (__builtin_clzl(x) + 1);47}4849unsigned int50stdc_first_leading_one_ull(unsigned long long x)51{52if (x == 0)53return (0);5455return (__builtin_clzll(x) + 1);56}575859