src/share/vm/utilities/macros.hpp

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 6503
a9becfeecd1b
parent 1
2d8a650513c2
child 7994
04ff2f6cd0eb
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 *
aoqi@0 23 */
aoqi@0 24
aoqi@1 25 /*
aoqi@1 26 * This file has been modified by Loongson Technology in 2015. These
aoqi@1 27 * modifications are Copyright (c) 2015 Loongson Technology, and are made
aoqi@1 28 * available on the same license terms set forth above.
aoqi@1 29 */
aoqi@1 30
aoqi@0 31 #ifndef SHARE_VM_UTILITIES_MACROS_HPP
aoqi@0 32 #define SHARE_VM_UTILITIES_MACROS_HPP
aoqi@0 33
aoqi@0 34 // Use this to mark code that needs to be cleaned up (for development only)
aoqi@0 35 #define NEEDS_CLEANUP
aoqi@0 36
aoqi@0 37 // Makes a string of the argument (which is not macro-expanded)
aoqi@0 38 #define STR(a) #a
aoqi@0 39
aoqi@0 40 // Makes a string of the macro expansion of a
aoqi@0 41 #define XSTR(a) STR(a)
aoqi@0 42
aoqi@0 43 // -DINCLUDE_<something>=0 | 1 can be specified on the command line to include
aoqi@0 44 // or exclude functionality.
aoqi@0 45
aoqi@0 46 #ifndef INCLUDE_JVMTI
aoqi@0 47 #define INCLUDE_JVMTI 1
aoqi@0 48 #endif // INCLUDE_JVMTI
aoqi@0 49
aoqi@0 50 #if INCLUDE_JVMTI
aoqi@0 51 #define JVMTI_ONLY(x) x
aoqi@0 52 #define NOT_JVMTI(x)
aoqi@0 53 #define NOT_JVMTI_RETURN
aoqi@0 54 #define NOT_JVMTI_RETURN_(code) /* next token must be ; */
aoqi@0 55 #else
aoqi@0 56 #define JVMTI_ONLY(x)
aoqi@0 57 #define NOT_JVMTI(x) x
aoqi@0 58 #define NOT_JVMTI_RETURN { return; }
aoqi@0 59 #define NOT_JVMTI_RETURN_(code) { return code; }
aoqi@0 60 #endif // INCLUDE_JVMTI
aoqi@0 61
aoqi@0 62 #ifndef INCLUDE_FPROF
aoqi@0 63 #define INCLUDE_FPROF 1
aoqi@0 64 #endif
aoqi@0 65
aoqi@0 66 #if INCLUDE_FPROF
aoqi@0 67 #define NOT_FPROF_RETURN /* next token must be ; */
aoqi@0 68 #define NOT_FPROF_RETURN_(code) /* next token must be ; */
aoqi@0 69 #else
aoqi@0 70 #define NOT_FPROF_RETURN {}
aoqi@0 71 #define NOT_FPROF_RETURN_(code) { return code; }
aoqi@0 72 #endif // INCLUDE_FPROF
aoqi@0 73
aoqi@0 74 #ifndef INCLUDE_VM_STRUCTS
aoqi@0 75 #define INCLUDE_VM_STRUCTS 1
aoqi@0 76 #endif
aoqi@0 77
aoqi@0 78 #if INCLUDE_VM_STRUCTS
aoqi@0 79 #define NOT_VM_STRUCTS_RETURN /* next token must be ; */
aoqi@0 80 #define NOT_VM_STRUCTS_RETURN_(code) /* next token must be ; */
aoqi@0 81 #else
aoqi@0 82 #define NOT_VM_STRUCTS_RETURN {}
aoqi@0 83 #define NOT_VM_STRUCTS_RETURN_(code) { return code; }
aoqi@0 84 #endif // INCLUDE_VM_STRUCTS
aoqi@0 85
aoqi@0 86 #ifndef INCLUDE_JNI_CHECK
aoqi@0 87 #define INCLUDE_JNI_CHECK 1
aoqi@0 88 #endif
aoqi@0 89
aoqi@0 90 #if INCLUDE_JNI_CHECK
aoqi@0 91 #define NOT_JNI_CHECK_RETURN /* next token must be ; */
aoqi@0 92 #define NOT_JNI_CHECK_RETURN_(code) /* next token must be ; */
aoqi@0 93 #else
aoqi@0 94 #define NOT_JNI_CHECK_RETURN {}
aoqi@0 95 #define NOT_JNI_CHECK_RETURN_(code) { return code; }
aoqi@0 96 #endif // INCLUDE_JNI_CHECK
aoqi@0 97
aoqi@0 98 #ifndef INCLUDE_SERVICES
aoqi@0 99 #define INCLUDE_SERVICES 1
aoqi@0 100 #endif
aoqi@0 101
aoqi@0 102 #if INCLUDE_SERVICES
aoqi@0 103 #define NOT_SERVICES_RETURN /* next token must be ; */
aoqi@0 104 #define NOT_SERVICES_RETURN_(code) /* next token must be ; */
aoqi@0 105 #else
aoqi@0 106 #define NOT_SERVICES_RETURN {}
aoqi@0 107 #define NOT_SERVICES_RETURN_(code) { return code; }
aoqi@0 108 #endif // INCLUDE_SERVICES
aoqi@0 109
aoqi@0 110 #ifndef INCLUDE_CDS
aoqi@0 111 #define INCLUDE_CDS 1
aoqi@0 112 #endif
aoqi@0 113
aoqi@0 114 #if INCLUDE_CDS
aoqi@0 115 #define CDS_ONLY(x) x
aoqi@0 116 #define NOT_CDS(x)
aoqi@0 117 #define NOT_CDS_RETURN /* next token must be ; */
aoqi@0 118 #define NOT_CDS_RETURN_(code) /* next token must be ; */
aoqi@0 119 #else
aoqi@0 120 #define CDS_ONLY(x)
aoqi@0 121 #define NOT_CDS(x) x
aoqi@0 122 #define NOT_CDS_RETURN {}
aoqi@0 123 #define NOT_CDS_RETURN_(code) { return code; }
aoqi@0 124 #endif // INCLUDE_CDS
aoqi@0 125
aoqi@0 126 #ifndef INCLUDE_MANAGEMENT
aoqi@0 127 #define INCLUDE_MANAGEMENT 1
aoqi@0 128 #endif // INCLUDE_MANAGEMENT
aoqi@0 129
aoqi@0 130 #if INCLUDE_MANAGEMENT
aoqi@0 131 #define NOT_MANAGEMENT_RETURN /* next token must be ; */
aoqi@0 132 #define NOT_MANAGEMENT_RETURN_(code) /* next token must be ; */
aoqi@0 133 #else
aoqi@0 134 #define NOT_MANAGEMENT_RETURN {}
aoqi@0 135 #define NOT_MANAGEMENT_RETURN_(code) { return code; }
aoqi@0 136 #endif // INCLUDE_MANAGEMENT
aoqi@0 137
aoqi@0 138 /*
aoqi@0 139 * When INCLUDE_ALL_GCS is false the only garbage collectors
aoqi@0 140 * included in the JVM are defaultNewGeneration and markCompact.
aoqi@0 141 *
aoqi@0 142 * When INCLUDE_ALL_GCS is true all garbage collectors are
aoqi@0 143 * included in the JVM.
aoqi@0 144 */
aoqi@0 145 #ifndef INCLUDE_ALL_GCS
aoqi@0 146 #define INCLUDE_ALL_GCS 1
aoqi@0 147 #endif // INCLUDE_ALL_GCS
aoqi@0 148
aoqi@0 149 #if INCLUDE_ALL_GCS
aoqi@0 150 #define NOT_ALL_GCS_RETURN /* next token must be ; */
aoqi@0 151 #define NOT_ALL_GCS_RETURN_(code) /* next token must be ; */
aoqi@0 152 #else
aoqi@0 153 #define NOT_ALL_GCS_RETURN {}
aoqi@0 154 #define NOT_ALL_GCS_RETURN_(code) { return code; }
aoqi@0 155 #endif // INCLUDE_ALL_GCS
aoqi@0 156
aoqi@0 157 #ifndef INCLUDE_NMT
aoqi@0 158 #define INCLUDE_NMT 1
aoqi@0 159 #endif // INCLUDE_NMT
aoqi@0 160
aoqi@0 161 #if INCLUDE_NMT
aoqi@0 162 #define NOT_NMT_RETURN /* next token must be ; */
aoqi@0 163 #define NOT_NMT_RETURN_(code) /* next token must be ; */
aoqi@0 164 #else
aoqi@0 165 #define NOT_NMT_RETURN {}
aoqi@0 166 #define NOT_NMT_RETURN_(code) { return code; }
aoqi@0 167 #endif // INCLUDE_NMT
aoqi@0 168
aoqi@0 169 #ifndef INCLUDE_TRACE
aoqi@0 170 #define INCLUDE_TRACE 1
aoqi@0 171 #endif // INCLUDE_TRACE
aoqi@0 172
aoqi@0 173 // COMPILER1 variant
aoqi@0 174 #ifdef COMPILER1
aoqi@0 175 #ifdef COMPILER2
aoqi@0 176 #define TIERED
aoqi@0 177 #endif
aoqi@0 178 #define COMPILER1_PRESENT(code) code
aoqi@0 179 #else // COMPILER1
aoqi@0 180 #define COMPILER1_PRESENT(code)
aoqi@0 181 #endif // COMPILER1
aoqi@0 182
aoqi@0 183 // COMPILER2 variant
aoqi@0 184 #ifdef COMPILER2
aoqi@0 185 #define COMPILER2_PRESENT(code) code
aoqi@0 186 #define NOT_COMPILER2(code)
aoqi@0 187 #else // COMPILER2
aoqi@0 188 #define COMPILER2_PRESENT(code)
aoqi@0 189 #define NOT_COMPILER2(code) code
aoqi@0 190 #endif // COMPILER2
aoqi@0 191
aoqi@0 192 #ifdef TIERED
aoqi@0 193 #define TIERED_ONLY(code) code
aoqi@0 194 #define NOT_TIERED(code)
aoqi@0 195 #else
aoqi@0 196 #define TIERED_ONLY(code)
aoqi@0 197 #define NOT_TIERED(code) code
aoqi@0 198 #endif // TIERED
aoqi@0 199
aoqi@0 200
aoqi@0 201 // PRODUCT variant
aoqi@0 202 #ifdef PRODUCT
aoqi@0 203 #define PRODUCT_ONLY(code) code
aoqi@0 204 #define NOT_PRODUCT(code)
aoqi@0 205 #define NOT_PRODUCT_ARG(arg)
aoqi@0 206 #define PRODUCT_RETURN {}
aoqi@0 207 #define PRODUCT_RETURN0 { return 0; }
aoqi@0 208 #define PRODUCT_RETURN_(code) { code }
aoqi@0 209 #else // PRODUCT
aoqi@0 210 #define PRODUCT_ONLY(code)
aoqi@0 211 #define NOT_PRODUCT(code) code
aoqi@0 212 #define NOT_PRODUCT_ARG(arg) arg,
aoqi@0 213 #define PRODUCT_RETURN /*next token must be ;*/
aoqi@0 214 #define PRODUCT_RETURN0 /*next token must be ;*/
aoqi@0 215 #define PRODUCT_RETURN_(code) /*next token must be ;*/
aoqi@0 216 #endif // PRODUCT
aoqi@0 217
aoqi@0 218 #ifdef CHECK_UNHANDLED_OOPS
aoqi@0 219 #define CHECK_UNHANDLED_OOPS_ONLY(code) code
aoqi@0 220 #define NOT_CHECK_UNHANDLED_OOPS(code)
aoqi@0 221 #else
aoqi@0 222 #define CHECK_UNHANDLED_OOPS_ONLY(code)
aoqi@0 223 #define NOT_CHECK_UNHANDLED_OOPS(code) code
aoqi@0 224 #endif // CHECK_UNHANDLED_OOPS
aoqi@0 225
aoqi@0 226 #ifdef CC_INTERP
aoqi@0 227 #define CC_INTERP_ONLY(code) code
aoqi@0 228 #define NOT_CC_INTERP(code)
aoqi@0 229 #else
aoqi@0 230 #define CC_INTERP_ONLY(code)
aoqi@0 231 #define NOT_CC_INTERP(code) code
aoqi@0 232 #endif // CC_INTERP
aoqi@0 233
aoqi@0 234 #ifdef ASSERT
aoqi@0 235 #define DEBUG_ONLY(code) code
aoqi@0 236 #define NOT_DEBUG(code)
aoqi@0 237 #define NOT_DEBUG_RETURN /*next token must be ;*/
aoqi@0 238 // Historical.
aoqi@0 239 #define debug_only(code) code
aoqi@0 240 #else // ASSERT
aoqi@0 241 #define DEBUG_ONLY(code)
aoqi@0 242 #define NOT_DEBUG(code) code
aoqi@0 243 #define NOT_DEBUG_RETURN {}
aoqi@0 244 #define debug_only(code)
aoqi@0 245 #endif // ASSERT
aoqi@0 246
aoqi@0 247 #ifdef _LP64
aoqi@0 248 #define LP64_ONLY(code) code
aoqi@0 249 #define NOT_LP64(code)
aoqi@0 250 #else // !_LP64
aoqi@0 251 #define LP64_ONLY(code)
aoqi@0 252 #define NOT_LP64(code) code
aoqi@0 253 #endif // _LP64
aoqi@0 254
aoqi@0 255 #ifdef LINUX
aoqi@0 256 #define LINUX_ONLY(code) code
aoqi@0 257 #define NOT_LINUX(code)
aoqi@0 258 #else
aoqi@0 259 #define LINUX_ONLY(code)
aoqi@0 260 #define NOT_LINUX(code) code
aoqi@0 261 #endif
aoqi@0 262
aoqi@0 263 #ifdef AIX
aoqi@0 264 #define AIX_ONLY(code) code
aoqi@0 265 #define NOT_AIX(code)
aoqi@0 266 #else
aoqi@0 267 #define AIX_ONLY(code)
aoqi@0 268 #define NOT_AIX(code) code
aoqi@0 269 #endif
aoqi@0 270
aoqi@0 271 #ifdef SOLARIS
aoqi@0 272 #define SOLARIS_ONLY(code) code
aoqi@0 273 #define NOT_SOLARIS(code)
aoqi@0 274 #else
aoqi@0 275 #define SOLARIS_ONLY(code)
aoqi@0 276 #define NOT_SOLARIS(code) code
aoqi@0 277 #endif
aoqi@0 278
aoqi@0 279 #ifdef _WINDOWS
aoqi@0 280 #define WINDOWS_ONLY(code) code
aoqi@0 281 #define NOT_WINDOWS(code)
aoqi@0 282 #else
aoqi@0 283 #define WINDOWS_ONLY(code)
aoqi@0 284 #define NOT_WINDOWS(code) code
aoqi@0 285 #endif
aoqi@0 286
aoqi@0 287 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
aoqi@0 288 #define BSD_ONLY(code) code
aoqi@0 289 #define NOT_BSD(code)
aoqi@0 290 #else
aoqi@0 291 #define BSD_ONLY(code)
aoqi@0 292 #define NOT_BSD(code) code
aoqi@0 293 #endif
aoqi@0 294
aoqi@0 295 #ifdef _WIN64
aoqi@0 296 #define WIN64_ONLY(code) code
aoqi@0 297 #define NOT_WIN64(code)
aoqi@0 298 #else
aoqi@0 299 #define WIN64_ONLY(code)
aoqi@0 300 #define NOT_WIN64(code) code
aoqi@0 301 #endif
aoqi@0 302
aoqi@0 303 #if defined(ZERO)
aoqi@0 304 #define ZERO_ONLY(code) code
aoqi@0 305 #define NOT_ZERO(code)
aoqi@0 306 #else
aoqi@0 307 #define ZERO_ONLY(code)
aoqi@0 308 #define NOT_ZERO(code) code
aoqi@0 309 #endif
aoqi@0 310
aoqi@0 311 #if defined(SHARK)
aoqi@0 312 #define SHARK_ONLY(code) code
aoqi@0 313 #define NOT_SHARK(code)
aoqi@0 314 #else
aoqi@0 315 #define SHARK_ONLY(code)
aoqi@0 316 #define NOT_SHARK(code) code
aoqi@0 317 #endif
aoqi@0 318
aoqi@0 319 #if defined(IA32) || defined(AMD64)
aoqi@0 320 #define X86
aoqi@0 321 #define X86_ONLY(code) code
aoqi@0 322 #define NOT_X86(code)
aoqi@0 323 #else
aoqi@0 324 #undef X86
aoqi@0 325 #define X86_ONLY(code)
aoqi@0 326 #define NOT_X86(code) code
aoqi@0 327 #endif
aoqi@0 328
aoqi@0 329 #ifdef IA32
aoqi@0 330 #define IA32_ONLY(code) code
aoqi@0 331 #define NOT_IA32(code)
aoqi@0 332 #else
aoqi@0 333 #define IA32_ONLY(code)
aoqi@0 334 #define NOT_IA32(code) code
aoqi@0 335 #endif
aoqi@0 336
aoqi@0 337 // This is a REALLY BIG HACK, but on AIX <sys/systemcfg.h> unconditionally defines IA64.
aoqi@0 338 // At least on AIX 7.1 this is a real problem because 'systemcfg.h' is indirectly included
aoqi@0 339 // by 'pthread.h' and other common system headers.
aoqi@0 340
aoqi@0 341 #if defined(IA64) && !defined(AIX)
aoqi@0 342 #define IA64_ONLY(code) code
aoqi@0 343 #define NOT_IA64(code)
aoqi@0 344 #else
aoqi@0 345 #define IA64_ONLY(code)
aoqi@0 346 #define NOT_IA64(code) code
aoqi@0 347 #endif
aoqi@0 348
aoqi@0 349 #ifdef AMD64
aoqi@0 350 #define AMD64_ONLY(code) code
aoqi@0 351 #define NOT_AMD64(code)
aoqi@0 352 #else
aoqi@0 353 #define AMD64_ONLY(code)
aoqi@0 354 #define NOT_AMD64(code) code
aoqi@0 355 #endif
aoqi@0 356
aoqi@0 357 #ifdef SPARC
aoqi@0 358 #define SPARC_ONLY(code) code
aoqi@0 359 #define NOT_SPARC(code)
aoqi@0 360 #else
aoqi@0 361 #define SPARC_ONLY(code)
aoqi@0 362 #define NOT_SPARC(code) code
aoqi@0 363 #endif
aoqi@0 364
aoqi@1 365 #ifdef MIPS64
aoqi@1 366 #define MIPS64_ONLY(code) code
aoqi@1 367 #define NOT_MIPS64(code)
aoqi@1 368 #else
aoqi@1 369 #define MIPS64_ONLY(code)
aoqi@1 370 #define NOT_MIPS64(code) code
aoqi@1 371 #endif
aoqi@1 372
aoqi@0 373 #if defined(PPC32) || defined(PPC64)
aoqi@0 374 #ifndef PPC
aoqi@0 375 #define PPC
aoqi@0 376 #endif
aoqi@0 377 #define PPC_ONLY(code) code
aoqi@0 378 #define NOT_PPC(code)
aoqi@0 379 #else
aoqi@0 380 #undef PPC
aoqi@0 381 #define PPC_ONLY(code)
aoqi@0 382 #define NOT_PPC(code) code
aoqi@0 383 #endif
aoqi@0 384
aoqi@0 385 #ifdef PPC32
aoqi@0 386 #define PPC32_ONLY(code) code
aoqi@0 387 #define NOT_PPC32(code)
aoqi@0 388 #else
aoqi@0 389 #define PPC32_ONLY(code)
aoqi@0 390 #define NOT_PPC32(code) code
aoqi@0 391 #endif
aoqi@0 392
aoqi@0 393 #ifdef PPC64
aoqi@0 394 #define PPC64_ONLY(code) code
aoqi@0 395 #define NOT_PPC64(code)
aoqi@0 396 #else
aoqi@0 397 #define PPC64_ONLY(code)
aoqi@0 398 #define NOT_PPC64(code) code
aoqi@0 399 #endif
aoqi@0 400
aoqi@0 401 #ifdef E500V2
aoqi@0 402 #define E500V2_ONLY(code) code
aoqi@0 403 #define NOT_E500V2(code)
aoqi@0 404 #else
aoqi@0 405 #define E500V2_ONLY(code)
aoqi@0 406 #define NOT_E500V2(code) code
aoqi@0 407 #endif
aoqi@0 408
aoqi@0 409
aoqi@0 410 #ifdef ARM
aoqi@0 411 #define ARM_ONLY(code) code
aoqi@0 412 #define NOT_ARM(code)
aoqi@0 413 #else
aoqi@0 414 #define ARM_ONLY(code)
aoqi@0 415 #define NOT_ARM(code) code
aoqi@0 416 #endif
aoqi@0 417
aoqi@0 418 #ifdef JAVASE_EMBEDDED
aoqi@0 419 #define EMBEDDED_ONLY(code) code
aoqi@0 420 #define NOT_EMBEDDED(code)
aoqi@0 421 #else
aoqi@0 422 #define EMBEDDED_ONLY(code)
aoqi@0 423 #define NOT_EMBEDDED(code) code
aoqi@0 424 #endif
aoqi@0 425
aoqi@0 426 #define define_pd_global(type, name, value) const type pd_##name = value;
aoqi@0 427
aoqi@0 428 #endif // SHARE_VM_UTILITIES_MACROS_HPP

mercurial