1 /* @(#)archdefs.h	1.15 17/11/25 Copyright 2006-2017 J. Schilling */
2 /*
3  *	Processor, instruction set and OS architecture specific defines.
4  *	The information is fetched from compiler predefinitions only.
5  *
6  *	Copyright (c) 2006-2017 J. Schilling
7  */
8 /*
9  * The contents of this file are subject to the terms of the
10  * Common Development and Distribution License, Version 1.0 only
11  * (the "License").  You may not use this file except in compliance
12  * with the License.
13  *
14  * See the file CDDL.Schily.txt in this distribution for details.
15  * A copy of the CDDL is also available via the Internet at
16  * http://www.opensource.org/licenses/cddl1.txt
17  *
18  * When distributing Covered Code, include this CDDL HEADER in each
19  * file and include the License file CDDL.Schily.txt from this distribution.
20  */
21 
22 #ifndef _SCHILY_ARCHDEFS_H
23 #define	_SCHILY_ARCHDEFS_H
24 
25 /*
26  * The code in this file only depends on compiler predefined macros.
27  * For this reason, it does not need to include schily/mconfig.h
28  */
29 
30 #if	defined(sun) || defined(__sun) || defined(__sun__)
31 #ifndef	__sun
32 #define	__sun
33 #endif
34 #endif
35 
36 #if	defined(sun2)
37 #ifndef	__mc68010
38 #define	__mc68010
39 #endif
40 #endif
41 
42 #if	defined(mc68020) || defined(__mc68020) || defined(sun3)
43 #ifndef	__mc68020
44 #define	__mc68020
45 #endif
46 #endif
47 
48 #if	defined(__mc68010) || defined(__mc68020)
49 #ifndef	__mc68000
50 #define	__mc68000
51 #endif
52 #endif
53 
54 #if	defined(i386) || defined(__i386) || defined(__i386__) || defined(_M_IX86)
55 #ifndef	__i386
56 #define	__i386
57 #endif
58 #endif
59 
60 #if	defined(__amd64) || defined(__amd64__) || \
61 	defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64)
62 #ifndef	__amd64
63 #define	__amd64
64 #endif
65 #endif
66 
67 #if	defined(__i386) || defined(__amd64)
68 #ifndef	__x86
69 #define	__x86
70 #endif
71 #endif
72 
73 #if	defined(sparc) || defined(__sparc) || defined(__sparc__)
74 #ifndef	__sparc
75 #define	__sparc
76 #endif
77 #endif
78 
79 #if	defined(__sparcv9) || defined(__sparcv9__)
80 #ifndef	__sparc
81 #define	__sparc
82 #endif
83 #ifndef	__sparcv9
84 #define	__sparcv9
85 #endif
86 #endif
87 
88 #if	defined(__sparc) && defined(__arch64__)
89 #ifndef	__sparcv9
90 #define	__sparcv9
91 #endif
92 #endif
93 
94 #if	defined(SOL2) || defined(SOL2) || \
95 	defined(S5R4) || defined(__S5R4) || defined(SVR4)
96 #	ifndef	__SVR4
97 #		define	__SVR4
98 #	endif
99 #endif
100 
101 #if	defined(sun2) || defined(sun3) || defined(__sun)
102 #ifndef	__sun
103 #define	__sun
104 #endif
105 #ifndef	__GNUC__
106 #ifndef	__IS_SUNPRO_C
107 #ifdef	__SVR4
108 #define	__IS_SUNPRO_C
109 #else
110 #define	__IS_SUN_C
111 #endif	/* __SVR4	*/
112 #endif	/* !__IS_SUNPRO_C */
113 #endif	/* !__GNUC__	*/
114 #endif	/* __sun	*/
115 
116 
117 /*
118  * SunOS 4 specific defines
119  */
120 #if	defined(__sun) && !defined(__SVR4)
121 
122 #define	__SUNOS4
123 
124 #if	defined(__mc68000)
125 #define	__SUNOS4_MC68000
126 #ifdef	__GNUC__
127 #define	__SUNOS4_MC68000_GCC32
128 #define	__JS_ARCH_DEFINED
129 #endif
130 #ifdef	__IS_SUN_C
131 #define	__SUNOS4_MC68000_CC32
132 #define	__JS_ARCH_DEFINED
133 #endif
134 #endif	/* __mc68000	*/
135 
136 #if	defined(__sparc)
137 #define	__SUNOS4_SPARC
138 #ifdef	__GNUC__
139 #define	__SUNOS4_SPARC_GCC32
140 #define	__JS_ARCH_DEFINED
141 #endif
142 #if	defined(__IS_SUN_C) || defined(__SUNPRO_C) || defined(__IS_SUNPRO_C)
143 #define	__SUNOS4_SPARC_CC32
144 #define	__JS_ARCH_DEFINED
145 #endif
146 #endif	/* __sparc	*/
147 
148 #endif	/* SunOS 4 */
149 
150 
151 /*
152  * SunOS 5 specific defines
153  */
154 #if	defined(__sun) && defined(__SVR4)
155 
156 #define	__SUNOS5
157 
158 #if	defined(__sparc)
159 #ifdef	__GNUC__
160 #ifdef	__sparcv9
161 #define	__SUNOS5_SPARC_GCC64
162 #else
163 #define	__SUNOS5_SPARC_GCC32
164 #endif
165 #define	__JS_ARCH_DEFINED
166 #endif
167 #if	defined(__SUNPRO_C) || defined(__IS_SUNPRO_C)
168 #ifdef	__sparcv9
169 #define	__SUNOS5_SPARC_CC64
170 #else
171 #define	__SUNOS5_SPARC_CC32
172 #endif
173 #define	__JS_ARCH_DEFINED
174 #endif
175 #endif	/* __sparc	*/
176 
177 #if	defined(__x86)
178 #ifdef	__GNUC__
179 #ifdef	__amd64
180 #define	__SUNOS5_X86_GCC64
181 #else
182 #define	__SUNOS5_X86_GCC32
183 #endif
184 #define	__JS_ARCH_DEFINED
185 #endif
186 #if	defined(__SUNPRO_C) || defined(__IS_SUNPRO_C)
187 #ifdef	__amd64
188 #define	__SUNOS5_X86_CC64
189 #else
190 #define	__SUNOS5_X86_CC32
191 #endif
192 #define	__JS_ARCH_DEFINED
193 #endif
194 #endif	/* __x86	*/
195 
196 #endif	/* SunOS 5 */
197 
198 /*
199  * HP-UX specific defines
200  */
201 #if	defined(__hpux)
202 
203 #if	defined(__hppa)
204 #ifdef	__GNUC__
205 #ifdef	__LP64__		/* This may be wrong! */
206 #define	__HPUX_HPPA_GCC64
207 #else
208 #define	__HPUX_HPPA_GCC32
209 #endif
210 #define	__JS_ARCH_DEFINED
211 #endif
212 #if	!defined(__GNUC__)
213 #ifdef	__LP64__
214 #define	__HPUX_HPPA_CC64
215 #else
216 #define	__HPUX_HPPA_CC32
217 #endif
218 #define	__JS_ARCH_DEFINED
219 #endif
220 #endif	/* __hppa	*/
221 
222 #endif	/* HP-UX */
223 
224 /*
225  * Linux specific defines
226  */
227 #if	defined(__linux)
228 
229 #if	defined(__arm__)
230 #ifdef	__GNUC__
231 #ifdef	__ARM_ARCH_5TE__
232 #define	__LINUX_ARMV5TEJL_GCC32
233 #define	__JS_ARCH_DEFINED
234 #endif
235 #ifndef	__JS_ARCH_DEFINED
236 #ifdef	__ARM_ARCH_6__
237 #define	__LINUX_ARMV6L_GCC32
238 #define	__JS_ARCH_DEFINED
239 #endif
240 #endif
241 #ifndef	__JS_ARCH_DEFINED
242 #ifdef	__ARM_ARCH_5__
243 #define	__LINUX_ARMV5L_GCC32
244 #define	__JS_ARCH_DEFINED
245 #endif
246 #endif
247 #endif	/* __GNUC__	*/
248 #endif	/* __arm__	*/
249 
250 #if	defined(__i386__) || defined(i386)
251 #ifdef	__GNUC__
252 #define	__LINUX_I386_GCC32
253 #define	__JS_ARCH_DEFINED
254 #endif
255 #endif	/* __i386__	*/
256 #if	defined(__amd64__) || defined(__amd64)
257 #ifdef	__GNUC__
258 #define	__LINUX_amd64_GCC64
259 #define	__JS_ARCH_DEFINED
260 #endif
261 #endif	/* __amd64__	*/
262 
263 #endif	/* Linux */
264 
265 /*
266  * MS-WIN specific defines
267  *
268  * cl defines one of:
269  *	_M_ALPHA
270  *	_M_IX86
271  *	_M_AMD64
272  *	_M_M68K
273  *	_M_PPC		PPC in general
274  *	_M_MPPC		Power Macintosh
275  *	_M_MRX000	Mips
276  *	_M_IA64		Itanium
277  */
278 #if	defined(_MSC_VER) && (defined(_X86_) || defined(_M_IX86))
279 #define	__MSWIN_X86_CL32
280 #define	__JS_ARCH_DEFINED
281 #endif
282 
283 #if defined(__CYGWIN32__) || defined(__CYGWIN__)
284 #define	__CYGWIN_X86_GCC
285 #define	__JS_ARCH_DEFINED
286 #endif
287 
288 #endif	/* _SCHILY_ARCHDEFS_H */
289