aboutsummaryrefslogtreecommitdiff
path: root/C/Compiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'C/Compiler.h')
-rw-r--r--C/Compiler.h91
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
22023-04-02 : Igor Pavlov : Public domain */ 22024-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
83typedef 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;