1 /* 2 * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 #include <limits.h> 8 #include <stdbit.h> 9 10 unsigned int stdc_count_zeros_uc(unsigned char x)11stdc_count_zeros_uc(unsigned char x) 12 { 13 return (__builtin_popcount(x ^ UCHAR_MAX)); 14 } 15 16 unsigned int stdc_count_zeros_us(unsigned short x)17stdc_count_zeros_us(unsigned short x) 18 { 19 return (__builtin_popcount(x ^ USHRT_MAX)); 20 } 21 22 unsigned int stdc_count_zeros_ui(unsigned int x)23stdc_count_zeros_ui(unsigned int x) 24 { 25 return (__builtin_popcount(~x)); 26 } 27 28 unsigned int stdc_count_zeros_ul(unsigned long x)29stdc_count_zeros_ul(unsigned long x) 30 { 31 return (__builtin_popcountl(~x)); 32 } 33 34 unsigned int stdc_count_zeros_ull(unsigned long long x)35stdc_count_zeros_ull(unsigned long long x) 36 { 37 return (__builtin_popcountll(~x)); 38 } 39