macros.hpp revision 2721:f08d439fab8c
1/*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef SHARE_VM_UTILITIES_MACROS_HPP
26#define SHARE_VM_UTILITIES_MACROS_HPP
27
28// Use this to mark code that needs to be cleaned up (for development only)
29#define NEEDS_CLEANUP
30
31// Makes a string of the argument (which is not macro-expanded)
32#define STR(a)  #a
33
34// Makes a string of the macro expansion of a
35#define XSTR(a) STR(a)
36
37// KERNEL variant
38#ifdef KERNEL
39#define COMPILER1
40#define SERIALGC
41
42#define JVMTI_KERNEL
43#define FPROF_KERNEL
44#define VM_STRUCTS_KERNEL
45#define JNICHECK_KERNEL
46#define SERVICES_KERNEL
47
48#define KERNEL_RETURN        {}
49#define KERNEL_RETURN_(code) { return code; }
50
51#else  // KERNEL
52
53#define KERNEL_RETURN        /* next token must be ; */
54#define KERNEL_RETURN_(code) /* next token must be ; */
55
56#endif // KERNEL
57
58// COMPILER1 variant
59#ifdef COMPILER1
60#ifdef COMPILER2
61  #define TIERED
62#endif
63#define COMPILER1_PRESENT(code) code
64#else // COMPILER1
65#define COMPILER1_PRESENT(code)
66#endif // COMPILER1
67
68// COMPILER2 variant
69#ifdef COMPILER2
70#define COMPILER2_PRESENT(code) code
71#define NOT_COMPILER2(code)
72#else // COMPILER2
73#define COMPILER2_PRESENT(code)
74#define NOT_COMPILER2(code) code
75#endif // COMPILER2
76
77#ifdef TIERED
78#define TIERED_ONLY(code) code
79#define NOT_TIERED(code)
80#else
81#define TIERED_ONLY(code)
82#define NOT_TIERED(code) code
83#endif // TIERED
84
85
86// PRODUCT variant
87#ifdef PRODUCT
88#define PRODUCT_ONLY(code) code
89#define NOT_PRODUCT(code)
90#define NOT_PRODUCT_ARG(arg)
91#define PRODUCT_RETURN  {}
92#define PRODUCT_RETURN0 { return 0; }
93#define PRODUCT_RETURN_(code) { code }
94#else // PRODUCT
95#define PRODUCT_ONLY(code)
96#define NOT_PRODUCT(code) code
97#define NOT_PRODUCT_ARG(arg) arg,
98#define PRODUCT_RETURN  /*next token must be ;*/
99#define PRODUCT_RETURN0 /*next token must be ;*/
100#define PRODUCT_RETURN_(code)  /*next token must be ;*/
101#endif // PRODUCT
102
103#ifdef CHECK_UNHANDLED_OOPS
104#define CHECK_UNHANDLED_OOPS_ONLY(code) code
105#define NOT_CHECK_UNHANDLED_OOPS(code)
106#else
107#define CHECK_UNHANDLED_OOPS_ONLY(code)
108#define NOT_CHECK_UNHANDLED_OOPS(code)  code
109#endif // CHECK_UNHANDLED_OOPS
110
111#ifdef CC_INTERP
112#define CC_INTERP_ONLY(code) code
113#define NOT_CC_INTERP(code)
114#else
115#define CC_INTERP_ONLY(code)
116#define NOT_CC_INTERP(code) code
117#endif // CC_INTERP
118
119#ifdef ASSERT
120#define DEBUG_ONLY(code) code
121#define NOT_DEBUG(code)
122#define NOT_DEBUG_RETURN  /*next token must be ;*/
123// Historical.
124#define debug_only(code) code
125#else // ASSERT
126#define DEBUG_ONLY(code)
127#define NOT_DEBUG(code) code
128#define NOT_DEBUG_RETURN {}
129#define debug_only(code)
130#endif // ASSERT
131
132#ifdef  _LP64
133#define LP64_ONLY(code) code
134#define NOT_LP64(code)
135#else  // !_LP64
136#define LP64_ONLY(code)
137#define NOT_LP64(code) code
138#endif // _LP64
139
140#ifdef LINUX
141#define LINUX_ONLY(code) code
142#define NOT_LINUX(code)
143#else
144#define LINUX_ONLY(code)
145#define NOT_LINUX(code) code
146#endif
147
148#ifdef SOLARIS
149#define SOLARIS_ONLY(code) code
150#define NOT_SOLARIS(code)
151#else
152#define SOLARIS_ONLY(code)
153#define NOT_SOLARIS(code) code
154#endif
155
156#ifdef _WINDOWS
157#define WINDOWS_ONLY(code) code
158#define NOT_WINDOWS(code)
159#else
160#define WINDOWS_ONLY(code)
161#define NOT_WINDOWS(code) code
162#endif
163
164#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
165#define BSD_ONLY(code) code
166#define NOT_BSD(code)
167#else
168#define BSD_ONLY(code)
169#define NOT_BSD(code) code
170#endif
171
172#ifdef _WIN64
173#define WIN64_ONLY(code) code
174#define NOT_WIN64(code)
175#else
176#define WIN64_ONLY(code)
177#define NOT_WIN64(code) code
178#endif
179
180#if defined(IA32) || defined(AMD64)
181#define X86
182#define X86_ONLY(code) code
183#define NOT_X86(code)
184#else
185#undef X86
186#define X86_ONLY(code)
187#define NOT_X86(code) code
188#endif
189
190#ifdef IA32
191#define IA32_ONLY(code) code
192#define NOT_IA32(code)
193#else
194#define IA32_ONLY(code)
195#define NOT_IA32(code) code
196#endif
197
198#ifdef IA64
199#define IA64_ONLY(code) code
200#define NOT_IA64(code)
201#else
202#define IA64_ONLY(code)
203#define NOT_IA64(code) code
204#endif
205
206#ifdef AMD64
207#define AMD64_ONLY(code) code
208#define NOT_AMD64(code)
209#else
210#define AMD64_ONLY(code)
211#define NOT_AMD64(code) code
212#endif
213
214#ifdef SPARC
215#define SPARC_ONLY(code) code
216#define NOT_SPARC(code)
217#else
218#define SPARC_ONLY(code)
219#define NOT_SPARC(code) code
220#endif
221
222#ifdef PPC
223#define PPC_ONLY(code) code
224#define NOT_PPC(code)
225#else
226#define PPC_ONLY(code)
227#define NOT_PPC(code) code
228#endif
229
230#ifdef E500V2
231#define E500V2_ONLY(code) code
232#define NOT_E500V2(code)
233#else
234#define E500V2_ONLY(code)
235#define NOT_E500V2(code) code
236#endif
237
238
239#ifdef ARM
240#define ARM_ONLY(code) code
241#define NOT_ARM(code)
242#else
243#define ARM_ONLY(code)
244#define NOT_ARM(code) code
245#endif
246
247#ifdef JAVASE_EMBEDDED
248#define EMBEDDED_ONLY(code) code
249#define NOT_EMBEDDED(code)
250#else
251#define EMBEDDED_ONLY(code)
252#define NOT_EMBEDDED(code) code
253#endif
254
255#define define_pd_global(type, name, value) const type pd_##name = value;
256
257#endif // SHARE_VM_UTILITIES_MACROS_HPP
258