From f78a2bdb6942280053ae99a4c7121d90fb847eb8 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 24 Feb 2025 00:44:18 -0700 Subject: libmisc: macro.h: Add LM_ROUND_DOWN --- libmisc/include/libmisc/macro.h | 1 + 1 file changed, 1 insertion(+) (limited to 'libmisc/include') diff --git a/libmisc/include/libmisc/macro.h b/libmisc/include/libmisc/macro.h index fe61410..149c4bb 100644 --- a/libmisc/include/libmisc/macro.h +++ b/libmisc/include/libmisc/macro.h @@ -19,6 +19,7 @@ #define LM_ARRAY_LEN(ary) (sizeof(ary)/sizeof((ary)[0])) #define LM_CEILDIV(n, d) ( ((n)+(d)-1) / (d) ) #define LM_ROUND_UP(n, d) ( LM_CEILDIV(n, d) * (d) ) /** Return `n` rounded up to the nearest multiple of `d` */ +#define LM_ROUND_DOWN(n, d) ( ((n)/(d)) * (d) ) /** Return `n` rounded down to the nearest multiple of `d` */ #define LM_NEXT_POWER_OF_2(x) ( (x) ? 1ULL<<((sizeof(unsigned long long)*8)-__builtin_clzll(x)) : 1) /* strings */ -- cgit v1.2.3-2-g168b From 66efca9146357621118d565359b91326d1a96d0a Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 24 Feb 2025 22:54:55 -0700 Subject: libmisc: private.h: Add IS_IMPLEMENTATION_FOR(name) for use with LM_IF --- libmisc/include/libmisc/private.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libmisc/include') diff --git a/libmisc/include/libmisc/private.h b/libmisc/include/libmisc/private.h index 1db7915..c5382a7 100644 --- a/libmisc/include/libmisc/private.h +++ b/libmisc/include/libmisc/private.h @@ -1,6 +1,6 @@ /* libmisc/private.h - Utilities to hide struct fields * - * Copyright (C) 2024 Luke T. Shumaker + * Copyright (C) 2024-2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ @@ -10,7 +10,8 @@ #include #define YES LM_SENTINEL() -#define BEGIN_PRIVATE(name) LM_IF(LM_IS_SENTINEL(IMPLEMENTATION_FOR_##name))()(struct {) -#define END_PRIVATE(name) LM_IF(LM_IS_SENTINEL(IMPLEMENTATION_FOR_##name))()(} LM_CAT2_(_HIDDEN_, __COUNTER__);) +#define IS_IMPLEMENTATION_FOR(name) LM_IS_SENTINEL(IMPLEMENTATION_FOR_##name) +#define BEGIN_PRIVATE(name) LM_IF(IS_IMPLEMENTATION_FOR(name))()(struct {) +#define END_PRIVATE(name) LM_IF(IS_IMPLEMENTATION_FOR(name))()(} LM_CAT2_(_HIDDEN_, __COUNTER__);) #endif /* _LIBMISC_PRIVATE_H_ */ -- cgit v1.2.3-2-g168b From e0a04cbc3d159a84a1aa845743a0b89981e16224 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 25 Feb 2025 15:25:08 -0700 Subject: libmisc: macro.h: Add LM_FLOORLOG2 --- libmisc/include/libmisc/macro.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'libmisc/include') diff --git a/libmisc/include/libmisc/macro.h b/libmisc/include/libmisc/macro.h index 149c4bb..b3e235c 100644 --- a/libmisc/include/libmisc/macro.h +++ b/libmisc/include/libmisc/macro.h @@ -17,10 +17,11 @@ /* numeric */ #define LM_ARRAY_LEN(ary) (sizeof(ary)/sizeof((ary)[0])) -#define LM_CEILDIV(n, d) ( ((n)+(d)-1) / (d) ) -#define LM_ROUND_UP(n, d) ( LM_CEILDIV(n, d) * (d) ) /** Return `n` rounded up to the nearest multiple of `d` */ -#define LM_ROUND_DOWN(n, d) ( ((n)/(d)) * (d) ) /** Return `n` rounded down to the nearest multiple of `d` */ -#define LM_NEXT_POWER_OF_2(x) ( (x) ? 1ULL<<((sizeof(unsigned long long)*8)-__builtin_clzll(x)) : 1) +#define LM_CEILDIV(n, d) ( ((n)+(d)-1) / (d) ) /** Return ceil(n/d) */ +#define LM_ROUND_UP(n, d) ( LM_CEILDIV(n, d) * (d) ) /** Return `n` rounded up to the nearest multiple of `d` */ +#define LM_ROUND_DOWN(n, d) ( ((n)/(d)) * (d) ) /** Return `n` rounded down to the nearest multiple of `d` */ +#define LM_NEXT_POWER_OF_2(x) ( (x) ? 1ULL<<((sizeof(unsigned long long)*8)-__builtin_clzll(x)) : 1) /** Return the lowest power of 2 that is > x */ +#define LM_FLOORLOG2(x) ((sizeof(unsigned long long)*8)-__builtin_clzll(x)-1) /** Return floor(log_2(x) */ /* strings */ -- cgit v1.2.3-2-g168b