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 *
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),
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
|
1 /*
2 * Copyright (c) 2003, 2018, 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 *
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 JVMFLAGS_EXT
185 NUM_JVMFlags
186 } JVMFlags;
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),
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 JVMFLAGSWITHTYPE_EXT
328 NUM_JVMFlagsWithType
329 } JVMFlagsWithType;
330
331 #define FLAG_IS_DEFAULT(name) (JVMFlagEx::is_default(FLAG_MEMBER(name)))
332 #define FLAG_IS_ERGO(name) (JVMFlagEx::is_ergo(FLAG_MEMBER(name)))
333 #define FLAG_IS_CMDLINE(name) (JVMFlagEx::is_cmdline(FLAG_MEMBER(name)))
334
335 #define FLAG_SET_DEFAULT(name, value) ((name) = (value))
336
337 #define FLAG_SET_CMDLINE(type, name, value) (JVMFlagEx::setOnCmdLine(FLAG_MEMBER_WITH_TYPE(name, type)), \
338 JVMFlagEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), JVMFlag::COMMAND_LINE))
339 #define FLAG_SET_ERGO(type, name, value) (JVMFlagEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name, type), (type)(value), JVMFlag::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 JVMFlag because
348 // of a circular dependency on the enum definition.
349 class JVMFlagEx : JVMFlag {
350 public:
351 static JVMFlag::Error boolAtPut(JVMFlagsWithType flag, bool value, JVMFlag::Flags origin);
352 static JVMFlag::Error intAtPut(JVMFlagsWithType flag, int value, JVMFlag::Flags origin);
353 static JVMFlag::Error uintAtPut(JVMFlagsWithType flag, uint value, JVMFlag::Flags origin);
354 static JVMFlag::Error intxAtPut(JVMFlagsWithType flag, intx value, JVMFlag::Flags origin);
355 static JVMFlag::Error uintxAtPut(JVMFlagsWithType flag, uintx value, JVMFlag::Flags origin);
356 static JVMFlag::Error uint64_tAtPut(JVMFlagsWithType flag, uint64_t value, JVMFlag::Flags origin);
357 static JVMFlag::Error size_tAtPut(JVMFlagsWithType flag, size_t value, JVMFlag::Flags origin);
358 static JVMFlag::Error doubleAtPut(JVMFlagsWithType flag, double value, JVMFlag::Flags origin);
359 // Contract: Flag will make private copy of the incoming value
360 static JVMFlag::Error ccstrAtPut(JVMFlagsWithType flag, ccstr value, JVMFlag::Flags origin);
361
362 static bool is_default(JVMFlags flag);
363 static bool is_ergo(JVMFlags flag);
364 static bool is_cmdline(JVMFlags flag);
365
366 static void setOnCmdLine(JVMFlagsWithType flag);
367 };
368
369 #endif // SHARE_VM_RUNTIME_GLOBALS_EXTENSION_HPP
|