]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - include/linux/math.h
Update bcachefs sources to 33a60d9b05 bcachefs: Assorted fixes for clang
[bcachefs-tools-debian] / include / linux / math.h
index db7cdd23e9ef468307888187bde2d17250afa213..85c8c8aa7d453f27b4908324fc7f46061ad78085 100644 (file)
@@ -153,4 +153,19 @@ static inline u32 int_sqrt64(u64 x)
 }
 #endif
 
+#define abs(x) __abs_choose_expr(x, long long,                         \
+               __abs_choose_expr(x, long,                              \
+               __abs_choose_expr(x, int,                               \
+               __abs_choose_expr(x, short,                             \
+               __abs_choose_expr(x, char,                              \
+               __builtin_choose_expr(                                  \
+                       __builtin_types_compatible_p(typeof(x), char),  \
+                       (char)({ signed char __x = (x); __x<0?-__x:__x; }), \
+                       ((void)0)))))))
+
+#define __abs_choose_expr(x, type, other) __builtin_choose_expr(       \
+       __builtin_types_compatible_p(typeof(x),   signed type) ||       \
+       __builtin_types_compatible_p(typeof(x), unsigned type),         \
+       ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
+
 #endif /* _LINUX_MATH_H */