duke@435: /* jprovino@4165: * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. duke@435: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@435: * duke@435: * This code is free software; you can redistribute it and/or modify it duke@435: * under the terms of the GNU General Public License version 2 only, as duke@435: * published by the Free Software Foundation. duke@435: * duke@435: * This code is distributed in the hope that it will be useful, but WITHOUT duke@435: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@435: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@435: * version 2 for more details (a copy is included in the LICENSE file that duke@435: * accompanied this code). duke@435: * duke@435: * You should have received a copy of the GNU General Public License version duke@435: * 2 along with this work; if not, write to the Free Software Foundation, duke@435: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@435: * trims@1907: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA trims@1907: * or visit www.oracle.com if you need additional information or have any trims@1907: * questions. duke@435: * duke@435: */ duke@435: stefank@2314: #ifndef SHARE_VM_UTILITIES_MACROS_HPP stefank@2314: #define SHARE_VM_UTILITIES_MACROS_HPP stefank@2314: duke@435: // Use this to mark code that needs to be cleaned up (for development only) duke@435: #define NEEDS_CLEANUP duke@435: duke@435: // Makes a string of the argument (which is not macro-expanded) duke@435: #define STR(a) #a duke@435: duke@435: // Makes a string of the macro expansion of a duke@435: #define XSTR(a) STR(a) duke@435: jprovino@4165: // -DINCLUDE_=0 | 1 can be specified on the command line to include jprovino@4165: // or exclude functionality. duke@435: jprovino@4165: #ifndef INCLUDE_JVMTI jprovino@4165: #define INCLUDE_JVMTI 1 jprovino@4165: #endif // INCLUDE_JVMTI duke@435: jprovino@4165: #if INCLUDE_JVMTI jprovino@4165: #define JVMTI_ONLY(x) x jprovino@4165: #define NOT_JVMTI(x) jprovino@4165: #define NOT_JVMTI_RETURN jprovino@4165: #define NOT_JVMTI_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define JVMTI_ONLY(x) jprovino@4165: #define NOT_JVMTI(x) x jprovino@4165: #define NOT_JVMTI_RETURN { return; } jprovino@4165: #define NOT_JVMTI_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_JVMTI duke@435: jprovino@4165: #ifndef INCLUDE_FPROF jprovino@4165: #define INCLUDE_FPROF 1 jprovino@4165: #endif duke@435: jprovino@4165: #if INCLUDE_FPROF jprovino@4165: #define NOT_FPROF_RETURN /* next token must be ; */ jprovino@4165: #define NOT_FPROF_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_FPROF_RETURN {} jprovino@4165: #define NOT_FPROF_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_FPROF duke@435: jprovino@4165: #ifndef INCLUDE_VM_STRUCTS jprovino@4165: #define INCLUDE_VM_STRUCTS 1 jprovino@4165: #endif jprovino@4165: jprovino@4165: #if INCLUDE_VM_STRUCTS jprovino@4165: #define NOT_VM_STRUCTS_RETURN /* next token must be ; */ jprovino@4165: #define NOT_VM_STRUCTS_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_VM_STRUCTS_RETURN {} jprovino@4165: #define NOT_VM_STRUCTS_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_VM_STRUCTS jprovino@4165: jprovino@4165: #ifndef INCLUDE_JNI_CHECK jprovino@4165: #define INCLUDE_JNI_CHECK 1 jprovino@4165: #endif jprovino@4165: jprovino@4165: #if INCLUDE_JNI_CHECK jprovino@4165: #define NOT_JNI_CHECK_RETURN /* next token must be ; */ jprovino@4165: #define NOT_JNI_CHECK_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_JNI_CHECK_RETURN {} jprovino@4165: #define NOT_JNI_CHECK_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_JNI_CHECK jprovino@4165: jprovino@4165: #ifndef INCLUDE_SERVICES jprovino@4165: #define INCLUDE_SERVICES 1 jprovino@4165: #endif jprovino@4165: jprovino@4165: #if INCLUDE_SERVICES jprovino@4165: #define NOT_SERVICES_RETURN /* next token must be ; */ jprovino@4165: #define NOT_SERVICES_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_SERVICES_RETURN {} jprovino@4165: #define NOT_SERVICES_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_SERVICES jprovino@4165: jprovino@4165: #ifndef INCLUDE_CDS jprovino@4165: #define INCLUDE_CDS 1 jprovino@4165: #endif jprovino@4165: jprovino@4165: #if INCLUDE_CDS jprovino@4165: #define CDS_ONLY(x) x jprovino@4165: #define NOT_CDS(x) jprovino@4165: #define NOT_CDS_RETURN /* next token must be ; */ jprovino@4165: #define NOT_CDS_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define CDS_ONLY(x) jprovino@4165: #define NOT_CDS(x) x jprovino@4165: #define NOT_CDS_RETURN {} jprovino@4165: #define NOT_CDS_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_CDS jprovino@4165: jprovino@4165: #ifndef INCLUDE_MANAGEMENT jprovino@4165: #define INCLUDE_MANAGEMENT 1 jprovino@4165: #endif // INCLUDE_MANAGEMENT jprovino@4165: jprovino@4165: #if INCLUDE_MANAGEMENT jprovino@4165: #define NOT_MANAGEMENT_RETURN /* next token must be ; */ jprovino@4165: #define NOT_MANAGEMENT_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_MANAGEMENT_RETURN {} jprovino@4165: #define NOT_MANAGEMENT_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_MANAGEMENT jprovino@4165: jprovino@4165: /* jprovino@4165: * When INCLUDE_ALTERNATE_GCS is false the only garbage collectors jprovino@4165: * included in the JVM are defaultNewGeneration and markCompact. jprovino@4165: * jprovino@4165: * When INCLUDE_ALTERNATE_GCS is true all garbage collectors are jprovino@4165: * included in the JVM. jprovino@4165: */ jprovino@4165: #ifndef INCLUDE_ALTERNATE_GCS jprovino@4165: #define INCLUDE_ALTERNATE_GCS 1 jprovino@4165: #endif // INCLUDE_ALTERNATE_GCS jprovino@4165: jprovino@4165: #if INCLUDE_ALTERNATE_GCS jprovino@4165: #define NOT_ALTERNATE_GCS_RETURN /* next token must be ; */ jprovino@4165: #define NOT_ALTERNATE_GCS_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_ALTERNATE_GCS_RETURN {} jprovino@4165: #define NOT_ALTERNATE_GCS_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_ALTERNATE_GCS jprovino@4165: jprovino@4165: #ifndef INCLUDE_NMT jprovino@4165: #define INCLUDE_NMT 1 jprovino@4165: #endif // INCLUDE_NMT jprovino@4165: jprovino@4165: #if INCLUDE_NMT jprovino@4165: #define NOT_NMT_RETURN /* next token must be ; */ jprovino@4165: #define NOT_NMT_RETURN_(code) /* next token must be ; */ jprovino@4165: #else jprovino@4165: #define NOT_NMT_RETURN {} jprovino@4165: #define NOT_NMT_RETURN_(code) { return code; } jprovino@4165: #endif // INCLUDE_NMT duke@435: duke@435: // COMPILER1 variant duke@435: #ifdef COMPILER1 duke@435: #ifdef COMPILER2 duke@435: #define TIERED duke@435: #endif duke@435: #define COMPILER1_PRESENT(code) code duke@435: #else // COMPILER1 duke@435: #define COMPILER1_PRESENT(code) duke@435: #endif // COMPILER1 duke@435: duke@435: // COMPILER2 variant duke@435: #ifdef COMPILER2 duke@435: #define COMPILER2_PRESENT(code) code ysr@888: #define NOT_COMPILER2(code) duke@435: #else // COMPILER2 duke@435: #define COMPILER2_PRESENT(code) ysr@888: #define NOT_COMPILER2(code) code duke@435: #endif // COMPILER2 duke@435: iveresov@2138: #ifdef TIERED iveresov@2138: #define TIERED_ONLY(code) code iveresov@2138: #define NOT_TIERED(code) iveresov@2138: #else iveresov@2138: #define TIERED_ONLY(code) iveresov@2138: #define NOT_TIERED(code) code iveresov@2138: #endif // TIERED iveresov@2138: duke@435: duke@435: // PRODUCT variant duke@435: #ifdef PRODUCT duke@435: #define PRODUCT_ONLY(code) code duke@435: #define NOT_PRODUCT(code) ikrylov@2123: #define NOT_PRODUCT_ARG(arg) duke@435: #define PRODUCT_RETURN {} duke@435: #define PRODUCT_RETURN0 { return 0; } duke@435: #define PRODUCT_RETURN_(code) { code } duke@435: #else // PRODUCT duke@435: #define PRODUCT_ONLY(code) duke@435: #define NOT_PRODUCT(code) code ikrylov@2123: #define NOT_PRODUCT_ARG(arg) arg, duke@435: #define PRODUCT_RETURN /*next token must be ;*/ duke@435: #define PRODUCT_RETURN0 /*next token must be ;*/ duke@435: #define PRODUCT_RETURN_(code) /*next token must be ;*/ duke@435: #endif // PRODUCT duke@435: duke@435: #ifdef CHECK_UNHANDLED_OOPS duke@435: #define CHECK_UNHANDLED_OOPS_ONLY(code) code duke@435: #define NOT_CHECK_UNHANDLED_OOPS(code) duke@435: #else duke@435: #define CHECK_UNHANDLED_OOPS_ONLY(code) duke@435: #define NOT_CHECK_UNHANDLED_OOPS(code) code duke@435: #endif // CHECK_UNHANDLED_OOPS duke@435: duke@435: #ifdef CC_INTERP duke@435: #define CC_INTERP_ONLY(code) code duke@435: #define NOT_CC_INTERP(code) duke@435: #else duke@435: #define CC_INTERP_ONLY(code) duke@435: #define NOT_CC_INTERP(code) code duke@435: #endif // CC_INTERP duke@435: duke@435: #ifdef ASSERT duke@435: #define DEBUG_ONLY(code) code duke@435: #define NOT_DEBUG(code) jcoomes@1244: #define NOT_DEBUG_RETURN /*next token must be ;*/ duke@435: // Historical. duke@435: #define debug_only(code) code duke@435: #else // ASSERT duke@435: #define DEBUG_ONLY(code) duke@435: #define NOT_DEBUG(code) code jcoomes@1244: #define NOT_DEBUG_RETURN {} duke@435: #define debug_only(code) duke@435: #endif // ASSERT duke@435: duke@435: #ifdef _LP64 duke@435: #define LP64_ONLY(code) code duke@435: #define NOT_LP64(code) duke@435: #else // !_LP64 duke@435: #define LP64_ONLY(code) duke@435: #define NOT_LP64(code) code duke@435: #endif // _LP64 duke@435: duke@435: #ifdef LINUX duke@435: #define LINUX_ONLY(code) code duke@435: #define NOT_LINUX(code) duke@435: #else duke@435: #define LINUX_ONLY(code) duke@435: #define NOT_LINUX(code) code duke@435: #endif duke@435: duke@435: #ifdef SOLARIS duke@435: #define SOLARIS_ONLY(code) code duke@435: #define NOT_SOLARIS(code) duke@435: #else duke@435: #define SOLARIS_ONLY(code) duke@435: #define NOT_SOLARIS(code) code duke@435: #endif duke@435: duke@435: #ifdef _WINDOWS duke@435: #define WINDOWS_ONLY(code) code duke@435: #define NOT_WINDOWS(code) duke@435: #else duke@435: #define WINDOWS_ONLY(code) duke@435: #define NOT_WINDOWS(code) code duke@435: #endif duke@435: never@3156: #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) never@3156: #define BSD_ONLY(code) code never@3156: #define NOT_BSD(code) never@3156: #else never@3156: #define BSD_ONLY(code) never@3156: #define NOT_BSD(code) code never@3156: #endif never@3156: twisti@2603: #ifdef _WIN64 twisti@2603: #define WIN64_ONLY(code) code twisti@2603: #define NOT_WIN64(code) twisti@2603: #else twisti@2603: #define WIN64_ONLY(code) twisti@2603: #define NOT_WIN64(code) code twisti@2603: #endif twisti@2603: twisti@4237: #if defined(ZERO) twisti@4237: #define ZERO_ONLY(code) code twisti@4237: #define NOT_ZERO(code) twisti@4237: #else twisti@4237: #define ZERO_ONLY(code) twisti@4237: #define NOT_ZERO(code) code twisti@4237: #endif twisti@4237: twisti@4237: #if defined(SHARK) twisti@4237: #define SHARK_ONLY(code) code twisti@4237: #define NOT_SHARK(code) twisti@4237: #else twisti@4237: #define SHARK_ONLY(code) twisti@4237: #define NOT_SHARK(code) code twisti@4237: #endif twisti@4237: never@739: #if defined(IA32) || defined(AMD64) never@739: #define X86 never@739: #define X86_ONLY(code) code twisti@2047: #define NOT_X86(code) never@739: #else never@739: #undef X86 never@739: #define X86_ONLY(code) twisti@2047: #define NOT_X86(code) code never@739: #endif never@739: duke@435: #ifdef IA32 duke@435: #define IA32_ONLY(code) code duke@435: #define NOT_IA32(code) duke@435: #else duke@435: #define IA32_ONLY(code) duke@435: #define NOT_IA32(code) code duke@435: #endif duke@435: duke@435: #ifdef IA64 duke@435: #define IA64_ONLY(code) code duke@435: #define NOT_IA64(code) duke@435: #else duke@435: #define IA64_ONLY(code) duke@435: #define NOT_IA64(code) code duke@435: #endif duke@435: duke@435: #ifdef AMD64 duke@435: #define AMD64_ONLY(code) code duke@435: #define NOT_AMD64(code) duke@435: #else duke@435: #define AMD64_ONLY(code) duke@435: #define NOT_AMD64(code) code duke@435: #endif duke@435: duke@435: #ifdef SPARC duke@435: #define SPARC_ONLY(code) code duke@435: #define NOT_SPARC(code) duke@435: #else duke@435: #define SPARC_ONLY(code) duke@435: #define NOT_SPARC(code) code duke@435: #endif duke@435: bobv@2036: #ifdef PPC bobv@2036: #define PPC_ONLY(code) code bobv@2036: #define NOT_PPC(code) bobv@2036: #else bobv@2036: #define PPC_ONLY(code) bobv@2036: #define NOT_PPC(code) code bobv@2036: #endif bobv@2036: bobv@2036: #ifdef E500V2 bobv@2036: #define E500V2_ONLY(code) code bobv@2036: #define NOT_E500V2(code) bobv@2036: #else bobv@2036: #define E500V2_ONLY(code) bobv@2036: #define NOT_E500V2(code) code bobv@2036: #endif bobv@2036: bobv@2036: bobv@2036: #ifdef ARM bobv@2036: #define ARM_ONLY(code) code bobv@2036: #define NOT_ARM(code) bobv@2036: #else bobv@2036: #define ARM_ONLY(code) bobv@2036: #define NOT_ARM(code) code bobv@2036: #endif bobv@2036: bobv@2036: #ifdef JAVASE_EMBEDDED bobv@2036: #define EMBEDDED_ONLY(code) code bobv@2036: #define NOT_EMBEDDED(code) bobv@2036: #else bobv@2036: #define EMBEDDED_ONLY(code) bobv@2036: #define NOT_EMBEDDED(code) code bobv@2036: #endif bobv@2036: duke@435: #define define_pd_global(type, name, value) const type pd_##name = value; stefank@2314: stefank@2314: #endif // SHARE_VM_UTILITIES_MACROS_HPP