xref: /freebsd/lib/libc/tests/stdbit/stdc_bit_floor_test.c (revision 2fb8cbc6ef1b3cc6cd60e5db07f8305623f9b044)
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_bit_floor
8*2fb8cbc6SRobert Clausecker #define MKREFFUNC(name, type)						\
9*2fb8cbc6SRobert Clausecker 	static type 							\
10*2fb8cbc6SRobert Clausecker 	name(type value) 						\
11*2fb8cbc6SRobert Clausecker 	{ 								\
12*2fb8cbc6SRobert Clausecker 		type floor = 1;						\
13*2fb8cbc6SRobert Clausecker 									\
14*2fb8cbc6SRobert Clausecker 		if (value == 0)						\
15*2fb8cbc6SRobert Clausecker 			return (0);					\
16*2fb8cbc6SRobert Clausecker 									\
17*2fb8cbc6SRobert Clausecker 		while (value != 1) {					\
18*2fb8cbc6SRobert Clausecker 			floor <<= 1;					\
19*2fb8cbc6SRobert Clausecker 			value >>= 1;					\
20*2fb8cbc6SRobert Clausecker 		}							\
21*2fb8cbc6SRobert Clausecker 									\
22*2fb8cbc6SRobert Clausecker 		return (floor);						\
23*2fb8cbc6SRobert Clausecker 	}
24*2fb8cbc6SRobert Clausecker 
25*2fb8cbc6SRobert Clausecker #include "stdbit-test-framework.c"
26