aoqi@0: /* aoqi@0: * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: * aoqi@0: */ aoqi@0: aoqi@1: /* aoqi@1: * This file has been modified by Loongson Technology in 2015. These aoqi@1: * modifications are Copyright (c) 2015 Loongson Technology, and are made aoqi@1: * available on the same license terms set forth above. aoqi@1: */ aoqi@1: aoqi@0: #ifndef SHARE_VM_UTILITIES_MACROS_HPP aoqi@0: #define SHARE_VM_UTILITIES_MACROS_HPP aoqi@0: aoqi@0: // Use this to mark code that needs to be cleaned up (for development only) aoqi@0: #define NEEDS_CLEANUP aoqi@0: aoqi@0: // Makes a string of the argument (which is not macro-expanded) aoqi@0: #define STR(a) #a aoqi@0: aoqi@0: // Makes a string of the macro expansion of a aoqi@0: #define XSTR(a) STR(a) aoqi@0: aoqi@0: // -DINCLUDE_=0 | 1 can be specified on the command line to include aoqi@0: // or exclude functionality. aoqi@0: aoqi@0: #ifndef INCLUDE_JVMTI aoqi@0: #define INCLUDE_JVMTI 1 aoqi@0: #endif // INCLUDE_JVMTI aoqi@0: aoqi@0: #if INCLUDE_JVMTI aoqi@0: #define JVMTI_ONLY(x) x aoqi@0: #define NOT_JVMTI(x) aoqi@0: #define NOT_JVMTI_RETURN aoqi@0: #define NOT_JVMTI_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define JVMTI_ONLY(x) aoqi@0: #define NOT_JVMTI(x) x aoqi@0: #define NOT_JVMTI_RETURN { return; } aoqi@0: #define NOT_JVMTI_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_JVMTI aoqi@0: aoqi@0: #ifndef INCLUDE_FPROF aoqi@0: #define INCLUDE_FPROF 1 aoqi@0: #endif aoqi@0: aoqi@0: #if INCLUDE_FPROF aoqi@0: #define NOT_FPROF_RETURN /* next token must be ; */ aoqi@0: #define NOT_FPROF_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_FPROF_RETURN {} aoqi@0: #define NOT_FPROF_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_FPROF aoqi@0: aoqi@0: #ifndef INCLUDE_VM_STRUCTS aoqi@0: #define INCLUDE_VM_STRUCTS 1 aoqi@0: #endif aoqi@0: aoqi@0: #if INCLUDE_VM_STRUCTS aoqi@0: #define NOT_VM_STRUCTS_RETURN /* next token must be ; */ aoqi@0: #define NOT_VM_STRUCTS_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_VM_STRUCTS_RETURN {} aoqi@0: #define NOT_VM_STRUCTS_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_VM_STRUCTS aoqi@0: aoqi@0: #ifndef INCLUDE_JNI_CHECK aoqi@0: #define INCLUDE_JNI_CHECK 1 aoqi@0: #endif aoqi@0: aoqi@0: #if INCLUDE_JNI_CHECK aoqi@0: #define NOT_JNI_CHECK_RETURN /* next token must be ; */ aoqi@0: #define NOT_JNI_CHECK_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_JNI_CHECK_RETURN {} aoqi@0: #define NOT_JNI_CHECK_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_JNI_CHECK aoqi@0: aoqi@0: #ifndef INCLUDE_SERVICES aoqi@0: #define INCLUDE_SERVICES 1 aoqi@0: #endif aoqi@0: aoqi@0: #if INCLUDE_SERVICES aoqi@0: #define NOT_SERVICES_RETURN /* next token must be ; */ aoqi@0: #define NOT_SERVICES_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_SERVICES_RETURN {} aoqi@0: #define NOT_SERVICES_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_SERVICES aoqi@0: aoqi@0: #ifndef INCLUDE_CDS aoqi@0: #define INCLUDE_CDS 1 aoqi@0: #endif aoqi@0: aoqi@0: #if INCLUDE_CDS aoqi@0: #define CDS_ONLY(x) x aoqi@0: #define NOT_CDS(x) aoqi@0: #define NOT_CDS_RETURN /* next token must be ; */ aoqi@0: #define NOT_CDS_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define CDS_ONLY(x) aoqi@0: #define NOT_CDS(x) x aoqi@0: #define NOT_CDS_RETURN {} aoqi@0: #define NOT_CDS_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_CDS aoqi@0: aoqi@0: #ifndef INCLUDE_MANAGEMENT aoqi@0: #define INCLUDE_MANAGEMENT 1 aoqi@0: #endif // INCLUDE_MANAGEMENT aoqi@0: aoqi@0: #if INCLUDE_MANAGEMENT aoqi@0: #define NOT_MANAGEMENT_RETURN /* next token must be ; */ aoqi@0: #define NOT_MANAGEMENT_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_MANAGEMENT_RETURN {} aoqi@0: #define NOT_MANAGEMENT_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_MANAGEMENT aoqi@0: aoqi@0: /* aoqi@0: * When INCLUDE_ALL_GCS is false the only garbage collectors aoqi@0: * included in the JVM are defaultNewGeneration and markCompact. aoqi@0: * aoqi@0: * When INCLUDE_ALL_GCS is true all garbage collectors are aoqi@0: * included in the JVM. aoqi@0: */ aoqi@0: #ifndef INCLUDE_ALL_GCS aoqi@0: #define INCLUDE_ALL_GCS 1 aoqi@0: #endif // INCLUDE_ALL_GCS aoqi@0: aoqi@0: #if INCLUDE_ALL_GCS aoqi@0: #define NOT_ALL_GCS_RETURN /* next token must be ; */ aoqi@0: #define NOT_ALL_GCS_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_ALL_GCS_RETURN {} aoqi@0: #define NOT_ALL_GCS_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_ALL_GCS aoqi@0: aoqi@0: #ifndef INCLUDE_NMT aoqi@0: #define INCLUDE_NMT 1 aoqi@0: #endif // INCLUDE_NMT aoqi@0: aoqi@0: #if INCLUDE_NMT aoqi@0: #define NOT_NMT_RETURN /* next token must be ; */ aoqi@0: #define NOT_NMT_RETURN_(code) /* next token must be ; */ aoqi@0: #else aoqi@0: #define NOT_NMT_RETURN {} aoqi@0: #define NOT_NMT_RETURN_(code) { return code; } aoqi@0: #endif // INCLUDE_NMT aoqi@0: aoqi@0: #ifndef INCLUDE_TRACE aoqi@0: #define INCLUDE_TRACE 1 aoqi@0: #endif // INCLUDE_TRACE aoqi@0: aoqi@0: // COMPILER1 variant aoqi@0: #ifdef COMPILER1 aoqi@0: #ifdef COMPILER2 aoqi@0: #define TIERED aoqi@0: #endif aoqi@0: #define COMPILER1_PRESENT(code) code aoqi@0: #else // COMPILER1 aoqi@0: #define COMPILER1_PRESENT(code) aoqi@0: #endif // COMPILER1 aoqi@0: aoqi@0: // COMPILER2 variant aoqi@0: #ifdef COMPILER2 aoqi@0: #define COMPILER2_PRESENT(code) code aoqi@0: #define NOT_COMPILER2(code) aoqi@0: #else // COMPILER2 aoqi@0: #define COMPILER2_PRESENT(code) aoqi@0: #define NOT_COMPILER2(code) code aoqi@0: #endif // COMPILER2 aoqi@0: aoqi@0: #ifdef TIERED aoqi@0: #define TIERED_ONLY(code) code aoqi@0: #define NOT_TIERED(code) aoqi@0: #else aoqi@0: #define TIERED_ONLY(code) aoqi@0: #define NOT_TIERED(code) code aoqi@0: #endif // TIERED aoqi@0: aoqi@0: aoqi@0: // PRODUCT variant aoqi@0: #ifdef PRODUCT aoqi@0: #define PRODUCT_ONLY(code) code aoqi@0: #define NOT_PRODUCT(code) aoqi@0: #define NOT_PRODUCT_ARG(arg) aoqi@0: #define PRODUCT_RETURN {} aoqi@0: #define PRODUCT_RETURN0 { return 0; } aoqi@0: #define PRODUCT_RETURN_(code) { code } aoqi@0: #else // PRODUCT aoqi@0: #define PRODUCT_ONLY(code) aoqi@0: #define NOT_PRODUCT(code) code aoqi@0: #define NOT_PRODUCT_ARG(arg) arg, aoqi@0: #define PRODUCT_RETURN /*next token must be ;*/ aoqi@0: #define PRODUCT_RETURN0 /*next token must be ;*/ aoqi@0: #define PRODUCT_RETURN_(code) /*next token must be ;*/ aoqi@0: #endif // PRODUCT aoqi@0: aoqi@0: #ifdef CHECK_UNHANDLED_OOPS aoqi@0: #define CHECK_UNHANDLED_OOPS_ONLY(code) code aoqi@0: #define NOT_CHECK_UNHANDLED_OOPS(code) aoqi@0: #else aoqi@0: #define CHECK_UNHANDLED_OOPS_ONLY(code) aoqi@0: #define NOT_CHECK_UNHANDLED_OOPS(code) code aoqi@0: #endif // CHECK_UNHANDLED_OOPS aoqi@0: aoqi@0: #ifdef CC_INTERP aoqi@0: #define CC_INTERP_ONLY(code) code aoqi@0: #define NOT_CC_INTERP(code) aoqi@0: #else aoqi@0: #define CC_INTERP_ONLY(code) aoqi@0: #define NOT_CC_INTERP(code) code aoqi@0: #endif // CC_INTERP aoqi@0: aoqi@0: #ifdef ASSERT aoqi@0: #define DEBUG_ONLY(code) code aoqi@0: #define NOT_DEBUG(code) aoqi@0: #define NOT_DEBUG_RETURN /*next token must be ;*/ aoqi@0: // Historical. aoqi@0: #define debug_only(code) code aoqi@0: #else // ASSERT aoqi@0: #define DEBUG_ONLY(code) aoqi@0: #define NOT_DEBUG(code) code aoqi@0: #define NOT_DEBUG_RETURN {} aoqi@0: #define debug_only(code) aoqi@0: #endif // ASSERT aoqi@0: aoqi@0: #ifdef _LP64 aoqi@0: #define LP64_ONLY(code) code aoqi@0: #define NOT_LP64(code) aoqi@0: #else // !_LP64 aoqi@0: #define LP64_ONLY(code) aoqi@0: #define NOT_LP64(code) code aoqi@0: #endif // _LP64 aoqi@0: aoqi@0: #ifdef LINUX aoqi@0: #define LINUX_ONLY(code) code aoqi@0: #define NOT_LINUX(code) aoqi@0: #else aoqi@0: #define LINUX_ONLY(code) aoqi@0: #define NOT_LINUX(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef AIX aoqi@0: #define AIX_ONLY(code) code aoqi@0: #define NOT_AIX(code) aoqi@0: #else aoqi@0: #define AIX_ONLY(code) aoqi@0: #define NOT_AIX(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef SOLARIS aoqi@0: #define SOLARIS_ONLY(code) code aoqi@0: #define NOT_SOLARIS(code) aoqi@0: #else aoqi@0: #define SOLARIS_ONLY(code) aoqi@0: #define NOT_SOLARIS(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef _WINDOWS aoqi@0: #define WINDOWS_ONLY(code) code aoqi@0: #define NOT_WINDOWS(code) aoqi@0: #else aoqi@0: #define WINDOWS_ONLY(code) aoqi@0: #define NOT_WINDOWS(code) code aoqi@0: #endif aoqi@0: aoqi@0: #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) aoqi@0: #define BSD_ONLY(code) code aoqi@0: #define NOT_BSD(code) aoqi@0: #else aoqi@0: #define BSD_ONLY(code) aoqi@0: #define NOT_BSD(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef _WIN64 aoqi@0: #define WIN64_ONLY(code) code aoqi@0: #define NOT_WIN64(code) aoqi@0: #else aoqi@0: #define WIN64_ONLY(code) aoqi@0: #define NOT_WIN64(code) code aoqi@0: #endif aoqi@0: aoqi@0: #if defined(ZERO) aoqi@0: #define ZERO_ONLY(code) code aoqi@0: #define NOT_ZERO(code) aoqi@0: #else aoqi@0: #define ZERO_ONLY(code) aoqi@0: #define NOT_ZERO(code) code aoqi@0: #endif aoqi@0: aoqi@0: #if defined(SHARK) aoqi@0: #define SHARK_ONLY(code) code aoqi@0: #define NOT_SHARK(code) aoqi@0: #else aoqi@0: #define SHARK_ONLY(code) aoqi@0: #define NOT_SHARK(code) code aoqi@0: #endif aoqi@0: aoqi@0: #if defined(IA32) || defined(AMD64) aoqi@0: #define X86 aoqi@0: #define X86_ONLY(code) code aoqi@0: #define NOT_X86(code) aoqi@0: #else aoqi@0: #undef X86 aoqi@0: #define X86_ONLY(code) aoqi@0: #define NOT_X86(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef IA32 aoqi@0: #define IA32_ONLY(code) code aoqi@0: #define NOT_IA32(code) aoqi@0: #else aoqi@0: #define IA32_ONLY(code) aoqi@0: #define NOT_IA32(code) code aoqi@0: #endif aoqi@0: aoqi@0: // This is a REALLY BIG HACK, but on AIX unconditionally defines IA64. aoqi@0: // At least on AIX 7.1 this is a real problem because 'systemcfg.h' is indirectly included aoqi@0: // by 'pthread.h' and other common system headers. aoqi@0: aoqi@0: #if defined(IA64) && !defined(AIX) aoqi@0: #define IA64_ONLY(code) code aoqi@0: #define NOT_IA64(code) aoqi@0: #else aoqi@0: #define IA64_ONLY(code) aoqi@0: #define NOT_IA64(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef AMD64 aoqi@0: #define AMD64_ONLY(code) code aoqi@0: #define NOT_AMD64(code) aoqi@0: #else aoqi@0: #define AMD64_ONLY(code) aoqi@0: #define NOT_AMD64(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef SPARC aoqi@0: #define SPARC_ONLY(code) code aoqi@0: #define NOT_SPARC(code) aoqi@0: #else aoqi@0: #define SPARC_ONLY(code) aoqi@0: #define NOT_SPARC(code) code aoqi@0: #endif aoqi@0: aoqi@1: #ifdef MIPS64 aoqi@1: #define MIPS64_ONLY(code) code aoqi@1: #define NOT_MIPS64(code) aoqi@1: #else aoqi@1: #define MIPS64_ONLY(code) aoqi@1: #define NOT_MIPS64(code) code aoqi@1: #endif aoqi@1: aoqi@0: #if defined(PPC32) || defined(PPC64) aoqi@0: #ifndef PPC aoqi@0: #define PPC aoqi@0: #endif aoqi@0: #define PPC_ONLY(code) code aoqi@0: #define NOT_PPC(code) aoqi@0: #else aoqi@0: #undef PPC aoqi@0: #define PPC_ONLY(code) aoqi@0: #define NOT_PPC(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef PPC32 aoqi@0: #define PPC32_ONLY(code) code aoqi@0: #define NOT_PPC32(code) aoqi@0: #else aoqi@0: #define PPC32_ONLY(code) aoqi@0: #define NOT_PPC32(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef PPC64 aoqi@0: #define PPC64_ONLY(code) code aoqi@0: #define NOT_PPC64(code) aoqi@0: #else aoqi@0: #define PPC64_ONLY(code) aoqi@0: #define NOT_PPC64(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef E500V2 aoqi@0: #define E500V2_ONLY(code) code aoqi@0: #define NOT_E500V2(code) aoqi@0: #else aoqi@0: #define E500V2_ONLY(code) aoqi@0: #define NOT_E500V2(code) code aoqi@0: #endif aoqi@0: aoqi@0: aoqi@0: #ifdef ARM aoqi@0: #define ARM_ONLY(code) code aoqi@0: #define NOT_ARM(code) aoqi@0: #else aoqi@0: #define ARM_ONLY(code) aoqi@0: #define NOT_ARM(code) code aoqi@0: #endif aoqi@0: aoqi@0: #ifdef JAVASE_EMBEDDED aoqi@0: #define EMBEDDED_ONLY(code) code aoqi@0: #define NOT_EMBEDDED(code) aoqi@0: #else aoqi@0: #define EMBEDDED_ONLY(code) aoqi@0: #define NOT_EMBEDDED(code) code aoqi@0: #endif aoqi@0: aoqi@0: #define define_pd_global(type, name, value) const type pd_##name = value; aoqi@0: aoqi@0: #endif // SHARE_VM_UTILITIES_MACROS_HPP