src/share/vm/utilities/macros.hpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 772
9ee9cf798b59
child 1244
6e2afda171db
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
xdono@772 2 * Copyright 1997-2008 Sun Microsystems, Inc. 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 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 // Use this to mark code that needs to be cleaned up (for development only)
duke@435 26 #define NEEDS_CLEANUP
duke@435 27
duke@435 28 // Makes a string of the argument (which is not macro-expanded)
duke@435 29 #define STR(a) #a
duke@435 30
duke@435 31 // Makes a string of the macro expansion of a
duke@435 32 #define XSTR(a) STR(a)
duke@435 33
duke@435 34 // KERNEL variant
duke@435 35 #ifdef KERNEL
duke@435 36 #define COMPILER1
duke@435 37 #define SERIALGC
duke@435 38
duke@435 39 #define JVMTI_KERNEL
duke@435 40 #define FPROF_KERNEL
duke@435 41 #define VM_STRUCTS_KERNEL
duke@435 42 #define JNICHECK_KERNEL
duke@435 43 #define SERVICES_KERNEL
duke@435 44
duke@435 45 #define KERNEL_RETURN {}
duke@435 46 #define KERNEL_RETURN_(code) { code }
duke@435 47
duke@435 48 #else // KERNEL
duke@435 49
duke@435 50 #define KERNEL_RETURN /* next token must be ; */
duke@435 51 #define KERNEL_RETURN_(code) /* next token must be ; */
duke@435 52
duke@435 53 #endif // KERNEL
duke@435 54
duke@435 55 // COMPILER1 variant
duke@435 56 #ifdef COMPILER1
duke@435 57 #ifdef COMPILER2
duke@435 58 #define TIERED
duke@435 59 #endif
duke@435 60 #define COMPILER1_PRESENT(code) code
duke@435 61 #else // COMPILER1
duke@435 62 #define COMPILER1_PRESENT(code)
duke@435 63 #endif // COMPILER1
duke@435 64
duke@435 65 // COMPILER2 variant
duke@435 66 #ifdef COMPILER2
duke@435 67 #define COMPILER2_PRESENT(code) code
ysr@888 68 #define NOT_COMPILER2(code)
duke@435 69 #else // COMPILER2
duke@435 70 #define COMPILER2_PRESENT(code)
ysr@888 71 #define NOT_COMPILER2(code) code
duke@435 72 #endif // COMPILER2
duke@435 73
duke@435 74
duke@435 75 // PRODUCT variant
duke@435 76 #ifdef PRODUCT
duke@435 77 #define PRODUCT_ONLY(code) code
duke@435 78 #define NOT_PRODUCT(code)
duke@435 79 #define PRODUCT_RETURN {}
duke@435 80 #define PRODUCT_RETURN0 { return 0; }
duke@435 81 #define PRODUCT_RETURN_(code) { code }
duke@435 82 #else // PRODUCT
duke@435 83 #define PRODUCT_ONLY(code)
duke@435 84 #define NOT_PRODUCT(code) code
duke@435 85 #define PRODUCT_RETURN /*next token must be ;*/
duke@435 86 #define PRODUCT_RETURN0 /*next token must be ;*/
duke@435 87 #define PRODUCT_RETURN_(code) /*next token must be ;*/
duke@435 88 #endif // PRODUCT
duke@435 89
duke@435 90 #ifdef CHECK_UNHANDLED_OOPS
duke@435 91 #define CHECK_UNHANDLED_OOPS_ONLY(code) code
duke@435 92 #define NOT_CHECK_UNHANDLED_OOPS(code)
duke@435 93 #else
duke@435 94 #define CHECK_UNHANDLED_OOPS_ONLY(code)
duke@435 95 #define NOT_CHECK_UNHANDLED_OOPS(code) code
duke@435 96 #endif // CHECK_UNHANDLED_OOPS
duke@435 97
duke@435 98 #ifdef CC_INTERP
duke@435 99 #define CC_INTERP_ONLY(code) code
duke@435 100 #define NOT_CC_INTERP(code)
duke@435 101 #else
duke@435 102 #define CC_INTERP_ONLY(code)
duke@435 103 #define NOT_CC_INTERP(code) code
duke@435 104 #endif // CC_INTERP
duke@435 105
duke@435 106 #ifdef ASSERT
duke@435 107 #define DEBUG_ONLY(code) code
duke@435 108 #define NOT_DEBUG(code)
duke@435 109 // Historical.
duke@435 110 #define debug_only(code) code
duke@435 111 #else // ASSERT
duke@435 112 #define DEBUG_ONLY(code)
duke@435 113 #define NOT_DEBUG(code) code
duke@435 114 #define debug_only(code)
duke@435 115 #endif // ASSERT
duke@435 116
duke@435 117 #ifdef _LP64
duke@435 118 #define LP64_ONLY(code) code
duke@435 119 #define NOT_LP64(code)
duke@435 120 #else // !_LP64
duke@435 121 #define LP64_ONLY(code)
duke@435 122 #define NOT_LP64(code) code
duke@435 123 #endif // _LP64
duke@435 124
duke@435 125 #ifdef LINUX
duke@435 126 #define LINUX_ONLY(code) code
duke@435 127 #define NOT_LINUX(code)
duke@435 128 #else
duke@435 129 #define LINUX_ONLY(code)
duke@435 130 #define NOT_LINUX(code) code
duke@435 131 #endif
duke@435 132
duke@435 133 #ifdef SOLARIS
duke@435 134 #define SOLARIS_ONLY(code) code
duke@435 135 #define NOT_SOLARIS(code)
duke@435 136 #else
duke@435 137 #define SOLARIS_ONLY(code)
duke@435 138 #define NOT_SOLARIS(code) code
duke@435 139 #endif
duke@435 140
duke@435 141 #ifdef _WINDOWS
duke@435 142 #define WINDOWS_ONLY(code) code
duke@435 143 #define NOT_WINDOWS(code)
duke@435 144 #else
duke@435 145 #define WINDOWS_ONLY(code)
duke@435 146 #define NOT_WINDOWS(code) code
duke@435 147 #endif
duke@435 148
never@739 149 #if defined(IA32) || defined(AMD64)
never@739 150 #define X86
never@739 151 #define X86_ONLY(code) code
never@739 152 #else
never@739 153 #undef X86
never@739 154 #define X86_ONLY(code)
never@739 155 #endif
never@739 156
duke@435 157 #ifdef IA32
duke@435 158 #define IA32_ONLY(code) code
duke@435 159 #define NOT_IA32(code)
duke@435 160 #else
duke@435 161 #define IA32_ONLY(code)
duke@435 162 #define NOT_IA32(code) code
duke@435 163 #endif
duke@435 164
duke@435 165 #ifdef IA64
duke@435 166 #define IA64_ONLY(code) code
duke@435 167 #define NOT_IA64(code)
duke@435 168 #else
duke@435 169 #define IA64_ONLY(code)
duke@435 170 #define NOT_IA64(code) code
duke@435 171 #endif
duke@435 172
duke@435 173 #ifdef AMD64
duke@435 174 #define AMD64_ONLY(code) code
duke@435 175 #define NOT_AMD64(code)
duke@435 176 #else
duke@435 177 #define AMD64_ONLY(code)
duke@435 178 #define NOT_AMD64(code) code
duke@435 179 #endif
duke@435 180
duke@435 181 #ifdef SPARC
duke@435 182 #define SPARC_ONLY(code) code
duke@435 183 #define NOT_SPARC(code)
duke@435 184 #else
duke@435 185 #define SPARC_ONLY(code)
duke@435 186 #define NOT_SPARC(code) code
duke@435 187 #endif
duke@435 188
duke@435 189 #define FIX_THIS(code) report_assertion_failure("FIX_THIS",__FILE__, __LINE__, "")
duke@435 190
duke@435 191 #define define_pd_global(type, name, value) const type pd_##name = value;

mercurial