src/share/vm/utilities/macros.hpp

Wed, 14 Oct 2020 17:44:48 +0800

author
aoqi
date
Wed, 14 Oct 2020 17:44:48 +0800
changeset 9931
fd44df5e3bc3
parent 9806
758c07667682
parent 9896
1b8c45b8216a
permissions
-rw-r--r--

Merge

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

mercurial