Path: blob/main/lib/libc/stdbit/stdc_first_leading_zero.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_zero_uc(unsigned char x)11{12const int offset = UINT_WIDTH - UCHAR_WIDTH;1314if (x == UCHAR_MAX)15return (0);1617return (__builtin_clz(~(unsigned int)x << offset) + 1);18}1920unsigned int21stdc_first_leading_zero_us(unsigned short x)22{23const int offset = UINT_WIDTH - USHRT_WIDTH;2425if (x == USHRT_MAX)26return (0);2728return (__builtin_clz(~(unsigned int)x << offset) + 1);29}3031unsigned int32stdc_first_leading_zero_ui(unsigned int x)33{34if (x == ~0U)35return (0);3637return (__builtin_clz(~x) + 1);38}3940unsigned int41stdc_first_leading_zero_ul(unsigned long x)42{43if (x == ~0UL)44return (0);4546return (__builtin_clzl(~x) + 1);47}4849unsigned int50stdc_first_leading_zero_ull(unsigned long long x)51{52if (x == ~0ULL)53return (0);5455return (__builtin_clzll(~x) + 1);56}575859