macros.hpp revision 1472:c18cbe5936b8
1/*
2 * Copyright (c) 1997, 2009, 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// Use this to mark code that needs to be cleaned up (for development only)
26#define NEEDS_CLEANUP
27
28// Makes a string of the argument (which is not macro-expanded)
29#define STR(a)  #a
30
31// Makes a string of the macro expansion of a
32#define XSTR(a) STR(a)
33
34// KERNEL variant
35#ifdef KERNEL
36#define COMPILER1
37#define SERIALGC
38
39#define JVMTI_KERNEL
40#define FPROF_KERNEL
41#define VM_STRUCTS_KERNEL
42#define JNICHECK_KERNEL
43#define SERVICES_KERNEL
44
45#define KERNEL_RETURN        {}
46#define KERNEL_RETURN_(code) { code }
47
48#else  // KERNEL
49
50#define KERNEL_RETURN        /* next token must be ; */
51#define KERNEL_RETURN_(code) /* next token must be ; */
52
53#endif // KERNEL
54
55// COMPILER1 variant
56#ifdef COMPILER1
57#ifdef COMPILER2
58  #define TIERED
59#endif
60#define COMPILER1_PRESENT(code) code
61#else // COMPILER1
62#define COMPILER1_PRESENT(code)
63#endif // COMPILER1
64
65// COMPILER2 variant
66#ifdef COMPILER2
67#define COMPILER2_PRESENT(code) code
68#define NOT_COMPILER2(code)
69#else // COMPILER2
70#define COMPILER2_PRESENT(code)
71#define NOT_COMPILER2(code) code
72#endif // COMPILER2
73
74
75// PRODUCT variant
76#ifdef PRODUCT
77#define PRODUCT_ONLY(code) code
78#define NOT_PRODUCT(code)
79#define PRODUCT_RETURN  {}
80#define PRODUCT_RETURN0 { return 0; }
81#define PRODUCT_RETURN_(code) { code }
82#else // PRODUCT
83#define PRODUCT_ONLY(code)
84#define NOT_PRODUCT(code) code
85#define PRODUCT_RETURN  /*next token must be ;*/
86#define PRODUCT_RETURN0 /*next token must be ;*/
87#define PRODUCT_RETURN_(code)  /*next token must be ;*/
88#endif // PRODUCT
89
90#ifdef CHECK_UNHANDLED_OOPS
91#define CHECK_UNHANDLED_OOPS_ONLY(code) code
92#define NOT_CHECK_UNHANDLED_OOPS(code)
93#else
94#define CHECK_UNHANDLED_OOPS_ONLY(code)
95#define NOT_CHECK_UNHANDLED_OOPS(code)  code
96#endif // CHECK_UNHANDLED_OOPS
97
98#ifdef CC_INTERP
99#define CC_INTERP_ONLY(code) code
100#define NOT_CC_INTERP(code)
101#else
102#define CC_INTERP_ONLY(code)
103#define NOT_CC_INTERP(code) code
104#endif // CC_INTERP
105
106#ifdef ASSERT
107#define DEBUG_ONLY(code) code
108#define NOT_DEBUG(code)
109#define NOT_DEBUG_RETURN  /*next token must be ;*/
110// Historical.
111#define debug_only(code) code
112#else // ASSERT
113#define DEBUG_ONLY(code)
114#define NOT_DEBUG(code) code
115#define NOT_DEBUG_RETURN {}
116#define debug_only(code)
117#endif // ASSERT
118
119#ifdef  _LP64
120#define LP64_ONLY(code) code
121#define NOT_LP64(code)
122#else  // !_LP64
123#define LP64_ONLY(code)
124#define NOT_LP64(code) code
125#endif // _LP64
126
127#ifdef LINUX
128#define LINUX_ONLY(code) code
129#define NOT_LINUX(code)
130#else
131#define LINUX_ONLY(code)
132#define NOT_LINUX(code) code
133#endif
134
135#ifdef SOLARIS
136#define SOLARIS_ONLY(code) code
137#define NOT_SOLARIS(code)
138#else
139#define SOLARIS_ONLY(code)
140#define NOT_SOLARIS(code) code
141#endif
142
143#ifdef _WINDOWS
144#define WINDOWS_ONLY(code) code
145#define NOT_WINDOWS(code)
146#else
147#define WINDOWS_ONLY(code)
148#define NOT_WINDOWS(code) code
149#endif
150
151#if defined(IA32) || defined(AMD64)
152#define X86
153#define X86_ONLY(code) code
154#else
155#undef X86
156#define X86_ONLY(code)
157#endif
158
159#ifdef IA32
160#define IA32_ONLY(code) code
161#define NOT_IA32(code)
162#else
163#define IA32_ONLY(code)
164#define NOT_IA32(code) code
165#endif
166
167#ifdef IA64
168#define IA64_ONLY(code) code
169#define NOT_IA64(code)
170#else
171#define IA64_ONLY(code)
172#define NOT_IA64(code) code
173#endif
174
175#ifdef AMD64
176#define AMD64_ONLY(code) code
177#define NOT_AMD64(code)
178#else
179#define AMD64_ONLY(code)
180#define NOT_AMD64(code) code
181#endif
182
183#ifdef SPARC
184#define SPARC_ONLY(code) code
185#define NOT_SPARC(code)
186#else
187#define SPARC_ONLY(code)
188#define NOT_SPARC(code) code
189#endif
190
191#define define_pd_global(type, name, value) const type pd_##name = value;
192