X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fcompiler_features.h;h=753706d7fe2219a016e5761f6ef962877a6edc92;hb=a5cd72d0e598f037fd9d9f23948af5b2fb06e2eb;hp=0c1119df4f0a4c029c4df71a835e9888a389b306;hpb=905b7c2512eebeedfcb1af03ffb30ad752e94928;p=pcsx_rearmed.git diff --git a/include/compiler_features.h b/include/compiler_features.h index 0c1119df..753706d7 100644 --- a/include/compiler_features.h +++ b/include/compiler_features.h @@ -2,12 +2,28 @@ #ifdef __GNUC__ # define likely(x) __builtin_expect((x),1) # define unlikely(x) __builtin_expect((x),0) +# ifdef __clang__ +# define noinline __attribute__((noinline)) +# else +# define noinline __attribute__((noinline,noclone)) +# endif +# define unused __attribute__((unused)) #else # define likely(x) (x) # define unlikely(x) (x) +# define noinline +# define unused #endif #ifndef __has_builtin #define __has_builtin(x) 0 #endif +#if __has_builtin(__builtin_add_overflow) || (defined(__GNUC__) && __GNUC__ >= 5) +#define add_overflow(a, b, r) __builtin_add_overflow(a, b, &(r)) +#define sub_overflow(a, b, r) __builtin_sub_overflow(a, b, &(r)) +#else +#define add_overflow(a, b, r) ({r = (u32)a + (u32)b; (a ^ ~b) & (a ^ r) & (1u<<31);}) +#define sub_overflow(a, b, r) ({r = (u32)a - (u32)b; (a ^ b) & (a ^ r) & (1u<<31);}) +#endif +