1*2fb8cbc6SRobert Clausecker /* 2*2fb8cbc6SRobert Clausecker * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 3*2fb8cbc6SRobert Clausecker * 4*2fb8cbc6SRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause 5*2fb8cbc6SRobert Clausecker */ 6*2fb8cbc6SRobert Clausecker 7*2fb8cbc6SRobert Clausecker #define FUNCSTEM stdc_first_leading_zero 8*2fb8cbc6SRobert Clausecker #define MKREFFUNC(name, type) \ 9*2fb8cbc6SRobert Clausecker static unsigned \ 10*2fb8cbc6SRobert Clausecker name(type value) \ 11*2fb8cbc6SRobert Clausecker { \ 12*2fb8cbc6SRobert Clausecker type bit = 1; \ 13*2fb8cbc6SRobert Clausecker unsigned pos = 1; \ 14*2fb8cbc6SRobert Clausecker \ 15*2fb8cbc6SRobert Clausecker value = ~value; \ 16*2fb8cbc6SRobert Clausecker if (value == 0) \ 17*2fb8cbc6SRobert Clausecker return (0); \ 18*2fb8cbc6SRobert Clausecker \ 19*2fb8cbc6SRobert Clausecker while ((type)(bit << 1) != 0) \ 20*2fb8cbc6SRobert Clausecker bit <<= 1; \ 21*2fb8cbc6SRobert Clausecker \ 22*2fb8cbc6SRobert Clausecker while ((bit & value) == 0) { \ 23*2fb8cbc6SRobert Clausecker bit >>= 1; \ 24*2fb8cbc6SRobert Clausecker pos++; \ 25*2fb8cbc6SRobert Clausecker } \ 26*2fb8cbc6SRobert Clausecker \ 27*2fb8cbc6SRobert Clausecker return (pos); \ 28*2fb8cbc6SRobert Clausecker } 29*2fb8cbc6SRobert Clausecker 30*2fb8cbc6SRobert Clausecker #include "stdbit-test-framework.c" 31