16296500aSRobert Clausecker /* 26296500aSRobert Clausecker * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 36296500aSRobert Clausecker * 46296500aSRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause 56296500aSRobert Clausecker */ 66296500aSRobert Clausecker 76296500aSRobert Clausecker #include <limits.h> 86296500aSRobert Clausecker #include <stdbit.h> 96296500aSRobert Clausecker 106296500aSRobert Clausecker unsigned int stdc_bit_width_uc(unsigned char x)116296500aSRobert Clauseckerstdc_bit_width_uc(unsigned char x) 126296500aSRobert Clausecker { 136296500aSRobert Clausecker if (x == 0) 146296500aSRobert Clausecker return (0); 156296500aSRobert Clausecker 166296500aSRobert Clausecker return (UINT_WIDTH - __builtin_clz(x)); 176296500aSRobert Clausecker } 186296500aSRobert Clausecker 196296500aSRobert Clausecker unsigned int stdc_bit_width_us(unsigned short x)206296500aSRobert Clauseckerstdc_bit_width_us(unsigned short x) 216296500aSRobert Clausecker { 226296500aSRobert Clausecker if (x == 0) 236296500aSRobert Clausecker return (0); 246296500aSRobert Clausecker 256296500aSRobert Clausecker return (UINT_WIDTH - __builtin_clz(x)); 266296500aSRobert Clausecker } 276296500aSRobert Clausecker 286296500aSRobert Clausecker unsigned int stdc_bit_width_ui(unsigned int x)296296500aSRobert Clauseckerstdc_bit_width_ui(unsigned int x) 306296500aSRobert Clausecker { 316296500aSRobert Clausecker if (x == 0) 326296500aSRobert Clausecker return (0); 336296500aSRobert Clausecker 346296500aSRobert Clausecker return (UINT_WIDTH - __builtin_clz(x)); 356296500aSRobert Clausecker } 366296500aSRobert Clausecker 376296500aSRobert Clausecker unsigned int stdc_bit_width_ul(unsigned long x)386296500aSRobert Clauseckerstdc_bit_width_ul(unsigned long x) 396296500aSRobert Clausecker { 406296500aSRobert Clausecker if (x == 0) 416296500aSRobert Clausecker return (0); 426296500aSRobert Clausecker 436296500aSRobert Clausecker return (ULONG_WIDTH - __builtin_clzl(x)); 446296500aSRobert Clausecker } 456296500aSRobert Clausecker 466296500aSRobert Clausecker unsigned int stdc_bit_width_ull(unsigned long long x)476296500aSRobert Clauseckerstdc_bit_width_ull(unsigned long long x) 486296500aSRobert Clausecker { 496296500aSRobert Clausecker if (x == 0) 506296500aSRobert Clausecker return (0); 516296500aSRobert Clausecker 526296500aSRobert Clausecker return (ULLONG_WIDTH - __builtin_clzll(x)); 536296500aSRobert Clausecker } 54