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