diff options
author | Alex Deymo <deymo@google.com> | 2017-07-28 14:33:43 (GMT) |
---|---|---|
committer | Alex Deymo <deymo@google.com> | 2017-08-07 08:34:33 (GMT) |
commit | 76ef6d0ab0ea0937e8bb92c3a11a6445504d720f (patch) | |
tree | bce8cddddfe691fb961c86185a662e76ab317c2f /lib/lz4.c | |
parent | 9a967030d7f049042a64cd095bd54ebd34f53780 (diff) | |
download | lz4-76ef6d0ab0ea0937e8bb92c3a11a6445504d720f.zip lz4-76ef6d0ab0ea0937e8bb92c3a11a6445504d720f.tar.gz lz4-76ef6d0ab0ea0937e8bb92c3a11a6445504d720f.tar.bz2 |
Allow to predefine FORCE_INLINE macro.
FORCE_INLINE macro is defined based on the compiler used. When using
gcc, it will include "__attribute__((always_inline))" forcing gcc to
always inline all the functions marked as FORCE_INLINE. However, this
can cause a performance degradation of about 15%.
This patch allows to set the FORCE_INLINE macro from the compiler
command line to either "static" or "static inline" giving allowing it
to inline functions as needed when performing optimizations.
Diffstat (limited to 'lib/lz4.c')
-rw-r--r-- | lib/lz4.c | 25 |
1 files changed, 16 insertions, 9 deletions
@@ -96,20 +96,27 @@ * Compiler Options **************************************/ #ifdef _MSC_VER /* Visual Studio */ -# define FORCE_INLINE static __forceinline # include <intrin.h> # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ # pragma warning(disable : 4293) /* disable: C4293: too large shift (32-bits) */ -#else -# if defined(__GNUC__) || defined(__clang__) -# define FORCE_INLINE static inline __attribute__((always_inline)) -# elif defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -# define FORCE_INLINE static inline -# else -# define FORCE_INLINE static -# endif #endif /* _MSC_VER */ +#ifndef FORCE_INLINE +# ifdef _MSC_VER /* Visual Studio */ +# define FORCE_INLINE static __forceinline +# else +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif +# else +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +# endif /* _MSC_VER */ +#endif /* FORCE_INLINE */ + #if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || defined(__clang__) # define expect(expr,value) (__builtin_expect ((expr),(value)) ) #else |