diff options
Diffstat (limited to 'C/Compiler.h')
-rw-r--r-- | C/Compiler.h | 91 |
1 files changed, 84 insertions, 7 deletions
diff --git a/C/Compiler.h b/C/Compiler.h index 185a52d..2a9c2b7 100644 --- a/C/Compiler.h +++ b/C/Compiler.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* Compiler.h : Compiler specific defines and pragmas | 1 | /* Compiler.h : Compiler specific defines and pragmas |
2 | 2023-04-02 : Igor Pavlov : Public domain */ | 2 | 2024-01-22 : Igor Pavlov : Public domain */ |
3 | 3 | ||
4 | #ifndef ZIP7_INC_COMPILER_H | 4 | #ifndef ZIP7_INC_COMPILER_H |
5 | #define ZIP7_INC_COMPILER_H | 5 | #define ZIP7_INC_COMPILER_H |
@@ -25,11 +25,79 @@ | |||
25 | #define Z7_MINGW | 25 | #define Z7_MINGW |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #if defined(__LCC__) && (defined(__MCST__) || defined(__e2k__)) | ||
29 | #define Z7_MCST_LCC | ||
30 | #define Z7_MCST_LCC_VERSION (__LCC__ * 100 + __LCC_MINOR__) | ||
31 | #endif | ||
32 | |||
33 | /* | ||
34 | #if defined(__AVX2__) \ | ||
35 | || defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40900) \ | ||
36 | || defined(Z7_APPLE_CLANG_VERSION) && (Z7_APPLE_CLANG_VERSION >= 40600) \ | ||
37 | || defined(Z7_LLVM_CLANG_VERSION) && (Z7_LLVM_CLANG_VERSION >= 30100) \ | ||
38 | || defined(Z7_MSC_VER_ORIGINAL) && (Z7_MSC_VER_ORIGINAL >= 1800) \ | ||
39 | || defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1400) | ||
40 | #define Z7_COMPILER_AVX2_SUPPORTED | ||
41 | #endif | ||
42 | #endif | ||
43 | */ | ||
44 | |||
28 | // #pragma GCC diagnostic ignored "-Wunknown-pragmas" | 45 | // #pragma GCC diagnostic ignored "-Wunknown-pragmas" |
29 | 46 | ||
30 | #ifdef __clang__ | 47 | #ifdef __clang__ |
31 | // padding size of '' with 4 bytes to alignment boundary | 48 | // padding size of '' with 4 bytes to alignment boundary |
32 | #pragma GCC diagnostic ignored "-Wpadded" | 49 | #pragma GCC diagnostic ignored "-Wpadded" |
50 | |||
51 | #if defined(Z7_LLVM_CLANG_VERSION) && (__clang_major__ == 13) \ | ||
52 | && defined(__FreeBSD__) | ||
53 | // freebsd: | ||
54 | #pragma GCC diagnostic ignored "-Wexcess-padding" | ||
55 | #endif | ||
56 | |||
57 | #if __clang_major__ >= 16 | ||
58 | #pragma GCC diagnostic ignored "-Wunsafe-buffer-usage" | ||
59 | #endif | ||
60 | |||
61 | #if __clang_major__ == 13 | ||
62 | #if defined(__SIZEOF_POINTER__) && (__SIZEOF_POINTER__ == 16) | ||
63 | // cheri | ||
64 | #pragma GCC diagnostic ignored "-Wcapability-to-integer-cast" | ||
65 | #endif | ||
66 | #endif | ||
67 | |||
68 | #if __clang_major__ == 13 | ||
69 | // for <arm_neon.h> | ||
70 | #pragma GCC diagnostic ignored "-Wreserved-identifier" | ||
71 | #endif | ||
72 | |||
73 | #endif // __clang__ | ||
74 | |||
75 | #if defined(_WIN32) && defined(__clang__) && __clang_major__ >= 16 | ||
76 | // #pragma GCC diagnostic ignored "-Wcast-function-type-strict" | ||
77 | #define Z7_DIAGNOSTIC_IGNORE_CAST_FUNCTION \ | ||
78 | _Pragma("GCC diagnostic ignored \"-Wcast-function-type-strict\"") | ||
79 | #else | ||
80 | #define Z7_DIAGNOSTIC_IGNORE_CAST_FUNCTION | ||
81 | #endif | ||
82 | |||
83 | typedef void (*Z7_void_Function)(void); | ||
84 | #if defined(__clang__) || defined(__GNUC__) | ||
85 | #define Z7_CAST_FUNC_C (Z7_void_Function) | ||
86 | #elif defined(_MSC_VER) && _MSC_VER > 1920 | ||
87 | #define Z7_CAST_FUNC_C (void *) | ||
88 | // #pragma warning(disable : 4191) // 'type cast': unsafe conversion from 'FARPROC' to 'void (__cdecl *)()' | ||
89 | #else | ||
90 | #define Z7_CAST_FUNC_C | ||
91 | #endif | ||
92 | /* | ||
93 | #if (defined(__GNUC__) && (__GNUC__ >= 8)) || defined(__clang__) | ||
94 | // #pragma GCC diagnostic ignored "-Wcast-function-type" | ||
95 | #endif | ||
96 | */ | ||
97 | #ifdef __GNUC__ | ||
98 | #if defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40000) && (Z7_GCC_VERSION < 70000) | ||
99 | #pragma GCC diagnostic ignored "-Wstrict-aliasing" | ||
100 | #endif | ||
33 | #endif | 101 | #endif |
34 | 102 | ||
35 | 103 | ||
@@ -101,7 +169,8 @@ | |||
101 | _Pragma("clang loop unroll(disable)") \ | 169 | _Pragma("clang loop unroll(disable)") \ |
102 | _Pragma("clang loop vectorize(disable)") | 170 | _Pragma("clang loop vectorize(disable)") |
103 | #define Z7_ATTRIB_NO_VECTORIZE | 171 | #define Z7_ATTRIB_NO_VECTORIZE |
104 | #elif defined(__GNUC__) && (__GNUC__ >= 5) | 172 | #elif defined(__GNUC__) && (__GNUC__ >= 5) \ |
173 | && (!defined(Z7_MCST_LCC_VERSION) || (Z7_MCST_LCC_VERSION >= 12610)) | ||
105 | #define Z7_ATTRIB_NO_VECTORIZE __attribute__((optimize("no-tree-vectorize"))) | 174 | #define Z7_ATTRIB_NO_VECTORIZE __attribute__((optimize("no-tree-vectorize"))) |
106 | // __attribute__((optimize("no-unroll-loops"))); | 175 | // __attribute__((optimize("no-unroll-loops"))); |
107 | #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE | 176 | #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE |
@@ -142,15 +211,23 @@ | |||
142 | #endif | 211 | #endif |
143 | 212 | ||
144 | 213 | ||
145 | #if (defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 36000)) | 214 | #if (defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 30600)) |
146 | #define Z7_DIAGNOSCTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER \ | 215 | |
216 | #if (Z7_CLANG_VERSION < 130000) | ||
217 | #define Z7_DIAGNOSTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER \ | ||
218 | _Pragma("GCC diagnostic push") \ | ||
219 | _Pragma("GCC diagnostic ignored \"-Wreserved-id-macro\"") | ||
220 | #else | ||
221 | #define Z7_DIAGNOSTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER \ | ||
147 | _Pragma("GCC diagnostic push") \ | 222 | _Pragma("GCC diagnostic push") \ |
148 | _Pragma("GCC diagnostic ignored \"-Wreserved-macro-identifier\"") | 223 | _Pragma("GCC diagnostic ignored \"-Wreserved-macro-identifier\"") |
149 | #define Z7_DIAGNOSCTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER \ | 224 | #endif |
225 | |||
226 | #define Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER \ | ||
150 | _Pragma("GCC diagnostic pop") | 227 | _Pragma("GCC diagnostic pop") |
151 | #else | 228 | #else |
152 | #define Z7_DIAGNOSCTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER | 229 | #define Z7_DIAGNOSTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER |
153 | #define Z7_DIAGNOSCTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER | 230 | #define Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER |
154 | #endif | 231 | #endif |
155 | 232 | ||
156 | #define UNUSED_VAR(x) (void)x; | 233 | #define UNUSED_VAR(x) (void)x; |