aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/tests/stdbit/stdc_leading_ones_test.c
blob: 616b3d5e627973c82c266d3dd7144f1acaf5eaf9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
 * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#define FUNCSTEM stdc_leading_ones
#define MKREFFUNC(name, type)						\
	static unsigned							\
	name(type value) 						\
	{ 								\
		type bit = 1;						\
		unsigned count = 0;					\
									\
		while ((type)(bit << 1) != 0)				\
			bit <<= 1;					\
									\
		while (bit != 0 && (bit & value) != 0) {		\
			bit >>= 1;					\
			count++;					\
		}							\
									\
		return (count);						\
	}

#include "stdbit-test-framework.c"