8d8bb038bb31ba5cdd84cc5caef665b2b42e24ff
[mirrors/FX01.git] /
1 #ifdef __cplusplus
2 # error "A C++ compiler has been selected for C."
3 #endif
4
5 #if defined(__18CXX)
6 # define ID_VOID_MAIN
7 #endif
8 #if defined(__CLASSIC_C__)
9 /* cv-qualifiers did not exist in K&R C */
10 # define const
11 # define volatile
12 #endif
13
14 #if !defined(__has_include)
15 /* If the compiler does not have __has_include, pretend the answer is
16    always no.  */
17 #  define __has_include(x) 0
18 #endif
19
20
21 /* Version number components: V=Version, R=Revision, P=Patch
22    Version date components:   YYYY=Year, MM=Month,   DD=Day  */
23
24 #if defined(__INTEL_COMPILER) || defined(__ICC)
25 # define COMPILER_ID "Intel"
26 # if defined(_MSC_VER)
27 #  define SIMULATE_ID "MSVC"
28 # endif
29 # if defined(__GNUC__)
30 #  define SIMULATE_ID "GNU"
31 # endif
32   /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
33      except that a few beta releases use the old format with V=2021.  */
34 # if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
35 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
36 #  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
37 #  if defined(__INTEL_COMPILER_UPDATE)
38 #   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
39 #  else
40 #   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
41 #  endif
42 # else
43 #  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
44 #  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
45    /* The third version component from --version is an update index,
46       but no macro is provided for it.  */
47 #  define COMPILER_VERSION_PATCH DEC(0)
48 # endif
49 # if defined(__INTEL_COMPILER_BUILD_DATE)
50    /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
51 #  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
52 # endif
53 # if defined(_MSC_VER)
54    /* _MSC_VER = VVRR */
55 #  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
56 #  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
57 # endif
58 # if defined(__GNUC__)
59 #  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
60 # elif defined(__GNUG__)
61 #  define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
62 # endif
63 # if defined(__GNUC_MINOR__)
64 #  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
65 # endif
66 # if defined(__GNUC_PATCHLEVEL__)
67 #  define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
68 # endif
69
70 #elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
71 # define COMPILER_ID "IntelLLVM"
72 #if defined(_MSC_VER)
73 # define SIMULATE_ID "MSVC"
74 #endif
75 #if defined(__GNUC__)
76 # define SIMULATE_ID "GNU"
77 #endif
78 /* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
79  * later.  Look for 6 digit vs. 8 digit version number to decide encoding.
80  * VVVV is no smaller than the current year when a version is released.
81  */
82 #if __INTEL_LLVM_COMPILER < 1000000L
83 # define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
84 # define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
85 # define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER    % 10)
86 #else
87 # define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
88 # define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
89 # define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER     % 100)
90 #endif
91 #if defined(_MSC_VER)
92   /* _MSC_VER = VVRR */
93 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
94 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
95 #endif
96 #if defined(__GNUC__)
97 # define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
98 #elif defined(__GNUG__)
99 # define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
100 #endif
101 #if defined(__GNUC_MINOR__)
102 # define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
103 #endif
104 #if defined(__GNUC_PATCHLEVEL__)
105 # define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
106 #endif
107
108 #elif defined(__PATHCC__)
109 # define COMPILER_ID "PathScale"
110 # define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
111 # define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
112 # if defined(__PATHCC_PATCHLEVEL__)
113 #  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
114 # endif
115
116 #elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
117 # define COMPILER_ID "Embarcadero"
118 # define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
119 # define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
120 # define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
121
122 #elif defined(__BORLANDC__)
123 # define COMPILER_ID "Borland"
124   /* __BORLANDC__ = 0xVRR */
125 # define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
126 # define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
127
128 #elif defined(__WATCOMC__) && __WATCOMC__ < 1200
129 # define COMPILER_ID "Watcom"
130    /* __WATCOMC__ = VVRR */
131 # define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
132 # define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
133 # if (__WATCOMC__ % 10) > 0
134 #  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
135 # endif
136
137 #elif defined(__WATCOMC__)
138 # define COMPILER_ID "OpenWatcom"
139    /* __WATCOMC__ = VVRP + 1100 */
140 # define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
141 # define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
142 # if (__WATCOMC__ % 10) > 0
143 #  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
144 # endif
145
146 #elif defined(__SUNPRO_C)
147 # define COMPILER_ID "SunPro"
148 # if __SUNPRO_C >= 0x5100
149    /* __SUNPRO_C = 0xVRRP */
150 #  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
151 #  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
152 #  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
153 # else
154    /* __SUNPRO_CC = 0xVRP */
155 #  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
156 #  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
157 #  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
158 # endif
159
160 #elif defined(__HP_cc)
161 # define COMPILER_ID "HP"
162   /* __HP_cc = VVRRPP */
163 # define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
164 # define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
165 # define COMPILER_VERSION_PATCH DEC(__HP_cc     % 100)
166
167 #elif defined(__DECC)
168 # define COMPILER_ID "Compaq"
169   /* __DECC_VER = VVRRTPPPP */
170 # define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
171 # define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000  % 100)
172 # define COMPILER_VERSION_PATCH DEC(__DECC_VER         % 10000)
173
174 #elif defined(__IBMC__) && defined(__COMPILER_VER__)
175 # define COMPILER_ID "zOS"
176   /* __IBMC__ = VRP */
177 # define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
178 # define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
179 # define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
180
181 #elif defined(__open_xl__) && defined(__clang__)
182 # define COMPILER_ID "IBMClang"
183 # define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
184 # define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
185 # define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
186 # define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
187
188
189 #elif defined(__ibmxl__) && defined(__clang__)
190 # define COMPILER_ID "XLClang"
191 # define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
192 # define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
193 # define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
194 # define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
195
196
197 #elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
198 # define COMPILER_ID "XL"
199   /* __IBMC__ = VRP */
200 # define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
201 # define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
202 # define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
203
204 #elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
205 # define COMPILER_ID "VisualAge"
206   /* __IBMC__ = VRP */
207 # define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
208 # define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
209 # define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
210
211 #elif defined(__NVCOMPILER)
212 # define COMPILER_ID "NVHPC"
213 # define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
214 # define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
215 # if defined(__NVCOMPILER_PATCHLEVEL__)
216 #  define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
217 # endif
218
219 #elif defined(__PGI)
220 # define COMPILER_ID "PGI"
221 # define COMPILER_VERSION_MAJOR DEC(__PGIC__)
222 # define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
223 # if defined(__PGIC_PATCHLEVEL__)
224 #  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
225 # endif
226
227 #elif defined(__clang__) && defined(__cray__)
228 # define COMPILER_ID "CrayClang"
229 # define COMPILER_VERSION_MAJOR DEC(__cray_major__)
230 # define COMPILER_VERSION_MINOR DEC(__cray_minor__)
231 # define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
232 # define COMPILER_VERSION_INTERNAL_STR __clang_version__
233
234
235 #elif defined(_CRAYC)
236 # define COMPILER_ID "Cray"
237 # define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
238 # define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
239
240 #elif defined(__TI_COMPILER_VERSION__)
241 # define COMPILER_ID "TI"
242   /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
243 # define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
244 # define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
245 # define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
246
247 #elif defined(__CLANG_FUJITSU)
248 # define COMPILER_ID "FujitsuClang"
249 # define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
250 # define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
251 # define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
252 # define COMPILER_VERSION_INTERNAL_STR __clang_version__
253
254
255 #elif defined(__FUJITSU)
256 # define COMPILER_ID "Fujitsu"
257 # if defined(__FCC_version__)
258 #   define COMPILER_VERSION __FCC_version__
259 # elif defined(__FCC_major__)
260 #   define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
261 #   define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
262 #   define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
263 # endif
264 # if defined(__fcc_version)
265 #   define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
266 # elif defined(__FCC_VERSION)
267 #   define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
268 # endif
269
270
271 #elif defined(__ghs__)
272 # define COMPILER_ID "GHS"
273 /* __GHS_VERSION_NUMBER = VVVVRP */
274 # ifdef __GHS_VERSION_NUMBER
275 # define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
276 # define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
277 # define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER      % 10)
278 # endif
279
280 #elif defined(__TASKING__)
281 # define COMPILER_ID "Tasking"
282   # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
283   # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
284 # define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
285
286 #elif defined(__ORANGEC__)
287 # define COMPILER_ID "OrangeC"
288 # define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
289 # define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
290 # define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
291
292 #elif defined(__TINYC__)
293 # define COMPILER_ID "TinyCC"
294
295 #elif defined(__BCC__)
296 # define COMPILER_ID "Bruce"
297
298 #elif defined(__SCO_VERSION__)
299 # define COMPILER_ID "SCO"
300
301 #elif defined(__ARMCC_VERSION) && !defined(__clang__)
302 # define COMPILER_ID "ARMCC"
303 #if __ARMCC_VERSION >= 1000000
304   /* __ARMCC_VERSION = VRRPPPP */
305   # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
306   # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
307   # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
308 #else
309   /* __ARMCC_VERSION = VRPPPP */
310   # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
311   # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
312   # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
313 #endif
314
315
316 #elif defined(__clang__) && defined(__apple_build_version__)
317 # define COMPILER_ID "AppleClang"
318 # if defined(_MSC_VER)
319 #  define SIMULATE_ID "MSVC"
320 # endif
321 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
322 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
323 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
324 # if defined(_MSC_VER)
325    /* _MSC_VER = VVRR */
326 #  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
327 #  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
328 # endif
329 # define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
330
331 #elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
332 # define COMPILER_ID "ARMClang"
333   # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
334   # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
335   # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100   % 100)
336 # define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
337
338 #elif defined(__clang__) && defined(__ti__)
339 # define COMPILER_ID "TIClang"
340   # define COMPILER_VERSION_MAJOR DEC(__ti_major__)
341   # define COMPILER_VERSION_MINOR DEC(__ti_minor__)
342   # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
343 # define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
344
345 #elif defined(__clang__)
346 # define COMPILER_ID "Clang"
347 # if defined(_MSC_VER)
348 #  define SIMULATE_ID "MSVC"
349 # endif
350 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
351 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
352 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
353 # if defined(_MSC_VER)
354    /* _MSC_VER = VVRR */
355 #  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
356 #  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
357 # endif
358
359 #elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
360 # define COMPILER_ID "LCC"
361 # define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
362 # define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
363 # if defined(__LCC_MINOR__)
364 #  define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
365 # endif
366 # if defined(__GNUC__) && defined(__GNUC_MINOR__)
367 #  define SIMULATE_ID "GNU"
368 #  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
369 #  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
370 #  if defined(__GNUC_PATCHLEVEL__)
371 #   define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
372 #  endif
373 # endif
374
375 #elif defined(__GNUC__)
376 # define COMPILER_ID "GNU"
377 # define COMPILER_VERSION_MAJOR DEC(__GNUC__)
378 # if defined(__GNUC_MINOR__)
379 #  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
380 # endif
381 # if defined(__GNUC_PATCHLEVEL__)
382 #  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
383 # endif
384
385 #elif defined(_MSC_VER)
386 # define COMPILER_ID "MSVC"
387   /* _MSC_VER = VVRR */
388 # define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
389 # define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
390 # if defined(_MSC_FULL_VER)
391 #  if _MSC_VER >= 1400
392     /* _MSC_FULL_VER = VVRRPPPPP */
393 #   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
394 #  else
395     /* _MSC_FULL_VER = VVRRPPPP */
396 #   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
397 #  endif
398 # endif
399 # if defined(_MSC_BUILD)
400 #  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
401 # endif
402
403 #elif defined(_ADI_COMPILER)
404 # define COMPILER_ID "ADSP"
405 #if defined(__VERSIONNUM__)
406   /* __VERSIONNUM__ = 0xVVRRPPTT */
407 #  define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
408 #  define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
409 #  define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
410 #  define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
411 #endif
412
413 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
414 # define COMPILER_ID "IAR"
415 # if defined(__VER__) && defined(__ICCARM__)
416 #  define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
417 #  define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
418 #  define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
419 #  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
420 # elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
421 #  define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
422 #  define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
423 #  define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
424 #  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
425 # endif
426
427 #elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
428 # define COMPILER_ID "SDCC"
429 # if defined(__SDCC_VERSION_MAJOR)
430 #  define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
431 #  define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
432 #  define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
433 # else
434   /* SDCC = VRP */
435 #  define COMPILER_VERSION_MAJOR DEC(SDCC/100)
436 #  define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
437 #  define COMPILER_VERSION_PATCH DEC(SDCC    % 10)
438 # endif
439
440
441 /* These compilers are either not known or too old to define an
442   identification macro.  Try to identify the platform and guess that
443   it is the native compiler.  */
444 #elif defined(__hpux) || defined(__hpua)
445 # define COMPILER_ID "HP"
446
447 #else /* unknown compiler */
448 # define COMPILER_ID ""
449 #endif
450
451 /* Construct the string literal in pieces to prevent the source from
452    getting matched.  Store it in a pointer rather than an array
453    because some compilers will just produce instructions to fill the
454    array rather than assigning a pointer to a static array.  */
455 char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
456 #ifdef SIMULATE_ID
457 char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
458 #endif
459
460 #ifdef __QNXNTO__
461 char const* qnxnto = "INFO" ":" "qnxnto[]";
462 #endif
463
464 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
465 char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
466 #endif
467
468 #define STRINGIFY_HELPER(X) #X
469 #define STRINGIFY(X) STRINGIFY_HELPER(X)
470
471 /* Identify known platforms by name.  */
472 #if defined(__linux) || defined(__linux__) || defined(linux)
473 # define PLATFORM_ID "Linux"
474
475 #elif defined(__MSYS__)
476 # define PLATFORM_ID "MSYS"
477
478 #elif defined(__CYGWIN__)
479 # define PLATFORM_ID "Cygwin"
480
481 #elif defined(__MINGW32__)
482 # define PLATFORM_ID "MinGW"
483
484 #elif defined(__APPLE__)
485 # define PLATFORM_ID "Darwin"
486
487 #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
488 # define PLATFORM_ID "Windows"
489
490 #elif defined(__FreeBSD__) || defined(__FreeBSD)
491 # define PLATFORM_ID "FreeBSD"
492
493 #elif defined(__NetBSD__) || defined(__NetBSD)
494 # define PLATFORM_ID "NetBSD"
495
496 #elif defined(__OpenBSD__) || defined(__OPENBSD)
497 # define PLATFORM_ID "OpenBSD"
498
499 #elif defined(__sun) || defined(sun)
500 # define PLATFORM_ID "SunOS"
501
502 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
503 # define PLATFORM_ID "AIX"
504
505 #elif defined(__hpux) || defined(__hpux__)
506 # define PLATFORM_ID "HP-UX"
507
508 #elif defined(__HAIKU__)
509 # define PLATFORM_ID "Haiku"
510
511 #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
512 # define PLATFORM_ID "BeOS"
513
514 #elif defined(__QNX__) || defined(__QNXNTO__)
515 # define PLATFORM_ID "QNX"
516
517 #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
518 # define PLATFORM_ID "Tru64"
519
520 #elif defined(__riscos) || defined(__riscos__)
521 # define PLATFORM_ID "RISCos"
522
523 #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
524 # define PLATFORM_ID "SINIX"
525
526 #elif defined(__UNIX_SV__)
527 # define PLATFORM_ID "UNIX_SV"
528
529 #elif defined(__bsdos__)
530 # define PLATFORM_ID "BSDOS"
531
532 #elif defined(_MPRAS) || defined(MPRAS)
533 # define PLATFORM_ID "MP-RAS"
534
535 #elif defined(__osf) || defined(__osf__)
536 # define PLATFORM_ID "OSF1"
537
538 #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
539 # define PLATFORM_ID "SCO_SV"
540
541 #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
542 # define PLATFORM_ID "ULTRIX"
543
544 #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
545 # define PLATFORM_ID "Xenix"
546
547 #elif defined(__WATCOMC__)
548 # if defined(__LINUX__)
549 #  define PLATFORM_ID "Linux"
550
551 # elif defined(__DOS__)
552 #  define PLATFORM_ID "DOS"
553
554 # elif defined(__OS2__)
555 #  define PLATFORM_ID "OS2"
556
557 # elif defined(__WINDOWS__)
558 #  define PLATFORM_ID "Windows3x"
559
560 # elif defined(__VXWORKS__)
561 #  define PLATFORM_ID "VxWorks"
562
563 # else /* unknown platform */
564 #  define PLATFORM_ID
565 # endif
566
567 #elif defined(__INTEGRITY)
568 # if defined(INT_178B)
569 #  define PLATFORM_ID "Integrity178"
570
571 # else /* regular Integrity */
572 #  define PLATFORM_ID "Integrity"
573 # endif
574
575 # elif defined(_ADI_COMPILER)
576 #  define PLATFORM_ID "ADSP"
577
578 #else /* unknown platform */
579 # define PLATFORM_ID
580
581 #endif
582
583 /* For windows compilers MSVC and Intel we can determine
584    the architecture of the compiler being used.  This is because
585    the compilers do not have flags that can change the architecture,
586    but rather depend on which compiler is being used
587 */
588 #if defined(_WIN32) && defined(_MSC_VER)
589 # if defined(_M_IA64)
590 #  define ARCHITECTURE_ID "IA64"
591
592 # elif defined(_M_ARM64EC)
593 #  define ARCHITECTURE_ID "ARM64EC"
594
595 # elif defined(_M_X64) || defined(_M_AMD64)
596 #  define ARCHITECTURE_ID "x64"
597
598 # elif defined(_M_IX86)
599 #  define ARCHITECTURE_ID "X86"
600
601 # elif defined(_M_ARM64)
602 #  define ARCHITECTURE_ID "ARM64"
603
604 # elif defined(_M_ARM)
605 #  if _M_ARM == 4
606 #   define ARCHITECTURE_ID "ARMV4I"
607 #  elif _M_ARM == 5
608 #   define ARCHITECTURE_ID "ARMV5I"
609 #  else
610 #   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
611 #  endif
612
613 # elif defined(_M_MIPS)
614 #  define ARCHITECTURE_ID "MIPS"
615
616 # elif defined(_M_SH)
617 #  define ARCHITECTURE_ID "SHx"
618
619 # else /* unknown architecture */
620 #  define ARCHITECTURE_ID ""
621 # endif
622
623 #elif defined(__WATCOMC__)
624 # if defined(_M_I86)
625 #  define ARCHITECTURE_ID "I86"
626
627 # elif defined(_M_IX86)
628 #  define ARCHITECTURE_ID "X86"
629
630 # else /* unknown architecture */
631 #  define ARCHITECTURE_ID ""
632 # endif
633
634 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
635 # if defined(__ICCARM__)
636 #  define ARCHITECTURE_ID "ARM"
637
638 # elif defined(__ICCRX__)
639 #  define ARCHITECTURE_ID "RX"
640
641 # elif defined(__ICCRH850__)
642 #  define ARCHITECTURE_ID "RH850"
643
644 # elif defined(__ICCRL78__)
645 #  define ARCHITECTURE_ID "RL78"
646
647 # elif defined(__ICCRISCV__)
648 #  define ARCHITECTURE_ID "RISCV"
649
650 # elif defined(__ICCAVR__)
651 #  define ARCHITECTURE_ID "AVR"
652
653 # elif defined(__ICC430__)
654 #  define ARCHITECTURE_ID "MSP430"
655
656 # elif defined(__ICCV850__)
657 #  define ARCHITECTURE_ID "V850"
658
659 # elif defined(__ICC8051__)
660 #  define ARCHITECTURE_ID "8051"
661
662 # elif defined(__ICCSTM8__)
663 #  define ARCHITECTURE_ID "STM8"
664
665 # else /* unknown architecture */
666 #  define ARCHITECTURE_ID ""
667 # endif
668
669 #elif defined(__ghs__)
670 # if defined(__PPC64__)
671 #  define ARCHITECTURE_ID "PPC64"
672
673 # elif defined(__ppc__)
674 #  define ARCHITECTURE_ID "PPC"
675
676 # elif defined(__ARM__)
677 #  define ARCHITECTURE_ID "ARM"
678
679 # elif defined(__x86_64__)
680 #  define ARCHITECTURE_ID "x64"
681
682 # elif defined(__i386__)
683 #  define ARCHITECTURE_ID "X86"
684
685 # else /* unknown architecture */
686 #  define ARCHITECTURE_ID ""
687 # endif
688
689 #elif defined(__clang__) && defined(__ti__)
690 # if defined(__ARM_ARCH)
691 #  define ARCHITECTURE_ID "Arm"
692
693 # else /* unknown architecture */
694 #  define ARCHITECTURE_ID ""
695 # endif
696
697 #elif defined(__TI_COMPILER_VERSION__)
698 # if defined(__TI_ARM__)
699 #  define ARCHITECTURE_ID "ARM"
700
701 # elif defined(__MSP430__)
702 #  define ARCHITECTURE_ID "MSP430"
703
704 # elif defined(__TMS320C28XX__)
705 #  define ARCHITECTURE_ID "TMS320C28x"
706
707 # elif defined(__TMS320C6X__) || defined(_TMS320C6X)
708 #  define ARCHITECTURE_ID "TMS320C6x"
709
710 # else /* unknown architecture */
711 #  define ARCHITECTURE_ID ""
712 # endif
713
714 # elif defined(__ADSPSHARC__)
715 #  define ARCHITECTURE_ID "SHARC"
716
717 # elif defined(__ADSPBLACKFIN__)
718 #  define ARCHITECTURE_ID "Blackfin"
719
720 #elif defined(__TASKING__)
721
722 # if defined(__CTC__) || defined(__CPTC__)
723 #  define ARCHITECTURE_ID "TriCore"
724
725 # elif defined(__CMCS__)
726 #  define ARCHITECTURE_ID "MCS"
727
728 # elif defined(__CARM__)
729 #  define ARCHITECTURE_ID "ARM"
730
731 # elif defined(__CARC__)
732 #  define ARCHITECTURE_ID "ARC"
733
734 # elif defined(__C51__)
735 #  define ARCHITECTURE_ID "8051"
736
737 # elif defined(__CPCP__)
738 #  define ARCHITECTURE_ID "PCP"
739
740 # else
741 #  define ARCHITECTURE_ID ""
742 # endif
743
744 #else
745 #  define ARCHITECTURE_ID
746 #endif
747
748 /* Convert integer to decimal digit literals.  */
749 #define DEC(n)                   \
750   ('0' + (((n) / 10000000)%10)), \
751   ('0' + (((n) / 1000000)%10)),  \
752   ('0' + (((n) / 100000)%10)),   \
753   ('0' + (((n) / 10000)%10)),    \
754   ('0' + (((n) / 1000)%10)),     \
755   ('0' + (((n) / 100)%10)),      \
756   ('0' + (((n) / 10)%10)),       \
757   ('0' +  ((n) % 10))
758
759 /* Convert integer to hex digit literals.  */
760 #define HEX(n)             \
761   ('0' + ((n)>>28 & 0xF)), \
762   ('0' + ((n)>>24 & 0xF)), \
763   ('0' + ((n)>>20 & 0xF)), \
764   ('0' + ((n)>>16 & 0xF)), \
765   ('0' + ((n)>>12 & 0xF)), \
766   ('0' + ((n)>>8  & 0xF)), \
767   ('0' + ((n)>>4  & 0xF)), \
768   ('0' + ((n)     & 0xF))
769
770 /* Construct a string literal encoding the version number. */
771 #ifdef COMPILER_VERSION
772 char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
773
774 /* Construct a string literal encoding the version number components. */
775 #elif defined(COMPILER_VERSION_MAJOR)
776 char const info_version[] = {
777   'I', 'N', 'F', 'O', ':',
778   'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
779   COMPILER_VERSION_MAJOR,
780 # ifdef COMPILER_VERSION_MINOR
781   '.', COMPILER_VERSION_MINOR,
782 #  ifdef COMPILER_VERSION_PATCH
783    '.', COMPILER_VERSION_PATCH,
784 #   ifdef COMPILER_VERSION_TWEAK
785     '.', COMPILER_VERSION_TWEAK,
786 #   endif
787 #  endif
788 # endif
789   ']','\0'};
790 #endif
791
792 /* Construct a string literal encoding the internal version number. */
793 #ifdef COMPILER_VERSION_INTERNAL
794 char const info_version_internal[] = {
795   'I', 'N', 'F', 'O', ':',
796   'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
797   'i','n','t','e','r','n','a','l','[',
798   COMPILER_VERSION_INTERNAL,']','\0'};
799 #elif defined(COMPILER_VERSION_INTERNAL_STR)
800 char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
801 #endif
802
803 /* Construct a string literal encoding the version number components. */
804 #ifdef SIMULATE_VERSION_MAJOR
805 char const info_simulate_version[] = {
806   'I', 'N', 'F', 'O', ':',
807   's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
808   SIMULATE_VERSION_MAJOR,
809 # ifdef SIMULATE_VERSION_MINOR
810   '.', SIMULATE_VERSION_MINOR,
811 #  ifdef SIMULATE_VERSION_PATCH
812    '.', SIMULATE_VERSION_PATCH,
813 #   ifdef SIMULATE_VERSION_TWEAK
814     '.', SIMULATE_VERSION_TWEAK,
815 #   endif
816 #  endif
817 # endif
818   ']','\0'};
819 #endif
820
821 /* Construct the string literal in pieces to prevent the source from
822    getting matched.  Store it in a pointer rather than an array
823    because some compilers will just produce instructions to fill the
824    array rather than assigning a pointer to a static array.  */
825 char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
826 char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
827
828
829
830 #define C_STD_99 199901L
831 #define C_STD_11 201112L
832 #define C_STD_17 201710L
833 #define C_STD_23 202311L
834
835 #ifdef __STDC_VERSION__
836 #  define C_STD __STDC_VERSION__
837 #endif
838
839 #if !defined(__STDC__) && !defined(__clang__)
840 # if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
841 #  define C_VERSION "90"
842 # else
843 #  define C_VERSION
844 # endif
845 #elif C_STD > C_STD_17
846 # define C_VERSION "23"
847 #elif C_STD > C_STD_11
848 # define C_VERSION "17"
849 #elif C_STD > C_STD_99
850 # define C_VERSION "11"
851 #elif C_STD >= C_STD_99
852 # define C_VERSION "99"
853 #else
854 # define C_VERSION "90"
855 #endif
856 const char* info_language_standard_default =
857   "INFO" ":" "standard_default[" C_VERSION "]";
858
859 const char* info_language_extensions_default = "INFO" ":" "extensions_default["
860 #if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) ||           \
861      defined(__TI_COMPILER_VERSION__)) &&                                     \
862   !defined(__STRICT_ANSI__)
863   "ON"
864 #else
865   "OFF"
866 #endif
867 "]";
868
869 /*--------------------------------------------------------------------------*/
870
871 #ifdef ID_VOID_MAIN
872 void main() {}
873 #else
874 # if defined(__CLASSIC_C__)
875 int main(argc, argv) int argc; char *argv[];
876 # else
877 int main(int argc, char* argv[])
878 # endif
879 {
880   int require = 0;
881   require += info_compiler[argc];
882   require += info_platform[argc];
883   require += info_arch[argc];
884 #ifdef COMPILER_VERSION_MAJOR
885   require += info_version[argc];
886 #endif
887 #ifdef COMPILER_VERSION_INTERNAL
888   require += info_version_internal[argc];
889 #endif
890 #ifdef SIMULATE_ID
891   require += info_simulate[argc];
892 #endif
893 #ifdef SIMULATE_VERSION_MAJOR
894   require += info_simulate_version[argc];
895 #endif
896 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
897   require += info_cray[argc];
898 #endif
899   require += info_language_standard_default[argc];
900   require += info_language_extensions_default[argc];
901   (void)argv;
902   return require;
903 }
904 #endif