1*6296500aSRobert Clausecker /* 2*6296500aSRobert Clausecker * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 3*6296500aSRobert Clausecker * 4*6296500aSRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause 5*6296500aSRobert Clausecker */ 6*6296500aSRobert Clausecker 7*6296500aSRobert Clausecker #include <stdbit.h> 8*6296500aSRobert Clausecker #include <stdbool.h> 9*6296500aSRobert Clausecker 10*6296500aSRobert Clausecker bool stdc_has_single_bit_uc(unsigned char x)11*6296500aSRobert Clauseckerstdc_has_single_bit_uc(unsigned char x) 12*6296500aSRobert Clausecker { 13*6296500aSRobert Clausecker return (x != 0 && (x & x - 1) == 0); 14*6296500aSRobert Clausecker } 15*6296500aSRobert Clausecker 16*6296500aSRobert Clausecker bool stdc_has_single_bit_us(unsigned short x)17*6296500aSRobert Clauseckerstdc_has_single_bit_us(unsigned short x) 18*6296500aSRobert Clausecker { 19*6296500aSRobert Clausecker return (x != 0 && (x & x - 1) == 0); 20*6296500aSRobert Clausecker } 21*6296500aSRobert Clausecker 22*6296500aSRobert Clausecker bool stdc_has_single_bit_ui(unsigned int x)23*6296500aSRobert Clauseckerstdc_has_single_bit_ui(unsigned int x) 24*6296500aSRobert Clausecker { 25*6296500aSRobert Clausecker return (x != 0 && (x & x - 1) == 0); 26*6296500aSRobert Clausecker } 27*6296500aSRobert Clausecker 28*6296500aSRobert Clausecker bool stdc_has_single_bit_ul(unsigned long x)29*6296500aSRobert Clauseckerstdc_has_single_bit_ul(unsigned long x) 30*6296500aSRobert Clausecker { 31*6296500aSRobert Clausecker return (x != 0 && (x & x - 1) == 0); 32*6296500aSRobert Clausecker } 33*6296500aSRobert Clausecker 34*6296500aSRobert Clausecker bool stdc_has_single_bit_ull(unsigned long long x)35*6296500aSRobert Clauseckerstdc_has_single_bit_ull(unsigned long long x) 36*6296500aSRobert Clausecker { 37*6296500aSRobert Clausecker return (x != 0 && (x & x - 1) == 0); 38*6296500aSRobert Clausecker } 39