Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
stenzek
GitHub Repository: stenzek/duckstation
Path: blob/master/dep/lzma/include/Compiler.h
4253 views
1
/* Compiler.h : Compiler specific defines and pragmas
2
2024-01-22 : Igor Pavlov : Public domain */
3
4
#ifndef ZIP7_INC_COMPILER_H
5
#define ZIP7_INC_COMPILER_H
6
7
#if defined(__clang__)
8
# define Z7_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
9
#endif
10
#if defined(__clang__) && defined(__apple_build_version__)
11
# define Z7_APPLE_CLANG_VERSION Z7_CLANG_VERSION
12
#elif defined(__clang__)
13
# define Z7_LLVM_CLANG_VERSION Z7_CLANG_VERSION
14
#elif defined(__GNUC__)
15
# define Z7_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
16
#endif
17
18
#ifdef _MSC_VER
19
#if !defined(__clang__) && !defined(__GNUC__)
20
#define Z7_MSC_VER_ORIGINAL _MSC_VER
21
#endif
22
#endif
23
24
#if defined(__MINGW32__) || defined(__MINGW64__)
25
#define Z7_MINGW
26
#endif
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
45
// #pragma GCC diagnostic ignored "-Wunknown-pragmas"
46
47
#ifdef __clang__
48
// padding size of '' with 4 bytes to alignment boundary
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
101
#endif
102
103
104
#ifdef _MSC_VER
105
106
#ifdef UNDER_CE
107
#define RPC_NO_WINDOWS_H
108
/* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
109
#pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
110
#pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int
111
#endif
112
113
#if defined(_MSC_VER) && _MSC_VER >= 1800
114
#pragma warning(disable : 4464) // relative include path contains '..'
115
#endif
116
117
// == 1200 : -O1 : for __forceinline
118
// >= 1900 : -O1 : for printf
119
#pragma warning(disable : 4710) // function not inlined
120
121
#if _MSC_VER < 1900
122
// winnt.h: 'Int64ShllMod32'
123
#pragma warning(disable : 4514) // unreferenced inline function has been removed
124
#endif
125
126
#if _MSC_VER < 1300
127
// #pragma warning(disable : 4702) // unreachable code
128
// Bra.c : -O1:
129
#pragma warning(disable : 4714) // function marked as __forceinline not inlined
130
#endif
131
132
/*
133
#if _MSC_VER > 1400 && _MSC_VER <= 1900
134
// strcat: This function or variable may be unsafe
135
// sysinfoapi.h: kit10: GetVersion was declared deprecated
136
#pragma warning(disable : 4996)
137
#endif
138
*/
139
140
#if _MSC_VER > 1200
141
// -Wall warnings
142
143
#pragma warning(disable : 4711) // function selected for automatic inline expansion
144
#pragma warning(disable : 4820) // '2' bytes padding added after data member
145
146
#if _MSC_VER >= 1400 && _MSC_VER < 1920
147
// 1400: string.h: _DBG_MEMCPY_INLINE_
148
// 1600 - 191x : smmintrin.h __cplusplus'
149
// is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
150
#pragma warning(disable : 4668)
151
152
// 1400 - 1600 : WinDef.h : 'FARPROC' :
153
// 1900 - 191x : immintrin.h: _readfsbase_u32
154
// no function prototype given : converting '()' to '(void)'
155
#pragma warning(disable : 4255)
156
#endif
157
158
#if _MSC_VER >= 1914
159
// Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
160
#pragma warning(disable : 5045)
161
#endif
162
163
#endif // _MSC_VER > 1200
164
#endif // _MSC_VER
165
166
167
#if defined(__clang__) && (__clang_major__ >= 4)
168
#define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE \
169
_Pragma("clang loop unroll(disable)") \
170
_Pragma("clang loop vectorize(disable)")
171
#define Z7_ATTRIB_NO_VECTORIZE
172
#elif defined(__GNUC__) && (__GNUC__ >= 5) \
173
&& (!defined(Z7_MCST_LCC_VERSION) || (Z7_MCST_LCC_VERSION >= 12610))
174
#define Z7_ATTRIB_NO_VECTORIZE __attribute__((optimize("no-tree-vectorize")))
175
// __attribute__((optimize("no-unroll-loops")));
176
#define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE
177
#elif defined(_MSC_VER) && (_MSC_VER >= 1920)
178
#define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE \
179
_Pragma("loop( no_vector )")
180
#define Z7_ATTRIB_NO_VECTORIZE
181
#else
182
#define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE
183
#define Z7_ATTRIB_NO_VECTORIZE
184
#endif
185
186
#if defined(MY_CPU_X86_OR_AMD64) && ( \
187
defined(__clang__) && (__clang_major__ >= 4) \
188
|| defined(__GNUC__) && (__GNUC__ >= 5))
189
#define Z7_ATTRIB_NO_SSE __attribute__((__target__("no-sse")))
190
#else
191
#define Z7_ATTRIB_NO_SSE
192
#endif
193
194
#define Z7_ATTRIB_NO_VECTOR \
195
Z7_ATTRIB_NO_VECTORIZE \
196
Z7_ATTRIB_NO_SSE
197
198
199
#if defined(__clang__) && (__clang_major__ >= 8) \
200
|| defined(__GNUC__) && (__GNUC__ >= 1000) \
201
/* || defined(_MSC_VER) && (_MSC_VER >= 1920) */
202
// GCC is not good for __builtin_expect()
203
#define Z7_LIKELY(x) (__builtin_expect((x), 1))
204
#define Z7_UNLIKELY(x) (__builtin_expect((x), 0))
205
// #define Z7_unlikely [[unlikely]]
206
// #define Z7_likely [[likely]]
207
#else
208
#define Z7_LIKELY(x) (x)
209
#define Z7_UNLIKELY(x) (x)
210
// #define Z7_likely
211
#endif
212
213
214
#if (defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 30600))
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 \
222
_Pragma("GCC diagnostic push") \
223
_Pragma("GCC diagnostic ignored \"-Wreserved-macro-identifier\"")
224
#endif
225
226
#define Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER \
227
_Pragma("GCC diagnostic pop")
228
#else
229
#define Z7_DIAGNOSTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER
230
#define Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER
231
#endif
232
233
#define UNUSED_VAR(x) (void)x;
234
/* #define UNUSED_VAR(x) x=x; */
235
236
#endif
237
238