]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
liblzma: Create crc_always_inline macro.
authorJia Tan <jiat0218@gmail.com>
Wed, 18 Oct 2023 14:48:19 +0000 (22:48 +0800)
committerJia Tan <jiat0218@gmail.com>
Wed, 18 Oct 2023 15:54:41 +0000 (23:54 +0800)
This macro must be used instead of the inline keyword. On MSVC, it is
a replacement for __forceinline which is an MSVC specific keyword that
should not be used with inline (it will issue a warning if it is).

It does not use a build system check to determine if
__attribute__((__always_inline__)) since all compilers that can use
CLMUL extensions (except the special case for MSVC) should support this
attribute. If this assumption is incorrect then it will result in a bug
report instead of silently producing slow code.

src/liblzma/check/crc_common.h

index b0176adcccf714274117ef25a2b86427e0f7a90b..7aef383c4a523f5ba63834d29504a1293bfa3783 100644 (file)
 #endif
 
 
+// The inline keyword is only a suggestion to the compiler to substitute the
+// body of the function into the places where it is called. If a function
+// is large and called multiple times then compiler may choose to ignore the
+// inline suggestion at a sometimes high performance cost.
+//
+// MSVC's __forceinline is a keyword that should be used in place of inline.
+// If both __forceinline and inline are used, MSVC will issue a warning.
+// Since MSVC's keyword is a replacement keyword, the lzma_always_inline
+// macro must also contain the inline keyword when its not used in MSVC.
+#ifdef _MSC_VER
+#      define crc_always_inline __forceinline
+#else
+#      define crc_always_inline __attribute__((__always_inline__)) inline
+#endif
+
 #undef CRC_GENERIC
 #undef CRC_CLMUL
 #undef CRC_USE_IFUNC