X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=include%2Fcompiler_features.h;fp=include%2Fcompiler_features.h;h=753706d7fe2219a016e5761f6ef962877a6edc92;hp=3841866452ef6b9cd81071e440fb82c34ec1cfff;hb=a5cd72d0e598f037fd9d9f23948af5b2fb06e2eb;hpb=9165d434d935746da54484381ebbee754e899680 diff --git a/include/compiler_features.h b/include/compiler_features.h index 38418664..753706d7 100644 --- a/include/compiler_features.h +++ b/include/compiler_features.h @@ -2,14 +2,28 @@ #ifdef __GNUC__ # define likely(x) __builtin_expect((x),1) # define unlikely(x) __builtin_expect((x),0) -# define noinline __attribute__((noinline)) +# 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 +