1 /* 2 * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP 26 #define SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP 27 28 #include "runtime/globals.hpp" 29 #include "utilities/macros.hpp" 30 #include "utilities/macros.hpp" 31 #if INCLUDE_ALL_GCS 32 #include "gc/g1/g1_globals.hpp" 33 #endif 34 #if INCLUDE_JVMCI 35 #include "jvmci/jvmci_globals.hpp" 36 #endif 37 #ifdef COMPILER1 38 #include "c1/c1_globals.hpp" 39 #endif 40 #ifdef COMPILER2 41 #include "opto/c2_globals.hpp" 42 #endif 43 44 // Construct enum of Flag_<cmdline-arg> constants. 45 46 // Parenthesis left off in the following for the enum decl below. 47 #define FLAG_MEMBER(flag) Flag_##flag 48 49 #define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 50 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 51 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 52 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 53 #define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 54 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 55 #define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 56 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 57 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 58 59 #define JVMCI_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 60 #define JVMCI_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 61 #define JVMCI_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 62 #define JVMCI_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 63 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 64 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 65 #define JVMCI_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 66 67 #ifdef _LP64 68 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 69 #else 70 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */ 71 #endif // _LP64 72 73 #define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 74 #define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 75 #define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 76 #define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 77 #define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 78 #define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 79 80 #define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 81 #define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 82 #define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 83 #define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 84 #define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 85 #define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 86 #define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 87 88 #define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 89 #define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 90 #define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 91 #define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 92 #define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 93 94 typedef enum { 95 RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 96 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 97 RUNTIME_PRODUCT_FLAG_MEMBER, \ 98 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 99 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 100 RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \ 101 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 102 RUNTIME_MANAGEABLE_FLAG_MEMBER, \ 103 RUNTIME_PRODUCT_RW_FLAG_MEMBER, \ 104 RUNTIME_LP64_PRODUCT_FLAG_MEMBER, \ 105 IGNORE_RANGE, \ 106 IGNORE_CONSTRAINT, \ 107 IGNORE_WRITEABLE) 108 RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 109 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 110 RUNTIME_PRODUCT_FLAG_MEMBER, \ 111 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 112 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 113 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 114 IGNORE_RANGE, \ 115 IGNORE_CONSTRAINT, \ 116 IGNORE_WRITEABLE) 117 #if INCLUDE_ALL_GCS 118 G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 119 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 120 RUNTIME_PRODUCT_FLAG_MEMBER, \ 121 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 122 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 123 RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \ 124 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 125 RUNTIME_MANAGEABLE_FLAG_MEMBER, \ 126 RUNTIME_PRODUCT_RW_FLAG_MEMBER, \ 127 IGNORE_RANGE, \ 128 IGNORE_CONSTRAINT, \ 129 IGNORE_WRITEABLE) 130 #endif // INCLUDE_ALL_GCS 131 #if INCLUDE_JVMCI 132 JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER, \ 133 JVMCI_PD_DEVELOP_FLAG_MEMBER, \ 134 JVMCI_PRODUCT_FLAG_MEMBER, \ 135 JVMCI_PD_PRODUCT_FLAG_MEMBER, \ 136 JVMCI_DIAGNOSTIC_FLAG_MEMBER, \ 137 JVMCI_EXPERIMENTAL_FLAG_MEMBER, \ 138 JVMCI_NOTPRODUCT_FLAG_MEMBER, \ 139 IGNORE_RANGE, \ 140 IGNORE_CONSTRAINT, \ 141 IGNORE_WRITEABLE) 142 #endif // INCLUDE_JVMCI 143 #ifdef COMPILER1 144 C1_FLAGS(C1_DEVELOP_FLAG_MEMBER, \ 145 C1_PD_DEVELOP_FLAG_MEMBER, \ 146 C1_PRODUCT_FLAG_MEMBER, \ 147 C1_PD_PRODUCT_FLAG_MEMBER, \ 148 C1_DIAGNOSTIC_FLAG_MEMBER, \ 149 C1_NOTPRODUCT_FLAG_MEMBER, \ 150 IGNORE_RANGE, \ 151 IGNORE_CONSTRAINT, \ 152 IGNORE_WRITEABLE) 153 #endif 154 #ifdef COMPILER2 155 C2_FLAGS(C2_DEVELOP_FLAG_MEMBER, \ 156 C2_PD_DEVELOP_FLAG_MEMBER, \ 157 C2_PRODUCT_FLAG_MEMBER, \ 158 C2_PD_PRODUCT_FLAG_MEMBER, \ 159 C2_DIAGNOSTIC_FLAG_MEMBER, \ 160 C2_EXPERIMENTAL_FLAG_MEMBER, \ 161 C2_NOTPRODUCT_FLAG_MEMBER, \ 162 IGNORE_RANGE, \ 163 IGNORE_CONSTRAINT, \ 164 IGNORE_WRITEABLE) 165 #endif 166 ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER, \ 167 ARCH_PRODUCT_FLAG_MEMBER, \ 168 ARCH_DIAGNOSTIC_FLAG_MEMBER, \ 169 ARCH_EXPERIMENTAL_FLAG_MEMBER, \ 170 ARCH_NOTPRODUCT_FLAG_MEMBER, \ 171 IGNORE_RANGE, \ 172 IGNORE_CONSTRAINT, \ 173 IGNORE_WRITEABLE) 174 COMMANDLINEFLAG_EXT 175 NUM_CommandLineFlag 176 } CommandLineFlag; 177 178 // Construct enum of Flag_<cmdline-arg>_<type> constants. 179 180 #define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type 181 182 #define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 183 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 184 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 185 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 186 #define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 187 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 188 #define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 189 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 190 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 191 192 #define JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 193 #define JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 194 #define JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 195 #define JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 196 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 197 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 198 #define JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 199 200 #define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 201 #define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 202 #define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 203 #define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 204 #define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 205 #define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 206 207 #ifdef _LP64 208 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 209 #else 210 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */ 211 #endif // _LP64 212 213 #define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 214 #define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 215 #define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 216 #define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 217 #define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 218 #define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 219 #define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 220 221 #define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 222 #define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 223 #define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 224 #define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 225 #define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 226 227 typedef enum { 228 RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 229 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 230 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 231 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 232 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 233 RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 234 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 235 RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE, 236 RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE, 237 RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE, 238 IGNORE_RANGE, 239 IGNORE_CONSTRAINT, 240 IGNORE_WRITEABLE) 241 RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 242 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 243 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 244 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 245 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 246 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 247 IGNORE_RANGE, 248 IGNORE_CONSTRAINT, 249 IGNORE_WRITEABLE) 250 #if INCLUDE_ALL_GCS 251 G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 252 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 253 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 254 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 255 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 256 RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 257 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 258 RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE, 259 RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE, 260 IGNORE_RANGE, 261 IGNORE_CONSTRAINT, 262 IGNORE_WRITEABLE) 263 #endif // INCLUDE_ALL_GCS 264 #if INCLUDE_JVMCI 265 JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE, 266 JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 267 JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE, 268 JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 269 JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 270 JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 271 JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 272 IGNORE_RANGE, 273 IGNORE_CONSTRAINT, 274 IGNORE_WRITEABLE) 275 #endif // INCLUDE_JVMCI 276 #ifdef COMPILER1 277 C1_FLAGS(C1_DEVELOP_FLAG_MEMBER_WITH_TYPE, 278 C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 279 C1_PRODUCT_FLAG_MEMBER_WITH_TYPE, 280 C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 281 C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 282 C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 283 IGNORE_RANGE, 284 IGNORE_CONSTRAINT, 285 IGNORE_WRITEABLE) 286 #endif 287 #ifdef COMPILER2 288 C2_FLAGS(C2_DEVELOP_FLAG_MEMBER_WITH_TYPE, 289 C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 290 C2_PRODUCT_FLAG_MEMBER_WITH_TYPE, 291 C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 292 C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 293 C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 294 C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 295 IGNORE_RANGE, 296 IGNORE_CONSTRAINT, 297 IGNORE_WRITEABLE) 298 #endif 299 ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE, 300 ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE, 301 ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 302 ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 303 ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 304 IGNORE_RANGE, 305 IGNORE_CONSTRAINT, 306 IGNORE_WRITEABLE) 307 COMMANDLINEFLAGWITHTYPE_EXT 308 NUM_CommandLineFlagWithType 309 } CommandLineFlagWithType; 310 311 #define FLAG_IS_DEFAULT(name) (CommandLineFlagsEx::is_default(FLAG_MEMBER(name))) 312 #define FLAG_IS_ERGO(name) (CommandLineFlagsEx::is_ergo(FLAG_MEMBER(name))) 313 #define FLAG_IS_CMDLINE(name) (CommandLineFlagsEx::is_cmdline(FLAG_MEMBER(name))) 314 315 #define FLAG_SET_DEFAULT(name, value) ((name) = (value)) 316 317 #define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::COMMAND_LINE)) 318 #define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::ERGONOMIC)) 319 #define FLAG_SET_ERGO_IF_DEFAULT(type, name, value) \ 320 do { \ 321 if (FLAG_IS_DEFAULT(name)) { \ 322 FLAG_SET_ERGO(type, name, value); \ 323 } \ 324 } while (0) 325 326 // Can't put the following in CommandLineFlags because 327 // of a circular dependency on the enum definition. 328 class CommandLineFlagsEx : CommandLineFlags { 329 public: 330 static Flag::Error boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin); 331 static Flag::Error intAtPut(CommandLineFlagWithType flag, int value, Flag::Flags origin); 332 static Flag::Error uintAtPut(CommandLineFlagWithType flag, uint value, Flag::Flags origin); 333 static Flag::Error intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin); 334 static Flag::Error uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin); 335 static Flag::Error uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin); 336 static Flag::Error size_tAtPut(CommandLineFlagWithType flag, size_t value, Flag::Flags origin); 337 static Flag::Error doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin); 338 // Contract: Flag will make private copy of the incoming value 339 static Flag::Error ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin); 340 341 static bool is_default(CommandLineFlag flag); 342 static bool is_ergo(CommandLineFlag flag); 343 static bool is_cmdline(CommandLineFlag flag); 344 }; 345 346 #endif // SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP