mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
imlib: Detect comparison between signed and unsigned in MIN/MAX macros.
This commit is contained in:
parent
0fd524863b
commit
20b12228dd
@ -42,8 +42,21 @@
|
||||
#define IM_LOG2_32(x) (((x) & 0xFFFF0000ULL) ? (16 + IM_LOG2_16((x) >> 16)) : IM_LOG2_16(x)) // NO ({ ... }) !
|
||||
#define IM_LOG2(x) (((x) & 0xFFFFFFFF00000000ULL) ? (32 + IM_LOG2_32((x) >> 32)) : IM_LOG2_32(x)) // NO ({ ... }) !
|
||||
|
||||
#define IM_MAX(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; })
|
||||
#define IM_MIN(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; })
|
||||
#define IM_IS_SIGNED(a) (__builtin_types_compatible_p(__typeof__(a), signed) || \
|
||||
__builtin_types_compatible_p(__typeof__(a), signed long))
|
||||
#define IM_IS_UNSIGNED(a) (__builtin_types_compatible_p(__typeof__(a), unsigned) || \
|
||||
__builtin_types_compatible_p(__typeof__(a), unsigned long))
|
||||
#define IM_SIGN_COMPARE(a, b) ((IM_IS_SIGNED(a) && IM_IS_UNSIGNED(b)) || \
|
||||
(IM_IS_SIGNED(b) && IM_IS_UNSIGNED(a)))
|
||||
|
||||
#define IM_MAX(a, b)\
|
||||
({__typeof__ (a) _a = (a); __typeof__ (b) _b = (b);\
|
||||
__builtin_choose_expr(IM_SIGN_COMPARE(_a, _b), (void) 0, (_a > _b ? _a : _b)); })
|
||||
|
||||
#define IM_MIN(a, b)\
|
||||
({__typeof__ (a) _a = (a); __typeof__ (b) _b = (b);\
|
||||
__builtin_choose_expr(IM_SIGN_COMPARE(_a, _b), (void) 0, (_a < _b ? _a : _b)); })
|
||||
|
||||
#define IM_DIV(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _b ? (_a / _b) : 0; })
|
||||
#define IM_MOD(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _b ? (_a % _b) : 0; })
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user