src/hotspot/share/runtime/globals_extension.hpp
changeset 54982 b18c8301b8c2
parent 53303 65a1d49d1718
child 54983 81becad91321
equal deleted inserted replaced
54981:0b56fc0448ec 54982:b18c8301b8c2
    25 #ifndef SHARE_RUNTIME_GLOBALS_EXTENSION_HPP
    25 #ifndef SHARE_RUNTIME_GLOBALS_EXTENSION_HPP
    26 #define SHARE_RUNTIME_GLOBALS_EXTENSION_HPP
    26 #define SHARE_RUNTIME_GLOBALS_EXTENSION_HPP
    27 
    27 
    28 #include "runtime/globals.hpp"
    28 #include "runtime/globals.hpp"
    29 #include "utilities/macros.hpp"
    29 #include "utilities/macros.hpp"
    30 #if INCLUDE_JVMCI
       
    31 #include "jvmci/jvmci_globals.hpp"
       
    32 #endif
       
    33 #ifdef COMPILER1
       
    34 #include "c1/c1_globals.hpp"
       
    35 #endif
       
    36 #ifdef COMPILER2
       
    37 #include "opto/c2_globals.hpp"
       
    38 #endif
       
    39 
    30 
    40 // Construct enum of Flag_<cmdline-arg> constants.
    31 // Construct enum of Flag_<cmdline-arg> constants.
    41 
    32 
    42 // Parenthesis left off in the following for the enum decl below.
    33 #define FLAG_MEMBER_ENUM(name) Flag_##name##_enum
    43 #define FLAG_MEMBER(flag) Flag_##flag
    34 #define FLAG_MEMBER_ENUM_(name) FLAG_MEMBER_ENUM(name),
    44 
    35 
    45 #define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc)      FLAG_MEMBER(name),
    36 #define FLAG_MEMBER_ENUM_PRODUCT(type, name, value, doc)      FLAG_MEMBER_ENUM_(name)
    46 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc)          FLAG_MEMBER(name),
    37 #define FLAG_MEMBER_ENUM_PD_PRODUCT(type, name, doc)          FLAG_MEMBER_ENUM_(name)
    47 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc)   FLAG_MEMBER(name),
    38 #define FLAG_MEMBER_ENUM_DIAGNOSTIC(type, name, value, doc)   FLAG_MEMBER_ENUM_(name)
    48 #define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc)       FLAG_MEMBER(name),
    39 #define FLAG_MEMBER_ENUM_PD_DIAGNOSTIC(type, name, doc)       FLAG_MEMBER_ENUM_(name)
    49 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
    40 #define FLAG_MEMBER_ENUM_EXPERIMENTAL(type, name, value, doc) FLAG_MEMBER_ENUM_(name)
    50 #define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc)   FLAG_MEMBER(name),
    41 #define FLAG_MEMBER_ENUM_MANAGEABLE(type, name, value, doc)   FLAG_MEMBER_ENUM_(name)
    51 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc)   FLAG_MEMBER(name),
    42 #define FLAG_MEMBER_ENUM_PRODUCT_RW(type, name, value, doc)   FLAG_MEMBER_ENUM_(name)
    52 #define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc)      FLAG_MEMBER(name),
    43 #define FLAG_MEMBER_ENUM_DEVELOP(type, name, value, doc)      FLAG_MEMBER_ENUM_(name)
    53 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc)          FLAG_MEMBER(name),
    44 #define FLAG_MEMBER_ENUM_PD_DEVELOP(type, name, doc)          FLAG_MEMBER_ENUM_(name)
    54 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)   FLAG_MEMBER(name),
    45 #define FLAG_MEMBER_ENUM_NOTPRODUCT(type, name, value, doc)   FLAG_MEMBER_ENUM_(name)
    55 
       
    56 #define JVMCI_PRODUCT_FLAG_MEMBER(type, name, value, doc)        FLAG_MEMBER(name),
       
    57 #define JVMCI_PD_PRODUCT_FLAG_MEMBER(type, name, doc)            FLAG_MEMBER(name),
       
    58 #define JVMCI_DEVELOP_FLAG_MEMBER(type, name, value, doc)        FLAG_MEMBER(name),
       
    59 #define JVMCI_PD_DEVELOP_FLAG_MEMBER(type, name, doc)            FLAG_MEMBER(name),
       
    60 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc)     FLAG_MEMBER(name),
       
    61 #define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc)         FLAG_MEMBER(name),
       
    62 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc)   FLAG_MEMBER(name),
       
    63 #define JVMCI_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)     FLAG_MEMBER(name),
       
    64 
       
    65 #ifdef _LP64
    46 #ifdef _LP64
    66 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
    47 #define FLAG_MEMBER_ENUM_LP64_PRODUCT(type, name, value, doc) FLAG_MEMBER_ENUM_(name)
    67 #else
    48 #else
    68 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
    49 #define FLAG_MEMBER_ENUM_LP64_PRODUCT(type, name, value, doc) /* flag is constant */
    69 #endif // _LP64
    50 #endif // _LP64
    70 
    51 
    71 #define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc)           FLAG_MEMBER(name),
    52 typedef enum {
    72 #define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc)               FLAG_MEMBER(name),
    53   ALL_FLAGS(FLAG_MEMBER_ENUM_DEVELOP,
    73 #define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc)        FLAG_MEMBER(name),
    54             FLAG_MEMBER_ENUM_PD_DEVELOP,
    74 #define C1_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, doc)            FLAG_MEMBER(name),
    55             FLAG_MEMBER_ENUM_PRODUCT,
    75 #define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc)           FLAG_MEMBER(name),
    56             FLAG_MEMBER_ENUM_PD_PRODUCT,
    76 #define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc)               FLAG_MEMBER(name),
    57             FLAG_MEMBER_ENUM_DIAGNOSTIC,
    77 #define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)        FLAG_MEMBER(name),
    58             FLAG_MEMBER_ENUM_PD_DIAGNOSTIC,
       
    59             FLAG_MEMBER_ENUM_EXPERIMENTAL,
       
    60             FLAG_MEMBER_ENUM_NOTPRODUCT,
       
    61             FLAG_MEMBER_ENUM_MANAGEABLE,
       
    62             FLAG_MEMBER_ENUM_PRODUCT_RW,
       
    63             FLAG_MEMBER_ENUM_LP64_PRODUCT,
       
    64             IGNORE_RANGE,
       
    65             IGNORE_CONSTRAINT,
       
    66             IGNORE_WRITEABLE)
       
    67   JVMFLAGSENUM_EXT
       
    68   NUM_JVMFlagsEnum
       
    69 } JVMFlagsEnum;
    78 
    70 
    79 #define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc)           FLAG_MEMBER(name),
    71 #define FLAG_IS_DEFAULT(name)         (JVMFlagEx::is_default(FLAG_MEMBER_ENUM(name)))
    80 #define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc)               FLAG_MEMBER(name),
    72 #define FLAG_IS_ERGO(name)            (JVMFlagEx::is_ergo(FLAG_MEMBER_ENUM(name)))
    81 #define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc)        FLAG_MEMBER(name),
    73 #define FLAG_IS_CMDLINE(name)         (JVMFlagEx::is_cmdline(FLAG_MEMBER_ENUM(name)))
    82 #define C2_PD_DIAGNOSTIC_FLAG_MEMBER(type, name, 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  VM_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_PD_DIAGNOSTIC_FLAG_MEMBER, \
       
   101           RUNTIME_EXPERIMENTAL_FLAG_MEMBER, \
       
   102           RUNTIME_NOTPRODUCT_FLAG_MEMBER, \
       
   103           RUNTIME_MANAGEABLE_FLAG_MEMBER, \
       
   104           RUNTIME_PRODUCT_RW_FLAG_MEMBER, \
       
   105           RUNTIME_LP64_PRODUCT_FLAG_MEMBER, \
       
   106           IGNORE_RANGE, \
       
   107           IGNORE_CONSTRAINT, \
       
   108           IGNORE_WRITEABLE)
       
   109 
       
   110  RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER,    \
       
   111                   RUNTIME_PD_DEVELOP_FLAG_MEMBER, \
       
   112                   RUNTIME_PRODUCT_FLAG_MEMBER, \
       
   113                   RUNTIME_PD_PRODUCT_FLAG_MEMBER, \
       
   114                   RUNTIME_DIAGNOSTIC_FLAG_MEMBER, \
       
   115                   RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER, \
       
   116                   RUNTIME_NOTPRODUCT_FLAG_MEMBER, \
       
   117                   IGNORE_RANGE, \
       
   118                   IGNORE_CONSTRAINT, \
       
   119                   IGNORE_WRITEABLE)
       
   120 #if INCLUDE_JVMCI
       
   121  JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER, \
       
   122              JVMCI_PD_DEVELOP_FLAG_MEMBER, \
       
   123              JVMCI_PRODUCT_FLAG_MEMBER, \
       
   124              JVMCI_PD_PRODUCT_FLAG_MEMBER, \
       
   125              JVMCI_DIAGNOSTIC_FLAG_MEMBER, \
       
   126              JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER, \
       
   127              JVMCI_EXPERIMENTAL_FLAG_MEMBER, \
       
   128              JVMCI_NOTPRODUCT_FLAG_MEMBER, \
       
   129              IGNORE_RANGE, \
       
   130              IGNORE_CONSTRAINT, \
       
   131              IGNORE_WRITEABLE)
       
   132 #endif // INCLUDE_JVMCI
       
   133 #ifdef COMPILER1
       
   134  C1_FLAGS(C1_DEVELOP_FLAG_MEMBER, \
       
   135           C1_PD_DEVELOP_FLAG_MEMBER, \
       
   136           C1_PRODUCT_FLAG_MEMBER, \
       
   137           C1_PD_PRODUCT_FLAG_MEMBER, \
       
   138           C1_DIAGNOSTIC_FLAG_MEMBER, \
       
   139           C1_PD_DIAGNOSTIC_FLAG_MEMBER, \
       
   140           C1_NOTPRODUCT_FLAG_MEMBER, \
       
   141           IGNORE_RANGE, \
       
   142           IGNORE_CONSTRAINT, \
       
   143           IGNORE_WRITEABLE)
       
   144 #endif
       
   145 #ifdef COMPILER2
       
   146  C2_FLAGS(C2_DEVELOP_FLAG_MEMBER, \
       
   147           C2_PD_DEVELOP_FLAG_MEMBER, \
       
   148           C2_PRODUCT_FLAG_MEMBER, \
       
   149           C2_PD_PRODUCT_FLAG_MEMBER, \
       
   150           C2_DIAGNOSTIC_FLAG_MEMBER, \
       
   151           C2_PD_DIAGNOSTIC_FLAG_MEMBER, \
       
   152           C2_EXPERIMENTAL_FLAG_MEMBER, \
       
   153           C2_NOTPRODUCT_FLAG_MEMBER, \
       
   154           IGNORE_RANGE, \
       
   155           IGNORE_CONSTRAINT, \
       
   156           IGNORE_WRITEABLE)
       
   157 #endif
       
   158  ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER, \
       
   159             ARCH_PRODUCT_FLAG_MEMBER, \
       
   160             ARCH_DIAGNOSTIC_FLAG_MEMBER, \
       
   161             ARCH_EXPERIMENTAL_FLAG_MEMBER, \
       
   162             ARCH_NOTPRODUCT_FLAG_MEMBER, \
       
   163             IGNORE_RANGE, \
       
   164             IGNORE_CONSTRAINT, \
       
   165             IGNORE_WRITEABLE)
       
   166  JVMFLAGS_EXT
       
   167  NUM_JVMFlags
       
   168 } JVMFlags;
       
   169 
       
   170 // Construct enum of Flag_<cmdline-arg>_<type> constants.
       
   171 
       
   172 #define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type
       
   173 
       
   174 #define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)      FLAG_MEMBER_WITH_TYPE(name,type),
       
   175 #define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)          FLAG_MEMBER_WITH_TYPE(name,type),
       
   176 #define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)   FLAG_MEMBER_WITH_TYPE(name,type),
       
   177 #define RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc)       FLAG_MEMBER_WITH_TYPE(name,type),
       
   178 #define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
       
   179 #define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)   FLAG_MEMBER_WITH_TYPE(name,type),
       
   180 #define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)   FLAG_MEMBER_WITH_TYPE(name,type),
       
   181 #define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)      FLAG_MEMBER_WITH_TYPE(name,type),
       
   182 #define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)          FLAG_MEMBER_WITH_TYPE(name,type),
       
   183 #define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)   FLAG_MEMBER_WITH_TYPE(name,type),
       
   184 
       
   185 #define JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   186 #define JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)            FLAG_MEMBER_WITH_TYPE(name,type),
       
   187 #define JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   188 #define JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)            FLAG_MEMBER_WITH_TYPE(name,type),
       
   189 #define JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)     FLAG_MEMBER_WITH_TYPE(name,type),
       
   190 #define JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc)         FLAG_MEMBER_WITH_TYPE(name,type),
       
   191 #define JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)   FLAG_MEMBER_WITH_TYPE(name,type),
       
   192 #define JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)     FLAG_MEMBER_WITH_TYPE(name,type),
       
   193 
       
   194 #define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)           FLAG_MEMBER_WITH_TYPE(name,type),
       
   195 #define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)               FLAG_MEMBER_WITH_TYPE(name,type),
       
   196 #define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   197 #define C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc)            FLAG_MEMBER_WITH_TYPE(name,type),
       
   198 #define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)           FLAG_MEMBER_WITH_TYPE(name,type),
       
   199 #define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)               FLAG_MEMBER_WITH_TYPE(name,type),
       
   200 #define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   201 
       
   202 #ifdef _LP64
       
   203 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
       
   204 #else
       
   205 #define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
       
   206 #endif // _LP64
       
   207 
       
   208 #define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)           FLAG_MEMBER_WITH_TYPE(name,type),
       
   209 #define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)               FLAG_MEMBER_WITH_TYPE(name,type),
       
   210 #define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   211 #define C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, doc)            FLAG_MEMBER_WITH_TYPE(name,type),
       
   212 #define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)      FLAG_MEMBER_WITH_TYPE(name,type),
       
   213 #define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)           FLAG_MEMBER_WITH_TYPE(name,type),
       
   214 #define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)               FLAG_MEMBER_WITH_TYPE(name,type),
       
   215 #define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)        FLAG_MEMBER_WITH_TYPE(name,type),
       
   216 
       
   217 #define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)         FLAG_MEMBER_WITH_TYPE(name,type),
       
   218 #define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)      FLAG_MEMBER_WITH_TYPE(name,type),
       
   219 #define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)    FLAG_MEMBER_WITH_TYPE(name,type),
       
   220 #define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)         FLAG_MEMBER_WITH_TYPE(name,type),
       
   221 #define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)      FLAG_MEMBER_WITH_TYPE(name,type),
       
   222 
       
   223 typedef enum {
       
   224   VM_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   225            RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   226            RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   227            RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   228            RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   229            RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   230            RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
       
   231            RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   232            RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,
       
   233            RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE,
       
   234            RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   235            IGNORE_RANGE,
       
   236            IGNORE_CONSTRAINT,
       
   237            IGNORE_WRITEABLE)
       
   238 
       
   239  RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   240                   RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   241                   RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   242                   RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   243                   RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   244                   RUNTIME_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   245                   RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   246                   IGNORE_RANGE,
       
   247                   IGNORE_CONSTRAINT,
       
   248                   IGNORE_WRITEABLE)
       
   249 #if INCLUDE_JVMCI
       
   250  JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   251              JVMCI_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   252              JVMCI_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   253              JVMCI_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   254              JVMCI_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   255              JVMCI_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   256              JVMCI_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
       
   257              JVMCI_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   258              IGNORE_RANGE,
       
   259              IGNORE_CONSTRAINT,
       
   260              IGNORE_WRITEABLE)
       
   261 #endif // INCLUDE_JVMCI
       
   262 #ifdef COMPILER1
       
   263  C1_FLAGS(C1_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   264           C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   265           C1_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   266           C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   267           C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   268           C1_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   269           C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   270           IGNORE_RANGE,
       
   271           IGNORE_CONSTRAINT,
       
   272           IGNORE_WRITEABLE)
       
   273 #endif
       
   274 #ifdef COMPILER2
       
   275  C2_FLAGS(C2_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   276           C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   277           C2_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   278           C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   279           C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   280           C2_PD_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   281           C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
       
   282           C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   283           IGNORE_RANGE,
       
   284           IGNORE_CONSTRAINT,
       
   285           IGNORE_WRITEABLE)
       
   286 #endif
       
   287  ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE,
       
   288           ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   289           ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
       
   290           ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
       
   291           ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,
       
   292           IGNORE_RANGE,
       
   293           IGNORE_CONSTRAINT,
       
   294           IGNORE_WRITEABLE)
       
   295   JVMFLAGSWITHTYPE_EXT
       
   296   NUM_JVMFlagsWithType
       
   297 } JVMFlagsWithType;
       
   298 
       
   299 #define FLAG_IS_DEFAULT(name)         (JVMFlagEx::is_default(FLAG_MEMBER(name)))
       
   300 #define FLAG_IS_ERGO(name)            (JVMFlagEx::is_ergo(FLAG_MEMBER(name)))
       
   301 #define FLAG_IS_CMDLINE(name)         (JVMFlagEx::is_cmdline(FLAG_MEMBER(name)))
       
   302 
    74 
   303 #define FLAG_SET_DEFAULT(name, value) ((name) = (value))
    75 #define FLAG_SET_DEFAULT(name, value) ((name) = (value))
   304 
    76 
   305 #define FLAG_SET_CMDLINE(type, name, value) (JVMFlagEx::setOnCmdLine(FLAG_MEMBER_WITH_TYPE(name, type)), \
    77 #define FLAG_SET_CMDLINE(type, name, value) (JVMFlagEx::setOnCmdLine(FLAG_MEMBER_ENUM(name)), \
   306                                              JVMFlagEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), JVMFlag::COMMAND_LINE))
    78                                              JVMFlagEx::type##AtPut(FLAG_MEMBER_ENUM(name), (type)(value), JVMFlag::COMMAND_LINE))
   307 #define FLAG_SET_ERGO(type, name, value)    (JVMFlagEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), JVMFlag::ERGONOMIC))
    79 #define FLAG_SET_ERGO(type, name, value)    (JVMFlagEx::type##AtPut(FLAG_MEMBER_ENUM(name), (type)(value), JVMFlag::ERGONOMIC))
   308 #define FLAG_SET_MGMT(type, name, value)    (JVMFlagEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), JVMFlag::MANAGEMENT))
    80 #define FLAG_SET_MGMT(type, name, value)    (JVMFlagEx::type##AtPut(FLAG_MEMBER_ENUM(name), (type)(value), JVMFlag::MANAGEMENT))
   309 
    81 
   310 #define FLAG_SET_ERGO_IF_DEFAULT(type, name, value) \
    82 #define FLAG_SET_ERGO_IF_DEFAULT(type, name, value) \
   311   do {                                              \
    83   do {                                              \
   312     if (FLAG_IS_DEFAULT(name)) {                    \
    84     if (FLAG_IS_DEFAULT(name)) {                    \
   313       FLAG_SET_ERGO(type, name, value);             \
    85       FLAG_SET_ERGO(type, name, value);             \
   316 
    88 
   317 // Can't put the following in JVMFlags because
    89 // Can't put the following in JVMFlags because
   318 // of a circular dependency on the enum definition.
    90 // of a circular dependency on the enum definition.
   319 class JVMFlagEx : JVMFlag {
    91 class JVMFlagEx : JVMFlag {
   320  public:
    92  public:
   321   static JVMFlag::Error boolAtPut(JVMFlagsWithType flag, bool value, JVMFlag::Flags origin);
    93   static JVMFlag::Error boolAtPut(JVMFlagsEnum flag, bool value, JVMFlag::Flags origin);
   322   static JVMFlag::Error intAtPut(JVMFlagsWithType flag, int value, JVMFlag::Flags origin);
    94   static JVMFlag::Error intAtPut(JVMFlagsEnum flag, int value, JVMFlag::Flags origin);
   323   static JVMFlag::Error uintAtPut(JVMFlagsWithType flag, uint value, JVMFlag::Flags origin);
    95   static JVMFlag::Error uintAtPut(JVMFlagsEnum flag, uint value, JVMFlag::Flags origin);
   324   static JVMFlag::Error intxAtPut(JVMFlagsWithType flag, intx value, JVMFlag::Flags origin);
    96   static JVMFlag::Error intxAtPut(JVMFlagsEnum flag, intx value, JVMFlag::Flags origin);
   325   static JVMFlag::Error uintxAtPut(JVMFlagsWithType flag, uintx value, JVMFlag::Flags origin);
    97   static JVMFlag::Error uintxAtPut(JVMFlagsEnum flag, uintx value, JVMFlag::Flags origin);
   326   static JVMFlag::Error uint64_tAtPut(JVMFlagsWithType flag, uint64_t value, JVMFlag::Flags origin);
    98   static JVMFlag::Error uint64_tAtPut(JVMFlagsEnum flag, uint64_t value, JVMFlag::Flags origin);
   327   static JVMFlag::Error size_tAtPut(JVMFlagsWithType flag, size_t value, JVMFlag::Flags origin);
    99   static JVMFlag::Error size_tAtPut(JVMFlagsEnum flag, size_t value, JVMFlag::Flags origin);
   328   static JVMFlag::Error doubleAtPut(JVMFlagsWithType flag, double value, JVMFlag::Flags origin);
   100   static JVMFlag::Error doubleAtPut(JVMFlagsEnum flag, double value, JVMFlag::Flags origin);
   329   // Contract:  Flag will make private copy of the incoming value
   101   // Contract:  Flag will make private copy of the incoming value
   330   static JVMFlag::Error ccstrAtPut(JVMFlagsWithType flag, ccstr value, JVMFlag::Flags origin);
   102   static JVMFlag::Error ccstrAtPut(JVMFlagsEnum flag, ccstr value, JVMFlag::Flags origin);
   331 
   103 
   332   static bool is_default(JVMFlags flag);
   104   static bool is_default(JVMFlagsEnum flag);
   333   static bool is_ergo(JVMFlags flag);
   105   static bool is_ergo(JVMFlagsEnum flag);
   334   static bool is_cmdline(JVMFlags flag);
   106   static bool is_cmdline(JVMFlagsEnum flag);
   335 
   107 
   336   static void setOnCmdLine(JVMFlagsWithType flag);
   108   static void setOnCmdLine(JVMFlagsEnum flag);
   337 };
   109 };
   338 
   110 
   339 #endif // SHARE_RUNTIME_GLOBALS_EXTENSION_HPP
   111 #endif // SHARE_RUNTIME_GLOBALS_EXTENSION_HPP