Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/runtime/globals_extension.hpp
32285 views
/*1* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#ifndef SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP25#define SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP2627#include "runtime/globals.hpp"28#include "utilities/macros.hpp"29#include "utilities/top.hpp"3031// Construct enum of Flag_<cmdline-arg> constants.3233// Parens left off in the following for the enum decl below.34#define FLAG_MEMBER(flag) Flag_##flag3536#define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),37#define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),38#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),39#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),40#define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),41#define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),42#define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),43#define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),44#define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),4546#ifdef _LP6447#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),48#else49#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) /* flag is constant */50#endif // _LP645152#define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),53#define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),54#define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),55#define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),56#define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),57#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),5859#define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),60#define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),61#define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),62#define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),63#define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),64#define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),65#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),6667#define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),68#define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),69#define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),70#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),71#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),7273typedef enum {74RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, RUNTIME_PD_DEVELOP_FLAG_MEMBER, RUNTIME_PRODUCT_FLAG_MEMBER, RUNTIME_PD_PRODUCT_FLAG_MEMBER, RUNTIME_DIAGNOSTIC_FLAG_MEMBER, RUNTIME_EXPERIMENTAL_FLAG_MEMBER, RUNTIME_NOTPRODUCT_FLAG_MEMBER, RUNTIME_MANAGEABLE_FLAG_MEMBER, RUNTIME_PRODUCT_RW_FLAG_MEMBER, RUNTIME_LP64_PRODUCT_FLAG_MEMBER)75RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, RUNTIME_PD_DEVELOP_FLAG_MEMBER, RUNTIME_PRODUCT_FLAG_MEMBER, RUNTIME_PD_PRODUCT_FLAG_MEMBER, RUNTIME_DIAGNOSTIC_FLAG_MEMBER, RUNTIME_NOTPRODUCT_FLAG_MEMBER)76#if INCLUDE_ALL_GCS77G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, RUNTIME_PD_DEVELOP_FLAG_MEMBER, RUNTIME_PRODUCT_FLAG_MEMBER, RUNTIME_PD_PRODUCT_FLAG_MEMBER, RUNTIME_DIAGNOSTIC_FLAG_MEMBER, RUNTIME_EXPERIMENTAL_FLAG_MEMBER, RUNTIME_NOTPRODUCT_FLAG_MEMBER, RUNTIME_MANAGEABLE_FLAG_MEMBER, RUNTIME_PRODUCT_RW_FLAG_MEMBER)78SHENANDOAH_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER, RUNTIME_PD_DEVELOP_FLAG_MEMBER, RUNTIME_PRODUCT_FLAG_MEMBER, RUNTIME_PD_PRODUCT_FLAG_MEMBER, RUNTIME_DIAGNOSTIC_FLAG_MEMBER, RUNTIME_EXPERIMENTAL_FLAG_MEMBER, RUNTIME_NOTPRODUCT_FLAG_MEMBER, RUNTIME_MANAGEABLE_FLAG_MEMBER, RUNTIME_PRODUCT_RW_FLAG_MEMBER)79#endif // INCLUDE_ALL_GCS80#ifdef COMPILER181C1_FLAGS(C1_DEVELOP_FLAG_MEMBER, C1_PD_DEVELOP_FLAG_MEMBER, C1_PRODUCT_FLAG_MEMBER, C1_PD_PRODUCT_FLAG_MEMBER, C1_DIAGNOSTIC_FLAG_MEMBER, C1_NOTPRODUCT_FLAG_MEMBER)82#endif83#ifdef COMPILER284C2_FLAGS(C2_DEVELOP_FLAG_MEMBER, C2_PD_DEVELOP_FLAG_MEMBER, C2_PRODUCT_FLAG_MEMBER, C2_PD_PRODUCT_FLAG_MEMBER, C2_DIAGNOSTIC_FLAG_MEMBER, C2_EXPERIMENTAL_FLAG_MEMBER, C2_NOTPRODUCT_FLAG_MEMBER)85#endif86ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER, ARCH_PRODUCT_FLAG_MEMBER, ARCH_DIAGNOSTIC_FLAG_MEMBER, ARCH_EXPERIMENTAL_FLAG_MEMBER, ARCH_NOTPRODUCT_FLAG_MEMBER)87COMMANDLINEFLAG_EXT88NUM_CommandLineFlag89} CommandLineFlag;9091// Construct enum of Flag_<cmdline-arg>_<type> constants.9293#define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type9495#define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),96#define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),97#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),98#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),99#define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),100#define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),101#define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),102#define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),103#define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),104105#define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),106#define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),107#define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),108#define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),109#define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),110#define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),111112#ifdef _LP64113#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),114#else115#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */116#endif // _LP64117118#define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),119#define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),120#define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),121#define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),122#define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),123#define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),124#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),125126#define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),127#define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),128#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),129#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),130#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),131132typedef enum {133RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,134RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,135RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,136RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,137RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,138RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,139RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,140RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,141RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE,142RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE)143RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,144RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,145RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,146RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,147RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,148RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)149#if INCLUDE_ALL_GCS150G1_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,151RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,152RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,153RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,154RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,155RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,156RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,157RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,158RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE)159SHENANDOAH_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,160RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,161RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE,162RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,163RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,164RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,165RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE,166RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE,167RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE)168#endif // INCLUDE_ALL_GCS169#ifdef COMPILER1170C1_FLAGS(C1_DEVELOP_FLAG_MEMBER_WITH_TYPE,171C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,172C1_PRODUCT_FLAG_MEMBER_WITH_TYPE,173C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,174C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,175C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)176#endif177#ifdef COMPILER2178C2_FLAGS(C2_DEVELOP_FLAG_MEMBER_WITH_TYPE,179C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,180C2_PRODUCT_FLAG_MEMBER_WITH_TYPE,181C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE,182C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,183C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,184C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)185#endif186ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE,187ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE,188ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,189ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,190ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)191COMMANDLINEFLAGWITHTYPE_EXT192NUM_CommandLineFlagWithType193} CommandLineFlagWithType;194195#define FLAG_IS_DEFAULT(name) (CommandLineFlagsEx::is_default(FLAG_MEMBER(name)))196#define FLAG_IS_ERGO(name) (CommandLineFlagsEx::is_ergo(FLAG_MEMBER(name)))197#define FLAG_IS_CMDLINE(name) (CommandLineFlagsEx::is_cmdline(FLAG_MEMBER(name)))198199#define FLAG_SET_DEFAULT(name, value) ((name) = (value))200201#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::COMMAND_LINE))202#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), Flag::ERGONOMIC))203#define FLAG_SET_MGMT(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), Flag::MANAGEMENT))204205// Can't put the following in CommandLineFlags because206// of a circular dependency on the enum definition.207class CommandLineFlagsEx : CommandLineFlags {208public:209static void boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin);210static void intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin);211static void uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin);212static void uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin);213static void doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin);214// Contract: Flag will make private copy of the incoming value215static void ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin);216217static bool is_default(CommandLineFlag flag);218static bool is_ergo(CommandLineFlag flag);219static bool is_cmdline(CommandLineFlag flag);220};221222#endif // SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP223224225