src/hotspot/share/runtime/flags/jvmFlagRangeList.cpp
changeset 54982 b18c8301b8c2
parent 50708 bd3a8f48597e
child 57811 947252a54b98
child 58678 9cf78a70fa4f
equal deleted inserted replaced
54981:0b56fc0448ec 54982:b18c8301b8c2
    30 #include "oops/markOop.hpp"
    30 #include "oops/markOop.hpp"
    31 #include "runtime/arguments.hpp"
    31 #include "runtime/arguments.hpp"
    32 #include "runtime/flags/jvmFlag.hpp"
    32 #include "runtime/flags/jvmFlag.hpp"
    33 #include "runtime/flags/jvmFlagConstraintList.hpp"
    33 #include "runtime/flags/jvmFlagConstraintList.hpp"
    34 #include "runtime/flags/jvmFlagRangeList.hpp"
    34 #include "runtime/flags/jvmFlagRangeList.hpp"
    35 #include "runtime/globals_extension.hpp"
    35 #include "runtime/globals.hpp"
    36 #include "runtime/os.hpp"
    36 #include "runtime/os.hpp"
    37 #include "runtime/task.hpp"
    37 #include "runtime/task.hpp"
    38 #include "utilities/macros.hpp"
    38 #include "utilities/macros.hpp"
    39 
    39 
    40 class JVMFlagRange_int : public JVMFlagRange {
    40 class JVMFlagRange_int : public JVMFlagRange {
   290 void emit_range_double(const char* name, const double* ptr, double min, double max) {
   290 void emit_range_double(const char* name, const double* ptr, double min, double max) {
   291   JVMFlagRangeList::add(new JVMFlagRange_double(name, ptr, min, max));
   291   JVMFlagRangeList::add(new JVMFlagRange_double(name, ptr, min, max));
   292 }
   292 }
   293 
   293 
   294 // Generate code to call emit_range_xxx function
   294 // Generate code to call emit_range_xxx function
   295 #define EMIT_RANGE_PRODUCT_FLAG(type, name, value, doc)      ); emit_range_##type(#name,&name
   295 #define EMIT_RANGE_START       (void)(0
   296 #define EMIT_RANGE_DIAGNOSTIC_FLAG(type, name, value, doc)   ); emit_range_##type(#name,&name
   296 #define EMIT_RANGE(type, name) ); emit_range_##type(#name, &name
   297 #define EMIT_RANGE_EXPERIMENTAL_FLAG(type, name, value, doc) ); emit_range_##type(#name,&name
   297 #define EMIT_RANGE_NO          ); emit_range_no(0
   298 #define EMIT_RANGE_MANAGEABLE_FLAG(type, name, value, doc)   ); emit_range_##type(#name,&name
   298 #define EMIT_RANGE_PRODUCT_FLAG(type, name, value, doc)      EMIT_RANGE(type, name)
   299 #define EMIT_RANGE_PRODUCT_RW_FLAG(type, name, value, doc)   ); emit_range_##type(#name,&name
   299 #define EMIT_RANGE_DIAGNOSTIC_FLAG(type, name, value, doc)   EMIT_RANGE(type, name)
   300 #define EMIT_RANGE_PD_PRODUCT_FLAG(type, name, doc)          ); emit_range_##type(#name,&name
   300 #define EMIT_RANGE_EXPERIMENTAL_FLAG(type, name, value, doc) EMIT_RANGE(type, name)
   301 #define EMIT_RANGE_PD_DIAGNOSTIC_FLAG(type, name, doc)       ); emit_range_##type(#name,&name
   301 #define EMIT_RANGE_MANAGEABLE_FLAG(type, name, value, doc)   EMIT_RANGE(type, name)
       
   302 #define EMIT_RANGE_PRODUCT_RW_FLAG(type, name, value, doc)   EMIT_RANGE(type, name)
       
   303 #define EMIT_RANGE_PD_PRODUCT_FLAG(type, name, doc)          EMIT_RANGE(type, name)
       
   304 #define EMIT_RANGE_PD_DIAGNOSTIC_FLAG(type, name, doc)       EMIT_RANGE(type, name)
   302 #ifndef PRODUCT
   305 #ifndef PRODUCT
   303 #define EMIT_RANGE_DEVELOPER_FLAG(type, name, value, doc)    ); emit_range_##type(#name,&name
   306 #define EMIT_RANGE_DEVELOPER_FLAG(type, name, value, doc)    EMIT_RANGE(type, name)
   304 #define EMIT_RANGE_PD_DEVELOPER_FLAG(type, name, doc)        ); emit_range_##type(#name,&name
   307 #define EMIT_RANGE_PD_DEVELOPER_FLAG(type, name, doc)        EMIT_RANGE(type, name)
   305 #define EMIT_RANGE_NOTPRODUCT_FLAG(type, name, value, doc)   ); emit_range_##type(#name,&name
   308 #define EMIT_RANGE_NOTPRODUCT_FLAG(type, name, value, doc)   EMIT_RANGE(type, name)
   306 #else
   309 #else
   307 #define EMIT_RANGE_DEVELOPER_FLAG(type, name, value, doc)    ); emit_range_no(#name,&name
   310 #define EMIT_RANGE_DEVELOPER_FLAG(type, name, value, doc)    EMIT_RANGE_NO
   308 #define EMIT_RANGE_PD_DEVELOPER_FLAG(type, name, doc)        ); emit_range_no(#name,&name
   311 #define EMIT_RANGE_PD_DEVELOPER_FLAG(type, name, doc)        EMIT_RANGE_NO
   309 #define EMIT_RANGE_NOTPRODUCT_FLAG(type, name, value, doc)   ); emit_range_no(#name,&name
   312 #define EMIT_RANGE_NOTPRODUCT_FLAG(type, name, value, doc)   EMIT_RANGE_NO
   310 #endif
   313 #endif
   311 #ifdef _LP64
   314 #ifdef _LP64
   312 #define EMIT_RANGE_LP64_PRODUCT_FLAG(type, name, value, doc) ); emit_range_##type(#name,&name
   315 #define EMIT_RANGE_LP64_PRODUCT_FLAG(type, name, value, doc) EMIT_RANGE(type, name)
   313 #else
   316 #else
   314 #define EMIT_RANGE_LP64_PRODUCT_FLAG(type, name, value, doc) ); emit_range_no(#name,&name
   317 #define EMIT_RANGE_LP64_PRODUCT_FLAG(type, name, value, doc) EMIT_RANGE_NO
   315 #endif
   318 #endif
       
   319 #define EMIT_RANGE_END         );
   316 
   320 
   317 // Generate func argument to pass into emit_range_xxx functions
   321 // Generate func argument to pass into emit_range_xxx functions
   318 #define EMIT_RANGE_CHECK(a, b)                               , a, b
   322 #define EMIT_RANGE_CHECK(a, b)                               , a, b
   319 
   323 
   320 #define INITIAL_RANGES_SIZE 379
   324 #define INITIAL_RANGES_SIZE 379
   323 // Check the ranges of all flags that have them
   327 // Check the ranges of all flags that have them
   324 void JVMFlagRangeList::init(void) {
   328 void JVMFlagRangeList::init(void) {
   325 
   329 
   326   _ranges = new (ResourceObj::C_HEAP, mtArguments) GrowableArray<JVMFlagRange*>(INITIAL_RANGES_SIZE, true);
   330   _ranges = new (ResourceObj::C_HEAP, mtArguments) GrowableArray<JVMFlagRange*>(INITIAL_RANGES_SIZE, true);
   327 
   331 
   328   emit_range_no(NULL VM_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
   332   EMIT_RANGE_START
   329                               EMIT_RANGE_PD_DEVELOPER_FLAG,
   333 
   330                               EMIT_RANGE_PRODUCT_FLAG,
   334   ALL_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
   331                               EMIT_RANGE_PD_PRODUCT_FLAG,
   335             EMIT_RANGE_PD_DEVELOPER_FLAG,
   332                               EMIT_RANGE_DIAGNOSTIC_FLAG,
   336             EMIT_RANGE_PRODUCT_FLAG,
   333                               EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
   337             EMIT_RANGE_PD_PRODUCT_FLAG,
   334                               EMIT_RANGE_EXPERIMENTAL_FLAG,
   338             EMIT_RANGE_DIAGNOSTIC_FLAG,
   335                               EMIT_RANGE_NOTPRODUCT_FLAG,
   339             EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
   336                               EMIT_RANGE_MANAGEABLE_FLAG,
   340             EMIT_RANGE_EXPERIMENTAL_FLAG,
   337                               EMIT_RANGE_PRODUCT_RW_FLAG,
   341             EMIT_RANGE_NOTPRODUCT_FLAG,
   338                               EMIT_RANGE_LP64_PRODUCT_FLAG,
   342             EMIT_RANGE_MANAGEABLE_FLAG,
   339                               EMIT_RANGE_CHECK,
   343             EMIT_RANGE_PRODUCT_RW_FLAG,
   340                               IGNORE_CONSTRAINT,
   344             EMIT_RANGE_LP64_PRODUCT_FLAG,
   341                               IGNORE_WRITEABLE));
   345             EMIT_RANGE_CHECK,
       
   346             IGNORE_CONSTRAINT,
       
   347             IGNORE_WRITEABLE)
   342 
   348 
   343   EMIT_RANGES_FOR_GLOBALS_EXT
   349   EMIT_RANGES_FOR_GLOBALS_EXT
   344 
   350 
   345   emit_range_no(NULL ARCH_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
   351   EMIT_RANGE_END
   346                                 EMIT_RANGE_PRODUCT_FLAG,
       
   347                                 EMIT_RANGE_DIAGNOSTIC_FLAG,
       
   348                                 EMIT_RANGE_EXPERIMENTAL_FLAG,
       
   349                                 EMIT_RANGE_NOTPRODUCT_FLAG,
       
   350                                 EMIT_RANGE_CHECK,
       
   351                                 IGNORE_CONSTRAINT,
       
   352                                 IGNORE_WRITEABLE));
       
   353 
       
   354 #if INCLUDE_JVMCI
       
   355   emit_range_no(NULL JVMCI_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
       
   356                                  EMIT_RANGE_PD_DEVELOPER_FLAG,
       
   357                                  EMIT_RANGE_PRODUCT_FLAG,
       
   358                                  EMIT_RANGE_PD_PRODUCT_FLAG,
       
   359                                  EMIT_RANGE_DIAGNOSTIC_FLAG,
       
   360                                  EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
       
   361                                  EMIT_RANGE_EXPERIMENTAL_FLAG,
       
   362                                  EMIT_RANGE_NOTPRODUCT_FLAG,
       
   363                                  EMIT_RANGE_CHECK,
       
   364                                  IGNORE_CONSTRAINT,
       
   365                                  IGNORE_WRITEABLE));
       
   366 #endif // INCLUDE_JVMCI
       
   367 
       
   368 #ifdef COMPILER1
       
   369   emit_range_no(NULL C1_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
       
   370                               EMIT_RANGE_PD_DEVELOPER_FLAG,
       
   371                               EMIT_RANGE_PRODUCT_FLAG,
       
   372                               EMIT_RANGE_PD_PRODUCT_FLAG,
       
   373                               EMIT_RANGE_DIAGNOSTIC_FLAG,
       
   374                               EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
       
   375                               EMIT_RANGE_NOTPRODUCT_FLAG,
       
   376                               EMIT_RANGE_CHECK,
       
   377                               IGNORE_CONSTRAINT,
       
   378                               IGNORE_WRITEABLE));
       
   379 #endif // COMPILER1
       
   380 
       
   381 #ifdef COMPILER2
       
   382   emit_range_no(NULL C2_FLAGS(EMIT_RANGE_DEVELOPER_FLAG,
       
   383                               EMIT_RANGE_PD_DEVELOPER_FLAG,
       
   384                               EMIT_RANGE_PRODUCT_FLAG,
       
   385                               EMIT_RANGE_PD_PRODUCT_FLAG,
       
   386                               EMIT_RANGE_DIAGNOSTIC_FLAG,
       
   387                               EMIT_RANGE_PD_DIAGNOSTIC_FLAG,
       
   388                               EMIT_RANGE_EXPERIMENTAL_FLAG,
       
   389                               EMIT_RANGE_NOTPRODUCT_FLAG,
       
   390                               EMIT_RANGE_CHECK,
       
   391                               IGNORE_CONSTRAINT,
       
   392                               IGNORE_WRITEABLE));
       
   393 #endif // COMPILER2
       
   394 }
   352 }
   395 
   353 
   396 JVMFlagRange* JVMFlagRangeList::find(const char* name) {
   354 JVMFlagRange* JVMFlagRangeList::find(const char* name) {
   397   JVMFlagRange* found = NULL;
   355   JVMFlagRange* found = NULL;
   398   for (int i=0; i<length(); i++) {
   356   for (int i=0; i<length(); i++) {