#ifndef SIMDUTF_COMMON_DEFS_H #define SIMDUTF_COMMON_DEFS_H #include "simdutf/portability.h" #include "simdutf/avx512.h" #if defined(SIMDUTF_REGULAR_VISUAL_STUDIO) #define SIMDUTF_DEPRECATED __declspec(deprecated) #define simdutf_really_inline __forceinline // really inline in release mode #define simdutf_always_inline __forceinline // always inline, no matter what #define simdutf_never_inline __declspec(noinline) #define simdutf_unused #define simdutf_warn_unused #ifndef simdutf_likely #define simdutf_likely(x) x #endif #ifndef simdutf_unlikely #define simdutf_unlikely(x) x #endif #define SIMDUTF_PUSH_DISABLE_WARNINGS __pragma(warning(push)) #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS __pragma(warning(push, 0)) #define SIMDUTF_DISABLE_VS_WARNING(WARNING_NUMBER) \ __pragma(warning(disable : WARNING_NUMBER)) // Get rid of Intellisense-only warnings (Code Analysis) // Though __has_include is C++17, it is supported in Visual Studio 2017 or // better (_MSC_VER>=1910). #ifdef __has_include #if __has_include() #include #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \ SIMDUTF_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS) #endif #endif #ifndef SIMDUTF_DISABLE_UNDESIRED_WARNINGS #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS #endif #define SIMDUTF_DISABLE_DEPRECATED_WARNING SIMDUTF_DISABLE_VS_WARNING(4996) #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING #define SIMDUTF_POP_DISABLE_WARNINGS __pragma(warning(pop)) #else // SIMDUTF_REGULAR_VISUAL_STUDIO #if defined(__OPTIMIZE__) || defined(NDEBUG) #define simdutf_really_inline inline __attribute__((always_inline)) #else #define simdutf_really_inline inline #endif #define simdutf_always_inline \ inline __attribute__((always_inline)) // always inline, no matter what #define SIMDUTF_DEPRECATED __attribute__((deprecated)) #define simdutf_never_inline inline __attribute__((noinline)) #define simdutf_unused __attribute__((unused)) #define simdutf_warn_unused __attribute__((warn_unused_result)) #ifndef simdutf_likely #define simdutf_likely(x) __builtin_expect(!!(x), 1) #endif #ifndef simdutf_unlikely #define simdutf_unlikely(x) __builtin_expect(!!(x), 0) #endif // clang-format off #define SIMDUTF_PUSH_DISABLE_WARNINGS _Pragma("GCC diagnostic push") // gcc doesn't seem to disable all warnings with all and extra, add warnings // here as necessary #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS \ SIMDUTF_PUSH_DISABLE_WARNINGS \ SIMDUTF_DISABLE_GCC_WARNING(-Weffc++) \ SIMDUTF_DISABLE_GCC_WARNING(-Wall) \ SIMDUTF_DISABLE_GCC_WARNING(-Wconversion) \ SIMDUTF_DISABLE_GCC_WARNING(-Wextra) \ SIMDUTF_DISABLE_GCC_WARNING(-Wattributes) \ SIMDUTF_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \ SIMDUTF_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \ SIMDUTF_DISABLE_GCC_WARNING(-Wreturn-type) \ SIMDUTF_DISABLE_GCC_WARNING(-Wshadow) \ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-parameter) \ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-variable) #define SIMDUTF_PRAGMA(P) _Pragma(#P) #define SIMDUTF_DISABLE_GCC_WARNING(WARNING) \ SIMDUTF_PRAGMA(GCC diagnostic ignored #WARNING) #if defined(SIMDUTF_CLANG_VISUAL_STUDIO) #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \ SIMDUTF_DISABLE_GCC_WARNING(-Wmicrosoft-include) #else #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS #endif #define SIMDUTF_DISABLE_DEPRECATED_WARNING \ SIMDUTF_DISABLE_GCC_WARNING(-Wdeprecated-declarations) #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING \ SIMDUTF_DISABLE_GCC_WARNING(-Wstrict-overflow) #define SIMDUTF_POP_DISABLE_WARNINGS _Pragma("GCC diagnostic pop") // clang-format on #endif // MSC_VER #ifndef SIMDUTF_DLLIMPORTEXPORT #if defined(SIMDUTF_VISUAL_STUDIO) /** * It does not matter here whether you are using * the regular visual studio or clang under visual * studio. */ #if SIMDUTF_USING_LIBRARY #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllimport) #else #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllexport) #endif #else #define SIMDUTF_DLLIMPORTEXPORT #endif #endif #endif // SIMDUTF_COMMON_DEFS_H