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 #include "gc/epsilon/epsilon_globals.hpp" 34 #endif 35 #if INCLUDE_JVMCI 36 #include "jvmci/jvmci_globals.hpp" 37 #endif 38 #ifdef COMPILER1 39 #include "c1/c1_globals.hpp" 40 #endif 41 #ifdef COMPILER2 42 #include "opto/c2_globals.hpp" 43 #endif 44 45 // Construct enum of Flag_<cmdline-arg> constants. 46 47 // Parenthesis left off in the following for the enum decl below. 48 #define FLAG_MEMBER(flag) Flag_##flag 49 50 #define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 51 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 52 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 53 #define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 54 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 55 #define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 56 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 57 #define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 58 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 59 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 60 61 #define JVMCI_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 62 #define JVMCI_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 63 #define JVMCI_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 64 #define JVMCI_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 65 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 66 #define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 67 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 68 #define JVMCI_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 69 70 #ifdef _LP64 71 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 72 #else 73 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */ 74 #endif // _LP64 75 76 #define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 77 #define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 78 #define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 79 #define C1_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 80 #define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 81 #define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 82 #define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 83 84 #define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 85 #define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 86 #define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 87 #define C2_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 88 #define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 89 #define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 90 #define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name), 91 #define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 92 93 #define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 94 #define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 95 #define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 96 #define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 97 #define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name), 98 99 typedef enum { 100 RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 101 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 102 RUNTIME_PRODUCT_FLAG_MEMBER, \ 103 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 104 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 105 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \ 106 RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \ 107 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 108 RUNTIME_MANAGEABLE_FLAG_MEMBER, \ 109 RUNTIME_PRODUCT_RW_FLAG_MEMBER, \ 110 RUNTIME_LP64_PRODUCT_FLAG_MEMBER, \ 111 IGNORE_RANGE, \ 112 IGNORE_CONSTRAINT, \ 113 IGNORE_WRITEABLE) 114 RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 115 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 116 RUNTIME_PRODUCT_FLAG_MEMBER, \ 117 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 118 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 119 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \ 120 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 121 IGNORE_RANGE, \ 122 IGNORE_CONSTRAINT, \ 123 IGNORE_WRITEABLE) 124 #if INCLUDE_ALL_GCS 125 G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 126 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 127 RUNTIME_PRODUCT_FLAG_MEMBER, \ 128 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 129 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 130 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \ 131 RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \ 132 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 133 RUNTIME_MANAGEABLE_FLAG_MEMBER, \ 134 RUNTIME_PRODUCT_RW_FLAG_MEMBER, \ 135 IGNORE_RANGE, \ 136 IGNORE_CONSTRAINT, \ 137 IGNORE_WRITEABLE) 138 EPSILON_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, \ 139 RUNTIME_PD_DEVELOP_FLAG_MEMBER, \ 140 RUNTIME_PRODUCT_FLAG_MEMBER, \ 141 RUNTIME_PD_PRODUCT_FLAG_MEMBER, \ 142 RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \ 143 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \ 144 RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \ 145 RUNTIME_NOTPRODUCT_FLAG_MEMBER, \ 146 RUNTIME_MANAGEABLE_FLAG_MEMBER, \ 147 RUNTIME_PRODUCT_RW_FLAG_MEMBER, \ 148 IGNORE_RANGE, \ 149 IGNORE_CONSTRAINT, \ 150 IGNORE_WRITEABLE) 151 #endif // INCLUDE_ALL_GCS 152 #if INCLUDE_JVMCI 153 JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER, \ 154 JVMCI_PD_DEVELOP_FLAG_MEMBER, \ 155 JVMCI_PRODUCT_FLAG_MEMBER, \ 156 JVMCI_PD_PRODUCT_FLAG_MEMBER, \ 157 JVMCI_DIAGNOSTIC_FLAG_MEMBER, \ 158 JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER, \ 159 JVMCI_EXPERIMENTAL_FLAG_MEMBER, \ 160 JVMCI_NOTPRODUCT_FLAG_MEMBER, \ 161 IGNORE_RANGE, \ 162 IGNORE_CONSTRAINT, \ 163 IGNORE_WRITEABLE) 164 #endif // INCLUDE_JVMCI 165 #ifdef COMPILER1 166 C1_FLAGS(C1_DEVELOP_FLAG_MEMBER, \ 167 C1_PD_DEVELOP_FLAG_MEMBER, \ 168 C1_PRODUCT_FLAG_MEMBER, \ 169 C1_PD_PRODUCT_FLAG_MEMBER, \ 170 C1_DIAGNOSTIC_FLAG_MEMBER, \ 171 C1_PD_DIAGNOSTIC_FLAG_MEMBER, \ 172 C1_NOTPRODUCT_FLAG_MEMBER, \ 173 IGNORE_RANGE, \ 174 IGNORE_CONSTRAINT, \ 175 IGNORE_WRITEABLE) 176 #endif 177 #ifdef COMPILER2 178 C2_FLAGS(C2_DEVELOP_FLAG_MEMBER, \ 179 C2_PD_DEVELOP_FLAG_MEMBER, \ 180 C2_PRODUCT_FLAG_MEMBER, \ 181 C2_PD_PRODUCT_FLAG_MEMBER, \ 182 C2_DIAGNOSTIC_FLAG_MEMBER, \ 183 C2_PD_DIAGNOSTIC_FLAG_MEMBER, \ 184 C2_EXPERIMENTAL_FLAG_MEMBER, \ 185 C2_NOTPRODUCT_FLAG_MEMBER, \ 186 IGNORE_RANGE, \ 187 IGNORE_CONSTRAINT, \ 188 IGNORE_WRITEABLE) 189 #endif 190 ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER, \ 191 ARCH_PRODUCT_FLAG_MEMBER, \ 192 ARCH_DIAGNOSTIC_FLAG_MEMBER, \ 193 ARCH_EXPERIMENTAL_FLAG_MEMBER, \ 194 ARCH_NOTPRODUCT_FLAG_MEMBER, \ 195 IGNORE_RANGE, \ 196 IGNORE_CONSTRAINT, \ 197 IGNORE_WRITEABLE) 198 COMMANDLINEFLAG_EXT 199 NUM_CommandLineFlag 200 } CommandLineFlag; 201 202 // Construct enum of Flag_<cmdline-arg>_<type> constants. 203 204 #define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type 205 206 #define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 207 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 208 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 209 #define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 210 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 211 #define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 212 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 213 #define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 214 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 215 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 216 217 #define JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 218 #define JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 219 #define JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 220 #define JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 221 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 222 #define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 223 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 224 #define JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 225 226 #define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 227 #define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 228 #define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 229 #define C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 230 #define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 231 #define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 232 #define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 233 234 #ifdef _LP64 235 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 236 #else 237 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */ 238 #endif // _LP64 239 240 #define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 241 #define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 242 #define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 243 #define C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 244 #define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 245 #define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 246 #define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type), 247 #define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 248 249 #define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 250 #define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 251 #define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 252 #define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 253 #define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type), 254 255 typedef enum { 256 RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 257 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 258 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 259 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 260 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 261 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 262 RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 263 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 264 RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE, 265 RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE, 266 RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE, 267 IGNORE_RANGE, 268 IGNORE_CONSTRAINT, 269 IGNORE_WRITEABLE) 270 RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 271 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 272 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 273 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 274 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 275 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 276 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 277 IGNORE_RANGE, 278 IGNORE_CONSTRAINT, 279 IGNORE_WRITEABLE) 280 #if INCLUDE_ALL_GCS 281 G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 282 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 283 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 284 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 285 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 286 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 287 RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 288 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 289 RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE, 290 RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE, 291 IGNORE_RANGE, 292 IGNORE_CONSTRAINT, 293 IGNORE_WRITEABLE) 294 EPSILON_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE, 295 RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 296 RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE, 297 RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 298 RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 299 RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 300 RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 301 RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 302 RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE, 303 RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE, 304 IGNORE_RANGE, 305 IGNORE_CONSTRAINT, 306 IGNORE_WRITEABLE) 307 #endif // INCLUDE_ALL_GCS 308 #if INCLUDE_JVMCI 309 JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE, 310 JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 311 JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE, 312 JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 313 JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 314 JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 315 JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 316 JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 317 IGNORE_RANGE, 318 IGNORE_CONSTRAINT, 319 IGNORE_WRITEABLE) 320 #endif // INCLUDE_JVMCI 321 #ifdef COMPILER1 322 C1_FLAGS(C1_DEVELOP_FLAG_MEMBER_WITH_TYPE, 323 C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 324 C1_PRODUCT_FLAG_MEMBER_WITH_TYPE, 325 C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 326 C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 327 C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 328 C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 329 IGNORE_RANGE, 330 IGNORE_CONSTRAINT, 331 IGNORE_WRITEABLE) 332 #endif 333 #ifdef COMPILER2 334 C2_FLAGS(C2_DEVELOP_FLAG_MEMBER_WITH_TYPE, 335 C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE, 336 C2_PRODUCT_FLAG_MEMBER_WITH_TYPE, 337 C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE, 338 C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 339 C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 340 C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 341 C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 342 IGNORE_RANGE, 343 IGNORE_CONSTRAINT, 344 IGNORE_WRITEABLE) 345 #endif 346 ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE, 347 ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE, 348 ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE, 349 ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE, 350 ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE, 351 IGNORE_RANGE, 352 IGNORE_CONSTRAINT, 353 IGNORE_WRITEABLE) 354 COMMANDLINEFLAGWITHTYPE_EXT 355 NUM_CommandLineFlagWithType 356 } CommandLineFlagWithType; 357 358 #define FLAG_IS_DEFAULT(name) (CommandLineFlagsEx::is_default(FLAG_MEMBER(name))) 359 #define FLAG_IS_ERGO(name) (CommandLineFlagsEx::is_ergo(FLAG_MEMBER(name))) 360 #define FLAG_IS_CMDLINE(name) (CommandLineFlagsEx::is_cmdline(FLAG_MEMBER(name))) 361 362 #define FLAG_SET_DEFAULT(name, value) ((name) = (value)) 363 364 #define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::setOnCmdLine(FLAG_MEMBER_WITH_TYPE(name, type)), \ 365 CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), Flag::COMMAND_LINE)) 366 #define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), Flag::ERGONOMIC)) 367 #define FLAG_SET_ERGO_IF_DEFAULT(type, name, value) \ 368 do { \ 369 if (FLAG_IS_DEFAULT(name)) { \ 370 FLAG_SET_ERGO(type, name, value); \ 371 } \ 372 } while (0) 373 374 // Can't put the following in CommandLineFlags because 375 // of a circular dependency on the enum definition. 376 class CommandLineFlagsEx : CommandLineFlags { 377 public: 378 static Flag::Error boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin); 379 static Flag::Error intAtPut(CommandLineFlagWithType flag, int value, Flag::Flags origin); 380 static Flag::Error uintAtPut(CommandLineFlagWithType flag, uint value, Flag::Flags origin); 381 static Flag::Error intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin); 382 static Flag::Error uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin); 383 static Flag::Error uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin); 384 static Flag::Error size_tAtPut(CommandLineFlagWithType flag, size_t value, Flag::Flags origin); 385 static Flag::Error doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin); 386 // Contract: Flag will make private copy of the incoming value 387 static Flag::Error ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin); 388 389 static bool is_default(CommandLineFlag flag); 390 static bool is_ergo(CommandLineFlag flag); 391 static bool is_cmdline(CommandLineFlag flag); 392 393 static void setOnCmdLine(CommandLineFlagWithType flag); 394 }; 395 396 #endif // SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP