提交 a31dc770 编写于 作者: T twisti

6677625: Move platform specific flags from globals.hpp to globals_<arch>.hpp

Reviewed-by: kvn, dholmes, coleenp
Contributed-by: NTao Mao <tao.mao@oracle.com>
上级 37c5fea2
/*
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -75,4 +75,43 @@ define_pd_global(bool, UseMembar, false);
// GC Ergo Flags
define_pd_global(intx, CMSYoungGenPerWorker, 16*M); // default max size of CMS young gen, per GC worker thread
#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct) \
\
product(intx, UseVIS, 99, \
"Highest supported VIS instructions set on Sparc") \
\
product(bool, UseCBCond, false, \
"Use compare and branch instruction on SPARC") \
\
product(bool, UseBlockZeroing, false, \
"Use special cpu instructions for block zeroing") \
\
product(intx, BlockZeroingLowLimit, 2048, \
"Minimum size in bytes when block zeroing will be used") \
\
product(bool, UseBlockCopy, false, \
"Use special cpu instructions for block copy") \
\
product(intx, BlockCopyLowLimit, 2048, \
"Minimum size in bytes when block copy will be used") \
\
develop(bool, UseV8InstrsOnly, false, \
"Use SPARC-V8 Compliant instruction subset") \
\
product(bool, UseNiagaraInstrs, false, \
"Use Niagara-efficient instruction subset") \
\
develop(bool, UseCASForSwap, false, \
"Do not use swap instructions, but only CAS (in a loop) on SPARC")\
\
product(uintx, ArraycopySrcPrefetchDistance, 0, \
"Distance to prefetch source array in arracopy") \
\
product(uintx, ArraycopyDstPrefetchDistance, 0, \
"Distance to prefetch destination array in arracopy") \
\
develop(intx, V8AtomicOperationUnderLockSpinCount, 50, \
"Number of times to spin wait on a v8 atomic operation lock") \
#endif // CPU_SPARC_VM_GLOBALS_SPARC_HPP
/*
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -78,4 +78,53 @@ define_pd_global(bool, UseMembar, false);
// GC Ergo Flags
define_pd_global(intx, CMSYoungGenPerWorker, 64*M); // default max size of CMS young gen, per GC worker thread
#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct) \
\
develop(bool, IEEEPrecision, true, \
"Enables IEEE precision (for INTEL only)") \
\
product(intx, FenceInstruction, 0, \
"(Unsafe,Unstable) Experimental") \
\
product(intx, ReadPrefetchInstr, 0, \
"Prefetch instruction to prefetch ahead") \
\
product(bool, UseStoreImmI16, true, \
"Use store immediate 16-bits value instruction on x86") \
\
product(intx, UseAVX, 99, \
"Highest supported AVX instructions set on x86/x64") \
\
diagnostic(bool, UseIncDec, true, \
"Use INC, DEC instructions on x86") \
\
product(bool, UseNewLongLShift, false, \
"Use optimized bitwise shift left") \
\
product(bool, UseAddressNop, false, \
"Use '0F 1F [addr]' NOP instructions on x86 cpus") \
\
product(bool, UseXmmLoadAndClearUpper, true, \
"Load low part of XMM register and clear upper part") \
\
product(bool, UseXmmRegToRegMoveAll, false, \
"Copy all XMM register bits when moving value between registers") \
\
product(bool, UseXmmI2D, false, \
"Use SSE2 CVTDQ2PD instruction to convert Integer to Double") \
\
product(bool, UseXmmI2F, false, \
"Use SSE2 CVTDQ2PS instruction to convert Integer to Float") \
\
product(bool, UseUnalignedLoadStores, false, \
"Use SSE2 MOVDQU instruction for Arraycopy") \
\
/* assembler */ \
product(bool, Use486InstrsOnly, false, \
"Use 80486 Compliant instruction subset") \
\
product(bool, UseCountLeadingZerosInstruction, false, \
"Use count leading zeros instruction") \
#endif // CPU_X86_VM_GLOBALS_X86_HPP
/*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
......@@ -60,4 +60,7 @@ define_pd_global(bool, UseMembar, false);
// GC Ergo Flags
define_pd_global(intx, CMSYoungGenPerWorker, 16*M); // default max size of CMS young gen, per GC worker thread
#define ARCH_FLAGS(develop, product, diagnostic, experimental, notproduct)
#endif // CPU_ZERO_VM_GLOBALS_ZERO_HPP
/*
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -156,18 +156,12 @@
develop(bool, CanonicalizeNodes, true, \
"Canonicalize graph nodes") \
\
develop(bool, CanonicalizeExperimental, false, \
"Canonicalize graph nodes, experimental code") \
\
develop(bool, PrintCanonicalization, false, \
"Print graph node canonicalization") \
\
develop(bool, UseTableRanges, true, \
"Faster versions of lookup table using ranges") \
\
develop(bool, UseFastExceptionHandling, true, \
"Faster handling of exceptions") \
\
develop_pd(bool, RoundFPResults, \
"Indicates whether rounding is needed for floating point results")\
\
......@@ -224,9 +218,6 @@
develop(bool, PinAllInstructions, false, \
"All instructions are pinned") \
\
develop(bool, ValueStackPinStackAll, true, \
"Pinning in ValueStack pin everything") \
\
develop(bool, UseFastNewInstance, true, \
"Use fast inlined instance allocation") \
\
......
......@@ -353,27 +353,9 @@
develop(bool, StressRecompilation, false, \
"Recompile each compiled method without subsuming loads or escape analysis.") \
\
/* controls for tier 1 compilations */ \
\
develop(bool, Tier1CountInvocations, true, \
"Generate code, during tier 1, to update invocation counter") \
\
product(intx, Tier1Inline, false, \
"enable inlining during tier 1") \
\
product(intx, Tier1MaxInlineSize, 8, \
"maximum bytecode size of a method to be inlined, during tier 1") \
\
product(intx, Tier1FreqInlineSize, 35, \
"max bytecode size of a frequent method to be inlined, tier 1") \
\
develop(intx, ImplicitNullCheckThreshold, 3, \
"Don't do implicit null checks if NPE's in a method exceeds limit") \
\
/* controls for loop optimization */ \
product(intx, Tier1LoopOptsCount, 0, \
"Set level of loop optimization for tier 1 compiles") \
\
product(intx, LoopOptsCount, 43, \
"Set level of loop optimization for tier 1 compiles") \
\
......@@ -505,6 +487,116 @@
\
product(bool, BlockLayoutRotateLoops, true, \
"Allow back branches to be fall throughs in the block layour") \
\
develop(bool, InlineReflectionGetCallerClass, true, \
"inline sun.reflect.Reflection.getCallerClass(), known to be part "\
"of base library DLL") \
\
develop(bool, InlineObjectCopy, true, \
"inline Object.clone and Arrays.copyOf[Range] intrinsics") \
\
develop(bool, SpecialStringCompareTo, true, \
"special version of string compareTo") \
\
develop(bool, SpecialStringIndexOf, true, \
"special version of string indexOf") \
\
develop(bool, SpecialStringEquals, true, \
"special version of string equals") \
\
develop(bool, SpecialArraysEquals, true, \
"special version of Arrays.equals(char[],char[])") \
\
develop(bool, BailoutToInterpreterForThrows, false, \
"Compiled methods which throws/catches exceptions will be " \
"deopt and intp.") \
\
develop(bool, ConvertCmpD2CmpF, true, \
"Convert cmpD to cmpF when one input is constant in float range") \
\
develop(bool, ConvertFloat2IntClipping, true, \
"Convert float2int clipping idiom to integer clipping") \
\
develop(bool, Use24BitFPMode, true, \
"Set 24-bit FPU mode on a per-compile basis ") \
\
develop(bool, Use24BitFP, true, \
"use FP instructions that produce 24-bit precise results") \
\
develop(bool, MonomorphicArrayCheck, true, \
"Uncommon-trap array store checks that require full type check") \
\
notproduct(bool, TracePhaseCCP, false, \
"Print progress during Conditional Constant Propagation") \
\
develop(bool, PrintDominators, false, \
"Print out dominator trees for GVN") \
\
notproduct(bool, TraceSpilling, false, \
"Trace spilling") \
\
notproduct(bool, TraceTypeProfile, false, \
"Trace type profile") \
\
develop(bool, PoisonOSREntry, true, \
"Detect abnormal calls to OSR code") \
\
product(bool, UseCondCardMark, false, \
"Check for already marked card before updating card table") \
\
develop(bool, SoftMatchFailure, trueInProduct, \
"If the DFA fails to match a node, print a message and bail out") \
\
develop(bool, InlineAccessors, true, \
"inline accessor methods (get/set)") \
\
product(intx, TypeProfileMajorReceiverPercent, 90, \
"% of major receiver type to all profiled receivers") \
\
notproduct(bool, TimeCompiler2, false, \
"detailed time the compiler (requires +TimeCompiler)") \
\
diagnostic(bool, PrintIntrinsics, false, \
"prints attempted and successful inlining of intrinsics") \
\
diagnostic(ccstrlist, DisableIntrinsic, "", \
"do not expand intrinsics whose (internal) names appear here") \
\
develop(bool, StressReflectiveCode, false, \
"Use inexact types at allocations, etc., to test reflection") \
\
diagnostic(bool, DebugInlinedCalls, true, \
"If false, restricts profiled locations to the root method only") \
\
notproduct(bool, VerifyLoopOptimizations, false, \
"verify major loop optimizations") \
\
diagnostic(bool, ProfileDynamicTypes, true, \
"do extra type profiling and use it more aggressively") \
\
develop(bool, TraceIterativeGVN, false, \
"Print progress during Iterative Global Value Numbering") \
\
develop(bool, VerifyIterativeGVN, false, \
"Verify Def-Use modifications during sparse Iterative Global " \
"Value Numbering") \
\
notproduct(bool, TraceCISCSpill, false, \
"Trace allocators use of cisc spillable instructions") \
\
product(bool, SplitIfBlocks, true, \
"Clone compares and control flow through merge points to fold " \
"some branches") \
\
develop(intx, FreqCountInvocations, 1, \
"Scaling factor for branch frequencies (deprecated)") \
\
product(intx, AliasLevel, 3, \
"0 for no aliasing, 1 for oop/field/static/array split, " \
"2 for class split, 3 for unique instances") \
\
develop(bool, VerifyAliases, false, \
"perform extra checks on the results of alias analysis") \
C2_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG)
......
......@@ -880,46 +880,6 @@ JRT_LEAF(void, OptoRuntime::profile_receiver_type_C(DataLayout* data, oopDesc* r
}
JRT_END
//-----------------------------------------------------------------------------
// implicit exception support.
static void report_null_exception_in_code_cache(address exception_pc) {
ResourceMark rm;
CodeBlob* n = CodeCache::find_blob(exception_pc);
if (n != NULL) {
tty->print_cr("#");
tty->print_cr("# HotSpot Runtime Error, null exception in generated code");
tty->print_cr("#");
tty->print_cr("# pc where exception happened = " INTPTR_FORMAT, exception_pc);
if (n->is_nmethod()) {
methodOop method = ((nmethod*)n)->method();
tty->print_cr("# Method where it happened %s.%s ", Klass::cast(method->method_holder())->name()->as_C_string(), method->name()->as_C_string());
tty->print_cr("#");
if (ShowMessageBoxOnError && UpdateHotSpotCompilerFileOnError &&
CompilerOracle::has_command_file()) {
const char* title = "HotSpot Runtime Error";
const char* question = "Do you want to exclude compilation of this method in future runs?";
if (os::message_box(title, question)) {
CompilerOracle::append_comment_to_file("");
CompilerOracle::append_comment_to_file("Null exception in compiled code resulted in the following exclude");
CompilerOracle::append_comment_to_file("");
CompilerOracle::append_exclude_to_file(method);
tty->print_cr("#");
tty->print_cr("# %s has been updated to exclude the specified method", CompileCommandFile);
tty->print_cr("#");
}
}
fatal("Implicit null exception happened in compiled method");
} else {
n->print();
fatal("Implicit null exception happened in generated stub");
}
}
fatal("Implicit null exception at wrong place");
}
//-------------------------------------------------------------------------------------
// register policy
......
......@@ -43,7 +43,6 @@
#include "shark/shark_globals.hpp"
#endif
RUNTIME_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PD_DEVELOPER_FLAG, \
MATERIALIZE_PRODUCT_FLAG, MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, MATERIALIZE_EXPERIMENTAL_FLAG, \
......@@ -55,6 +54,10 @@ RUNTIME_OS_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PD_DEVELOPER_FLAG, \
MATERIALIZE_PRODUCT_FLAG, MATERIALIZE_PD_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, MATERIALIZE_NOTPRODUCT_FLAG)
ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_DIAGNOSTIC_FLAG, MATERIALIZE_EXPERIMENTAL_FLAG, \
MATERIALIZE_NOTPRODUCT_FLAG)
MATERIALIZE_FLAGS_EXT
......@@ -212,7 +215,6 @@ void Flag::print_as_flag(outputStream* st) {
#define C1_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C1 notproduct}", DEFAULT },
#endif
#define C2_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 product}", DEFAULT },
#define C2_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 pd product}", DEFAULT },
#define C2_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 diagnostic}", DEFAULT },
......@@ -227,6 +229,17 @@ void Flag::print_as_flag(outputStream* st) {
#define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C2 notproduct}", DEFAULT },
#endif
#define ARCH_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH product}", DEFAULT },
#define ARCH_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH diagnostic}", DEFAULT },
#define ARCH_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH experimental}", DEFAULT },
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH}", DEFAULT },
#define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH notproduct}", DEFAULT },
#endif
#define SHARK_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark product}", DEFAULT },
#define SHARK_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark pd product}", DEFAULT },
#define SHARK_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark diagnostic}", DEFAULT },
......@@ -255,6 +268,7 @@ static Flag flagTable[] = {
#ifdef SHARK
SHARK_FLAGS(SHARK_DEVELOP_FLAG_STRUCT, SHARK_PD_DEVELOP_FLAG_STRUCT, SHARK_PRODUCT_FLAG_STRUCT, SHARK_PD_PRODUCT_FLAG_STRUCT, SHARK_DIAGNOSTIC_FLAG_STRUCT, SHARK_NOTPRODUCT_FLAG_STRUCT)
#endif
ARCH_FLAGS(ARCH_DEVELOP_FLAG_STRUCT, ARCH_PRODUCT_FLAG_STRUCT, ARCH_DIAGNOSTIC_FLAG_STRUCT, ARCH_EXPERIMENTAL_FLAG_STRUCT, ARCH_NOTPRODUCT_FLAG_STRUCT)
FLAGTABLE_EXT
{0, NULL, NULL}
};
......
......@@ -530,12 +530,6 @@ class CommandLineFlags {
product(intx, UseSSE, 99, \
"Highest supported SSE instructions set on x86/x64") \
\
product(intx, UseAVX, 99, \
"Highest supported AVX instructions set on x86/x64") \
\
product(intx, UseVIS, 99, \
"Highest supported VIS instructions set on Sparc") \
\
product(uintx, LargePageSizeInBytes, 0, \
"Large page size (0 to let VM choose the page size") \
\
......@@ -572,10 +566,6 @@ class CommandLineFlags {
product(bool, PrintVMQWaitTime, false, \
"Prints out the waiting time in VM operation queue") \
\
develop(bool, BailoutToInterpreterForThrows, false, \
"Compiled methods which throws/catches exceptions will be " \
"deopt and intp.") \
\
develop(bool, NoYieldsInMicrolock, false, \
"Disable yields in microlock") \
\
......@@ -618,9 +608,6 @@ class CommandLineFlags {
"inline Object::hashCode() native that is known to be part " \
"of base library DLL") \
\
develop(bool, InlineObjectCopy, true, \
"inline Object.clone and Arrays.copyOf[Range] intrinsics") \
\
develop(bool, InlineNatives, true, \
"inline natives that are known to be part of base library DLL") \
\
......@@ -633,31 +620,9 @@ class CommandLineFlags {
develop(bool, InlineThreadNatives, true, \
"inline Thread.currentThread, etc") \
\
develop(bool, InlineReflectionGetCallerClass, true, \
"inline sun.reflect.Reflection.getCallerClass(), known to be part "\
"of base library DLL") \
\
develop(bool, InlineUnsafeOps, true, \
"inline memory ops (native methods) from sun.misc.Unsafe") \
\
develop(bool, ConvertCmpD2CmpF, true, \
"Convert cmpD to cmpF when one input is constant in float range") \
\
develop(bool, ConvertFloat2IntClipping, true, \
"Convert float2int clipping idiom to integer clipping") \
\
develop(bool, SpecialStringCompareTo, true, \
"special version of string compareTo") \
\
develop(bool, SpecialStringIndexOf, true, \
"special version of string indexOf") \
\
develop(bool, SpecialStringEquals, true, \
"special version of string equals") \
\
develop(bool, SpecialArraysEquals, true, \
"special version of Arrays.equals(char[],char[])") \
\
product(bool, CriticalJNINatives, true, \
"check for critical JNI entry points") \
\
......@@ -667,9 +632,6 @@ class CommandLineFlags {
product(bool, UseSSE42Intrinsics, false, \
"SSE4.2 versions of intrinsics") \
\
product(bool, UseCondCardMark, false, \
"Check for already marked card before updating card table") \
\
develop(bool, TraceCallFixup, false, \
"traces all call fixups") \
\
......@@ -756,9 +718,6 @@ class CommandLineFlags {
develop(bool, ForceFloatExceptions, trueInDebug, \
"Force exceptions on FP stack under/overflow") \
\
develop(bool, SoftMatchFailure, trueInProduct, \
"If the DFA fails to match a node, print a message and bail out") \
\
develop(bool, VerifyStackAtCalls, false, \
"Verify that the stack pointer is unchanged after calls") \
\
......@@ -915,15 +874,6 @@ class CommandLineFlags {
"1: allow scavenging from the code cache; " \
"2: emit as many constants as the compiler can see") \
\
diagnostic(bool, TraceOSRBreakpoint, false, \
"Trace OSR Breakpoint ") \
\
diagnostic(bool, TraceCompileTriggered, false, \
"Trace compile triggered") \
\
diagnostic(bool, TraceTriggers, false, \
"Trace triggers") \
\
product(bool, AlwaysRestoreFPU, false, \
"Restore the FPU control word after every JNI call (expensive)") \
\
......@@ -1037,9 +987,6 @@ class CommandLineFlags {
develop(bool, UsePrivilegedStack, true, \
"Enable the security JVM functions") \
\
develop(bool, IEEEPrecision, true, \
"Enables IEEE precision (for INTEL only)") \
\
develop(bool, ProtectionDomainVerification, true, \
"Verifies protection domain before resolution in system " \
"dictionary") \
......@@ -1109,8 +1056,6 @@ class CommandLineFlags {
"(Unsafe,Unstable) " \
" Controls emission of inline sync fast-path code") \
\
product(intx, AlwaysInflate, 0, "(Unstable) Force inflation") \
\
product(intx, MonitorBound, 0, "Bound Monitor population") \
\
product(bool, MonitorInUseLists, false, "Track Monitors for Deflation") \
......@@ -1118,9 +1063,6 @@ class CommandLineFlags {
product(intx, Atomics, 0, \
"(Unsafe,Unstable) Diagnostic - Controls emission of atomics") \
\
product(intx, FenceInstruction, 0, \
"(Unsafe,Unstable) Experimental") \
\
product(intx, SyncFlags, 0, "(Unsafe,Unstable) Experimental Sync flags" ) \
\
product(intx, SyncVerbose, 0, "(Unstable)" ) \
......@@ -1150,10 +1092,6 @@ class CommandLineFlags {
"call thr_setconcurrency at thread create time to avoid " \
"LWP starvation on MP systems (For Solaris Only)") \
\
develop(bool, UpdateHotSpotCompilerFileOnError, true, \
"Should the system attempt to update the compiler file when " \
"an error occurs?") \
\
product(bool, ReduceSignalUsage, false, \
"Reduce the use of OS signals in Java and/or the VM") \
\
......@@ -1188,15 +1126,6 @@ class CommandLineFlags {
"Use alternate signals instead of SIGUSR1 & SIGUSR2 for VM " \
"internal signals (Solaris only)") \
\
product(bool, UseSpinning, false, \
"Use spinning in monitor inflation and before entry") \
\
product(bool, PreSpinYield, false, \
"Yield before inner spinning loop") \
\
product(bool, PostSpinYield, true, \
"Yield after inner spinning loop") \
\
product(bool, AllowJNIEnvProxy, false, \
"Allow JNIEnv proxies for jdbx") \
\
......@@ -1225,39 +1154,9 @@ class CommandLineFlags {
product(bool, LazyBootClassLoader, true, \
"Enable/disable lazy opening of boot class path entries") \
\
diagnostic(bool, UseIncDec, true, \
"Use INC, DEC instructions on x86") \
\
product(bool, UseNewLongLShift, false, \
"Use optimized bitwise shift left") \
\
product(bool, UseStoreImmI16, true, \
"Use store immediate 16-bits value instruction on x86") \
\
product(bool, UseAddressNop, false, \
"Use '0F 1F [addr]' NOP instructions on x86 cpus") \
\
product(bool, UseXmmLoadAndClearUpper, true, \
"Load low part of XMM register and clear upper part") \
\
product(bool, UseXmmRegToRegMoveAll, false, \
"Copy all XMM register bits when moving value between registers") \
\
product(bool, UseXmmI2D, false, \
"Use SSE2 CVTDQ2PD instruction to convert Integer to Double") \
\
product(bool, UseXmmI2F, false, \
"Use SSE2 CVTDQ2PS instruction to convert Integer to Float") \
\
product(bool, UseXMMForArrayCopy, false, \
"Use SSE2 MOVQ instruction for Arraycopy") \
\
product(bool, UseUnalignedLoadStores, false, \
"Use SSE2 MOVDQU instruction for Arraycopy") \
\
product(bool, UseCBCond, false, \
"Use compare and branch instruction on SPARC") \
\
product(intx, FieldsAllocationStyle, 1, \
"0 - type based with oops first, 1 - with oops last, " \
"2 - oops in super and sub classes are together") \
......@@ -1387,9 +1286,6 @@ class CommandLineFlags {
develop(bool, TraceStartupTime, false, \
"Trace setup time") \
\
product(ccstr, HPILibPath, NULL, \
"Specify alternate path to HPI library") \
\
develop(bool, TraceProtectionDomainVerification, false, \
"Trace protection domain verifcation") \
\
......@@ -1405,10 +1301,6 @@ class CommandLineFlags {
product(bool, TraceMonitorInflation, false, \
"Trace monitor inflation in JVM") \
\
/* assembler */ \
product(bool, Use486InstrsOnly, false, \
"Use 80486 Compliant instruction subset") \
\
/* gc */ \
\
product(bool, UseSerialGC, false, \
......@@ -1467,9 +1359,6 @@ class CommandLineFlags {
develop(uintx, ParallelOldGCSplitInterval, 3, \
"How often to provoke splitting a young gen space") \
\
develop(bool, TraceRegionTasksQueuing, false, \
"Trace the queuing of the region tasks") \
\
product(uintx, ConcGCThreads, 0, \
"Number of threads concurrent gc will use") \
\
......@@ -1621,10 +1510,6 @@ class CommandLineFlags {
"The gain in the feedback loop for on-the-fly PLAB resizing" \
" during a scavenge") \
\
product(uintx, CMSOldPLABReactivityCeiling, 10, \
"The clamping of the gain in the feedback loop for on-the-fly" \
" PLAB resizing during a scavenge") \
\
product(bool, AlwaysPreTouch, false, \
"It forces all freshly committed pages to be pre-touched.") \
\
......@@ -1632,12 +1517,6 @@ class CommandLineFlags {
"The maximum size of young gen chosen by default per GC worker " \
"thread available") \
\
product(bool, GCOverheadReporting, false, \
"Enables the GC overhead reporting facility") \
\
product(intx, GCOverheadReportingPeriodMS, 100, \
"Reporting period for conc GC overhead reporting, in ms ") \
\
product(bool, CMSIncrementalMode, false, \
"Whether CMS GC should operate in \"incremental\" mode") \
\
......@@ -2017,9 +1896,6 @@ class CommandLineFlags {
experimental(uintx, WorkStealingSpinToYieldRatio, 10, \
"Ratio of hard spins to calls to yield") \
\
product(uintx, PreserveMarkStackSize, 1024, \
"Size for stack used in promotion failure handling") \
\
develop(uintx, ObjArrayMarkingStride, 512, \
"Number of ObjArray elements to push onto the marking stack" \
"before pushing a continuation entry") \
......@@ -2044,18 +1920,6 @@ class CommandLineFlags {
product(bool, TLABStats, true, \
"Print various TLAB related information") \
\
product(bool, UseBlockZeroing, false, \
"Use special cpu instructions for block zeroing") \
\
product(intx, BlockZeroingLowLimit, 2048, \
"Minimum size in bytes when block zeroing will be used") \
\
product(bool, UseBlockCopy, false, \
"Use special cpu instructions for block copy") \
\
product(intx, BlockCopyLowLimit, 2048, \
"Minimum size in bytes when block copy will be used") \
\
product(bool, PrintRevisitStats, false, \
"Print revisit (klass and MDO) stack related information") \
\
......@@ -2248,9 +2112,6 @@ class CommandLineFlags {
product(intx, PrefetchFieldsAhead, -1, \
"How many fields ahead to prefetch in oop scan (<= 0 means off)") \
\
develop(bool, UsePrefetchQueue, true, \
"Use the prefetch queue during PS promotion") \
\
diagnostic(bool, VerifyBeforeExit, trueInDebug, \
"Verify system before exiting") \
\
......@@ -2486,27 +2347,9 @@ class CommandLineFlags {
develop(bool, CITraceTypeFlow, false, \
"detailed per-bytecode tracing of ciTypeFlow analysis") \
\
develop(intx, CICloneLoopTestLimit, 100, \
"size limit for blocks heuristically cloned in ciTypeFlow") \
\
develop(intx, OSROnlyBCI, -1, \
"OSR only at this bci. Negative values mean exclude that bci") \
\
/* temp diagnostics */ \
\
diagnostic(bool, TraceRedundantCompiles, false, \
"Have compile broker print when a request already in the queue is"\
" requested again") \
\
diagnostic(bool, InitialCompileFast, false, \
"Initial compile at CompLevel_fast_compile") \
\
diagnostic(bool, InitialCompileReallyFast, false, \
"Initial compile at CompLevel_really_fast_compile (no profile)") \
\
diagnostic(bool, FullProfileOnReInterpret, true, \
"On re-interpret unc-trap compile next at CompLevel_fast_compile")\
\
/* compiler */ \
\
product(intx, CICompilerCount, CI_COMPILER_COUNT, \
......@@ -2520,12 +2363,6 @@ class CommandLineFlags {
"proper StackOverflow handling; disable only to measure cost " \
"of stackbanging)") \
\
develop(bool, Use24BitFPMode, true, \
"Set 24-bit FPU mode on a per-compile basis ") \
\
develop(bool, Use24BitFP, true, \
"use FP instructions that produce 24-bit precise results") \
\
develop(bool, UseStrictFP, true, \
"use strict fp if modifier strictfp is set") \
\
......@@ -2557,9 +2394,6 @@ class CommandLineFlags {
"print the break down of clean up tasks performed during" \
" safepoint") \
\
develop(bool, InlineAccessors, true, \
"inline accessor methods (get/set)") \
\
product(bool, Inline, true, \
"enable inlining") \
\
......@@ -2572,33 +2406,15 @@ class CommandLineFlags {
product(bool, UseTypeProfile, true, \
"Check interpreter profile for historically monomorphic calls") \
\
product(intx, TypeProfileMajorReceiverPercent, 90, \
"% of major receiver type to all profiled receivers") \
\
notproduct(bool, TimeCompiler, false, \
"time the compiler") \
\
notproduct(bool, TimeCompiler2, false, \
"detailed time the compiler (requires +TimeCompiler)") \
\
diagnostic(bool, PrintInlining, false, \
"prints inlining optimizations") \
\
diagnostic(bool, PrintIntrinsics, false, \
"prints attempted and successful inlining of intrinsics") \
\
product(bool, UseCountLeadingZerosInstruction, false, \
"Use count leading zeros instruction") \
\
product(bool, UsePopCountInstruction, false, \
"Use population count instruction") \
\
diagnostic(ccstrlist, DisableIntrinsic, "", \
"do not expand intrinsics whose (internal) names appear here") \
\
develop(bool, StressReflectiveCode, false, \
"Use inexact types at allocations, etc., to test reflection") \
\
develop(bool, EagerInitialization, false, \
"Eagerly initialize classes if possible") \
\
......@@ -2608,10 +2424,6 @@ class CommandLineFlags {
develop(bool, PrintMethodFlushing, false, \
"print the nmethods being flushed") \
\
notproduct(bool, LogMultipleMutexLocking, false, \
"log locking and unlocking of mutexes (only if multiple locks " \
"are held)") \
\
develop(bool, UseRelocIndex, false, \
"use an index to speed random access to relocations") \
\
......@@ -2621,9 +2433,6 @@ class CommandLineFlags {
diagnostic(bool, DebugNonSafepoints, trueInDebug, \
"Generate extra debugging info for non-safepoints in nmethods") \
\
diagnostic(bool, DebugInlinedCalls, true, \
"If false, restricts profiled locations to the root method only") \
\
product(bool, PrintVMOptions, false, \
"Print flags that appeared on the command line") \
\
......@@ -2700,9 +2509,6 @@ class CommandLineFlags {
notproduct(bool, IgnoreLockingAssertions, false, \
"disable locking assertions (for speed)") \
\
notproduct(bool, VerifyLoopOptimizations, false, \
"verify major loop optimizations") \
\
product(bool, RangeCheckElimination, true, \
"Split loop iterations to eliminate range checks") \
\
......@@ -2712,12 +2518,6 @@ class CommandLineFlags {
develop(bool, TypeProfileCasts, true, \
"treat casts like calls for purposes of type profiling") \
\
develop(bool, MonomorphicArrayCheck, true, \
"Uncommon-trap array store checks that require full type check") \
\
diagnostic(bool, ProfileDynamicTypes, true, \
"do extra type profiling and use it more aggressively") \
\
develop(bool, DelayCompilationDuringStartup, true, \
"Delay invoking the compiler until main application class is " \
"loaded") \
......@@ -2732,19 +2532,9 @@ class CommandLineFlags {
notproduct(intx, CompileTheWorldSafepointInterval, 100, \
"Force a safepoint every n compiles so sweeper can keep up") \
\
develop(bool, TraceIterativeGVN, false, \
"Print progress during Iterative Global Value Numbering") \
\
develop(bool, FillDelaySlots, true, \
"Fill delay slots (on SPARC only)") \
\
develop(bool, VerifyIterativeGVN, false, \
"Verify Def-Use modifications during sparse Iterative Global " \
"Value Numbering") \
\
notproduct(bool, TracePhaseCCP, false, \
"Print progress during Conditional Constant Propagation") \
\
develop(bool, TimeLivenessAnalysis, false, \
"Time computation of bytecode liveness analysis") \
\
......@@ -2757,22 +2547,9 @@ class CommandLineFlags {
notproduct(bool, CollectIndexSetStatistics, false, \
"Collect information about IndexSets") \
\
develop(bool, PrintDominators, false, \
"Print out dominator trees for GVN") \
\
develop(bool, UseLoopSafepoints, true, \
"Generate Safepoint nodes in every loop") \
\
notproduct(bool, TraceCISCSpill, false, \
"Trace allocators use of cisc spillable instructions") \
\
notproduct(bool, TraceSpilling, false, \
"Trace spilling") \
\
product(bool, SplitIfBlocks, true, \
"Clone compares and control flow through merge points to fold " \
"some branches") \
\
develop(intx, FastAllocateSizeLimit, 128*K, \
/* Note: This value is zero mod 1<<13 for a cheap sparc set. */ \
"Inline allocations larger than this in doublewords must go slow")\
......@@ -2829,15 +2606,6 @@ class CommandLineFlags {
develop(bool, UseFastSignatureHandlers, true, \
"Use fast signature handlers for native calls") \
\
develop(bool, UseV8InstrsOnly, false, \
"Use SPARC-V8 Compliant instruction subset") \
\
product(bool, UseNiagaraInstrs, false, \
"Use Niagara-efficient instruction subset") \
\
develop(bool, UseCASForSwap, false, \
"Do not use swap instructions, but only CAS (in a loop) on SPARC")\
\
product(bool, UseLoopCounter, true, \
"Increment invocation counter on backward branch") \
\
......@@ -2854,9 +2622,6 @@ class CommandLineFlags {
notproduct(bool, TraceOnStackReplacement, false, \
"Trace on stack replacement") \
\
develop(bool, PoisonOSREntry, true, \
"Detect abnormal calls to OSR code") \
\
product_pd(bool, PreferInterpreterNativeStubs, \
"Use always interpreter stubs for native methods invoked via " \
"interpreter") \
......@@ -2899,9 +2664,6 @@ class CommandLineFlags {
develop(bool, TraceFrequencyInlining, false, \
"Trace frequency based inlining") \
\
notproduct(bool, TraceTypeProfile, false, \
"Trace type profile") \
\
develop_pd(bool, InlineIntrinsics, \
"Inline intrinsics that can be statically resolved") \
\
......@@ -2989,15 +2751,6 @@ class CommandLineFlags {
product(intx, AllocatePrefetchInstr, 0, \
"Prefetch instruction to prefetch ahead of allocation pointer") \
\
product(intx, ReadPrefetchInstr, 0, \
"Prefetch instruction to prefetch ahead") \
\
product(uintx, ArraycopySrcPrefetchDistance, 0, \
"Distance to prefetch source array in arracopy") \
\
product(uintx, ArraycopyDstPrefetchDistance, 0, \
"Distance to prefetch destination array in arracopy") \
\
/* deoptimization */ \
develop(bool, TraceDeoptimization, false, \
"Trace deoptimization") \
......@@ -3088,9 +2841,6 @@ class CommandLineFlags {
product(intx, MinInliningThreshold, 250, \
"min. invocation count a method needs to have to be inlined") \
\
develop(intx, AlignEntryCode, 4, \
"aligns entry code to specified value (in bytes)") \
\
develop(intx, MethodHistogramCutoff, 100, \
"cutoff value for method invoc. histogram (+CountCalls)") \
\
......@@ -3130,9 +2880,6 @@ class CommandLineFlags {
"Minimum sleep() interval (milliseconds) when " \
"ConvertSleepToYield is off (used for SOLARIS)") \
\
product(intx, EventLogLength, 2000, \
"maximum nof events in event log") \
\
develop(intx, ProfilerPCTickThreshold, 15, \
"Number of ticks in a PC buckets to be a hotspot") \
\
......@@ -3171,9 +2918,6 @@ class CommandLineFlags {
product(intx, PerBytecodeTrapLimit, 4, \
"Limit on traps (of one kind) at a particular BCI") \
\
develop(intx, FreqCountInvocations, 1, \
"Scaling factor for branch frequencies (deprecated)") \
\
develop(intx, InlineFrequencyRatio, 20, \
"Ratio of call site execution to caller method invocation") \
\
......@@ -3187,29 +2931,12 @@ class CommandLineFlags {
develop(intx, InlineThrowMaxSize, 200, \
"Force inlining of throwing methods smaller than this") \
\
product(intx, AliasLevel, 3, \
"0 for no aliasing, 1 for oop/field/static/array split, " \
"2 for class split, 3 for unique instances") \
\
develop(bool, VerifyAliases, false, \
"perform extra checks on the results of alias analysis") \
\
develop(intx, ProfilerNodeSize, 1024, \
"Size in K to allocate for the Profile Nodes of each thread") \
\
develop(intx, V8AtomicOperationUnderLockSpinCount, 50, \
"Number of times to spin wait on a v8 atomic operation lock") \
\
product(intx, ReadSpinIterations, 100, \
"Number of read attempts before a yield (spin inner loop)") \
\
product_pd(intx, PreInflateSpin, \
"Number of times to spin wait before inflation") \
\
product(intx, PreBlockSpin, 10, \
"Number of times to spin in an inflated lock before going to " \
"an OS lock") \
\
/* gc parameters */ \
product(uintx, InitialHeapSize, 0, \
"Initial heap size (in bytes); zero means OldSize + NewSize") \
......@@ -3466,10 +3193,6 @@ class CommandLineFlags {
"(non-negative value throws OOM after this many CI accesses " \
"in each compile)") \
\
develop(intx, CIFireOOMAtDelay, -1, \
"Wait for this many CI accesses to occur in all compiles before " \
"beginning to throw OutOfMemoryErrors in each compile") \
\
notproduct(bool, CIObjectFactoryVerify, false, \
"enable potentially expensive verification in ciObjectFactory") \
\
......@@ -3663,9 +3386,6 @@ class CommandLineFlags {
product(bool, PrintTieredEvents, false, \
"Print tiered events notifications") \
\
product(bool, StressTieredRuntime, false, \
"Alternate client and server compiler on compile requests") \
\
product_pd(intx, OnStackReplacePercentage, \
"NON_TIERED number of method invocations/branches (expressed as %"\
"of CompileThreshold) before (re-)compiling OSR code") \
......@@ -3835,9 +3555,6 @@ class CommandLineFlags {
"support JSR 292 (method handles, invokedynamic, " \
"anonymous classes") \
\
product(bool, AnonymousClasses, false, \
"support sun.misc.Unsafe.defineAnonymousClass (deprecated)") \
\
diagnostic(bool, PrintMethodHandleStubs, false, \
"Print generated stub code for method handles") \
\
......@@ -3952,6 +3669,8 @@ RUNTIME_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT
RUNTIME_OS_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_NOTPRODUCT_FLAG)
ARCH_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG)
// Extensions
#include "runtime/globals_ext.hpp"
......
/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -66,7 +66,6 @@
#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
#define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
......@@ -81,6 +80,17 @@
#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
#define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) /* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
typedef enum {
RUNTIME_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)
RUNTIME_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)
......@@ -93,6 +103,7 @@ typedef enum {
#ifdef COMPILER2
C2_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)
#endif
ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER, ARCH_PRODUCT_FLAG_MEMBER, ARCH_DIAGNOSTIC_FLAG_MEMBER, ARCH_EXPERIMENTAL_FLAG_MEMBER, ARCH_NOTPRODUCT_FLAG_MEMBER)
COMMANDLINEFLAG_EXT
NUM_CommandLineFlag
} CommandLineFlag;
......@@ -134,7 +145,6 @@ typedef enum {
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
#endif // _LP64
#define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
......@@ -149,6 +159,17 @@ typedef enum {
#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
#define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) /* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
typedef enum {
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE,
RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE,
......@@ -193,6 +214,11 @@ typedef enum {
C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)
#endif
ARCH_FLAGS(ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE,
ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE,
ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE,
ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE,
ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE)
COMMANDLINEFLAGWITHTYPE_EXT
NUM_CommandLineFlagWithType
} CommandLineFlagWithType;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册