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