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 9*6296500aSRobert Clausecker unsigned int stdc_first_trailing_one_uc(unsigned char x)10*6296500aSRobert Clauseckerstdc_first_trailing_one_uc(unsigned char x) 11*6296500aSRobert Clausecker { 12*6296500aSRobert Clausecker if (x == 0) 13*6296500aSRobert Clausecker return (0); 14*6296500aSRobert Clausecker 15*6296500aSRobert Clausecker return (__builtin_ctz(x) + 1); 16*6296500aSRobert Clausecker } 17*6296500aSRobert Clausecker 18*6296500aSRobert Clausecker unsigned int stdc_first_trailing_one_us(unsigned short x)19*6296500aSRobert Clauseckerstdc_first_trailing_one_us(unsigned short x) 20*6296500aSRobert Clausecker { 21*6296500aSRobert Clausecker if (x == 0) 22*6296500aSRobert Clausecker return (0); 23*6296500aSRobert Clausecker 24*6296500aSRobert Clausecker return (__builtin_ctz(x) + 1); 25*6296500aSRobert Clausecker } 26*6296500aSRobert Clausecker 27*6296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ui(unsigned int x)28*6296500aSRobert Clauseckerstdc_first_trailing_one_ui(unsigned int x) 29*6296500aSRobert Clausecker { 30*6296500aSRobert Clausecker if (x == 0) 31*6296500aSRobert Clausecker return (0); 32*6296500aSRobert Clausecker 33*6296500aSRobert Clausecker return (__builtin_ctz(x) + 1); 34*6296500aSRobert Clausecker } 35*6296500aSRobert Clausecker 36*6296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ul(unsigned long x)37*6296500aSRobert Clauseckerstdc_first_trailing_one_ul(unsigned long x) 38*6296500aSRobert Clausecker { 39*6296500aSRobert Clausecker if (x == 0) 40*6296500aSRobert Clausecker return (0); 41*6296500aSRobert Clausecker 42*6296500aSRobert Clausecker return (__builtin_ctzl(x) + 1); 43*6296500aSRobert Clausecker } 44*6296500aSRobert Clausecker 45*6296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ull(unsigned long long x)46*6296500aSRobert Clauseckerstdc_first_trailing_one_ull(unsigned long long x) 47*6296500aSRobert Clausecker { 48*6296500aSRobert Clausecker if (x == 0) 49*6296500aSRobert Clausecker return (0); 50*6296500aSRobert Clausecker 51*6296500aSRobert Clausecker return (__builtin_ctzll(x) + 1); 52*6296500aSRobert Clausecker } 53