annotate dyncall/dyncall_macros.h @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents d55f9d508074
children 451299d50c1a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: dyncall/dyncall_macros.h
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Platform detection macros
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
281
f5577f6bf97a - file header cleanups for release
Tassilo Philipp
parents: 268
diff changeset
9 Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 dyncall macros
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 Platform detection, specific defines and configuration.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 The purpose of this file is to provide coherent platform and compiler
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 specific defines. So instead of defines like WIN32, _OpenBSD_ or
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 __GNUC__, one should use DC__OS_Win32, DC__OS_OpenBSD or DC__C_GNU,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 respectively.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 REVISION
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 2007/12/11 initial
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 #ifndef DYNCALL_MACROS_H
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 #define DYNCALL_MACROS_H
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 /* Platform specific defines. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 /* MS Windows XP x64/Vista64 or later. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 #if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 #define DC__OS_Win64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 /* MS Windows NT/95/98/ME/2000/XP/Vista32. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__) || defined(_WINDOWS)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 #define DC__OS_Win32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 /* All the OS' based on Darwin OS (MacOS X, OpenDarwin). Note that '__APPLE__' may be defined for classic MacOS, too. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 /* __MACOSX__ is not defined in gcc assembler mode (switch: -S) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 /* @@@ TODO: Check for Classic OS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 #elif defined(__APPLE__) || defined(__Darwin__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 # define DC__OS_Darwin
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 # if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 # define DC__OS_IPhone
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 # else /* defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 # define DC__OS_MacOSX
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 /* The most popular open source Unix-like OS - Linux. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 #elif defined(__linux__) || defined(__linux) || defined(__gnu_linux__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 #define DC__OS_Linux
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 /* The most powerful open source Unix-like OS - FreeBSD. */
254
9d70178c1ded - better cpp checking whether dlinfo() is available, to also cover GLIBC based systems that don't identify as Linux (e.g. debian/k*BSD)
Tassilo Philipp
parents: 204
diff changeset
75 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) /* latter is (also) used by systems using FreeBSD kernel, e.g. Debian/kFreeBSD, which could be detected specifically by also checking for __GLIBC__ */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 #define DC__OS_FreeBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 /* The most secure open source Unix-like OS - OpenBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 #elif defined(__OpenBSD__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 #define DC__OS_OpenBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 /* The most portable open source Unix-like OS - NetBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 #elif defined(__NetBSD__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 #define DC__OS_NetBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 /* The FreeBSD fork having heavy clusterization in mind - DragonFlyBSD. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 #elif defined(__DragonFly__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 #define DC__OS_DragonFlyBSD
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 /* Sun's Unix-like OS - SunOS / Solaris. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 #elif defined(__sun__) || defined(__sun) || defined(sun)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 #define DC__OS_SunOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 /* The "Linux-like environment for Windows" - Cygwin. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 #elif defined(__CYGWIN__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 #define DC__OS_Cygwin
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 /* The "Minimalist GNU for Windows" - MinGW. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 #elif defined(__MINGW__)/*@@@*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 #define DC__OS_MinGW
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 /* The Nintendo DS (homebrew) using devkitpro. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 #elif defined(__nds__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 #define DC__OS_NDS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 /* The PlayStation Portable (homebrew) SDK. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 #elif defined(__psp__) || defined(PSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 #define DC__OS_PSP
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 /* Haiku (BeOS alike). */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 #elif defined(__HAIKU__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 #define DC__OS_BeOS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 /* The Unix successor - Plan9 from Bell Labs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 #elif defined(Plan9) || defined(__Plan9__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 #define DC__OS_Plan9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 /* Digital's Unix-like OS - VMS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 #elif defined(__vms)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 #define DC__OS_VMS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 #elif defined(__minix)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 #define DC__OS_Minix
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 #else
174
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
126
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
127 /* Unable to determine OS, which is probably ok (e.g. baremetal stuff, etc.). */
a8052efbde18 - loosened OS detection macros a bit to not bail out and thus make it easier to use dyncall on baremetal
cslag
parents: 141
diff changeset
128 #define DC__OS_UNKNOWN
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 /* Compiler specific defines. Do not change the order, because */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 /* some of the compilers define flags for compatible ones, too. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 /* Intel's C/C++ compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 #if defined(__INTEL_COMPILER)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 #define DC__C_Intel
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 /* MS C/C++ compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 #elif defined(_MSC_VER)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 #define DC__C_MSVC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 /* LLVM clang. */
268
03f0b683918a - reintroduced .note.GNU-stack section, as mentioned in prev commit
Tassilo Philipp
parents: 261
diff changeset
145 #elif defined(__clang__) || defined(__llvm__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 #define DC__C_CLANG
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 /* The GNU Compiler Collection - GCC. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 #elif defined(__GNUC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 #define DC__C_GNU
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 /* Watcom compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 #elif defined(__WATCOMC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 #define DC__C_WATCOM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 /* Portable C Compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 #elif defined(__PCC__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 #define DC__C_PCC
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 /* Sun Pro C. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 #elif defined(__SUNPRO_C)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 #define DC__C_SUNPRO
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 /* Undetected C Compiler. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 #define DC__C_UNKNOWN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 /* Architecture. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 /* Check architecture. */
31
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
174 #if defined(_M_X64_) || defined(_M_AMD64) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64)
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
175 # define DC__Arch_AMD64
6e7b1b7ad9d3 Fixed failing builds when the compiler is ICC/ICPC
Snaipe <franklinmathieu@gmail.com>
parents: 0
diff changeset
176 #elif defined(_M_IX86) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__386__) || defined(__i386)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 # define DC__Arch_Intel_x86
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 #elif defined(_M_IA64) || defined(__ia64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 # define DC__Arch_Itanium
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 #elif defined(_M_PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__ppc__) || defined(__power__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 # if defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) || defined(__powerpc64__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 # define DC__Arch_PPC64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 # define DC__Arch_PPC32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 #elif defined(__mips64__) || defined(__mips64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 # define DC__Arch_MIPS64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 #elif defined(_M_MRX000) || defined(__mips__) || defined(__mips) || defined(_mips)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 # define DC__Arch_MIPS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 #elif defined(__arm__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 # define DC__Arch_ARM
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
192 #elif defined(__aarch64__) || defined(__arm64) || defined(__arm64__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 # define DC__Arch_ARM64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 #elif defined(__sh__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195 # define DC__Arch_SuperH
180
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
196 #elif defined(__sparc) || defined(__sparc__)
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
197 # if defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || defined(__arch64__)
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
198 # define DC__Arch_Sparc64
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
199 # else
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
200 # define DC__Arch_Sparc
629cfbba5ba0 - sparc predef cleanup
cslag
parents: 179
diff changeset
201 # endif
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 /* Rough OS classification. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 #if defined(DC__OS_Win32) || defined(DC__OS_Win64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 # define DC_WINDOWS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 #elif defined(DC__OS_Plan9)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211 # define DC_PLAN9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 #elif defined(DC__OS_NDS) || defined(DC__OS_PSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 # define DC_OTHER
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215 # define DC_UNIX
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 /* Misc machine-dependent modes, ABIs, etc.. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 #if defined(__arm__) && !defined(__thumb__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223 # define DC__Arch_ARM_ARM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
224 #elif defined(__arm__) && defined(__thumb__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 # define DC__Arch_ARM_THUMB
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
226 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
227
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
228 #if defined(DC__Arch_ARM_ARM) || defined(DC__Arch_ARM_THUMB)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229 # if defined(__ARM_EABI__) || defined(DC__OS_NDS)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230 # if defined (__ARM_PCS_VFP) && (__ARM_PCS_VFP == 1)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231 # define DC__ABI_ARM_HF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
232 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
233 # define DC__ABI_ARM_EABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
234 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
235 # elif defined(__APCS_32__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
236 # define DC__ABI_ARM_OABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 # endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
238 #endif /* ARM */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
239
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
240 #if defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
241 # if defined(_ABIO32) || defined(__mips_o32) || defined(_MIPS_ARCH_MIPS1) || defined(_MIPS_ARCH_MIPS2)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
242 # define DC__ABI_MIPS_O32
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
243 # elif defined(_ABI64) || defined(__mips_n64)
112
0baf4f79a8c5 - added __mips_n64 predef detection to macros.h
cslag
parents: 101
diff changeset
244 # define DC__ABI_MIPS_N64
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 # elif defined(_ABIN32)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
246 # define DC__ABI_MIPS_N32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
247 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
248 # define DC__ABI_MIPS_EABI
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
249 # endif
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
250 /* Set extra flag to know if FP hardware ABI, default to yes, if unsure */
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
251 # if (defined(__mips_hard_float) && (__mips_hard_float == 1)) || !defined(__mips_soft_float) || (__mips_soft_float != 1)
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
252 # define DC__ABI_HARDFLOAT /* @@@ make this general for all archs? */
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
253 # else
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
254 # define DC__ABI_SOFTFLOAT
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
255 # endif
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
256 #endif /* MIPS */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
257
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
258 #if defined(DC__Arch_PPC64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
259 # if defined(_CALL_ELF)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
260 # define DC__ABI_PPC64_ELF_V _CALL_ELF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261 # else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
262 # define DC__ABI_PPC64_ELF_V 0 /* 0 means not explicitly set, otherwise this is 1 (big endian) and 2 (little endian) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263 # endif
112
0baf4f79a8c5 - added __mips_n64 predef detection to macros.h
cslag
parents: 101
diff changeset
264 #endif /* PPC64 */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
265
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
267 /* Endian detection. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
268 #if defined(DC__Arch_Intel_x86) || defined(DC__Arch_AMD64) /* always little */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
269 # define DC__Endian_LITTLE
179
b11b0735b09f - renamings: sparc_v9 -> sparc64
cslag
parents: 174
diff changeset
270 #elif defined(DC__Arch_Sparc) /* always purely big until v9 */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
271 # define DC__Endian_BIG
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
272 #else /* all others are bi-endian */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
273 /* @@@check flags used on following bi-endianness archs:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
274 DC__Arch_Itanium
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
275 DC__Arch_PPC32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
276 DC__Arch_PPC64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
277 DC__Arch_SuperH
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
278 */
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
279 # if (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 1)) || defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(MIPSEB) || defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || defined(__ARMEB__) || defined(__AARCH64EB__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
280 # define DC__Endian_BIG
302
d55f9d508074 - mips softfloat support for o32 callconv (calls and callbacks, little and big endian)
Tassilo Philipp
parents: 281
diff changeset
281 # elif (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 2)) || defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) || defined(MIPSEL) || defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || defined(__ARMEL__) || defined(__AARCH64EL__)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
282 # define DC__Endian_LITTLE
204
a74e2cd93348 - sparc64 endian detection on non-explicit platforms
Tassilo Philipp
parents: 188
diff changeset
283 # elif defined(DC__Arch_Sparc64) && !defined(__BYTE_ORDER__) /* Sparc64 default is big-endian, except if explicitly defined */
a74e2cd93348 - sparc64 endian detection on non-explicit platforms
Tassilo Philipp
parents: 188
diff changeset
284 # define DC__Endian_BIG
188
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
285 # elif defined(__BYTE_ORDER__) /* explicitly set */
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
286 # if defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
287 # define DC__Endian_BIG
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
288 # elif defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
289 # define DC__Endian_LITTLE
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
290 # endif
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
291 # endif /* no else, leave unset if not sure */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
292 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
293
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
294
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
295 /* Internal macro/tag. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
296 #if !defined(DC_API)
188
44ae5b653086 - more endian detection in macros
Tassilo Philipp
parents: 180
diff changeset
297 # define DC_API
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
298 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
299
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
300 #endif /* DYNCALL_MACROS_H */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
301