annotate c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotOptions.java @ 2296:34354e2e40a3

cleanups and client/server fixes: * explicit init of CompilerImpl * CompilationServer terminates without EOFException * moved C1XOptions initialization code into separate class (static initializer changed to static method) * added ConnectionObserver to CompilationServer
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 13 Apr 2011 14:40:13 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2296
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
1 /*
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
2 * Copyright (c) 2011 Sun Microsystems, Inc. All rights reserved.
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
3 *
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
5 * that is described in this document. In particular, and without limitation, these intellectual property
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
6 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
7 * more additional patents or pending patent applications in the U.S. and in other countries.
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
8 *
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
10 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
11 * supplements.
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
12 *
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
13 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
14 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
15 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
16 * U.S. and other countries.
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
17 *
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
18 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
19 * Company, Ltd.
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
20 */
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
21
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
22 package com.sun.hotspot.c1x;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
23
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
24 import java.lang.reflect.*;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
25
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
26 import com.sun.c1x.*;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
27 import com.sun.hotspot.c1x.logging.*;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
28
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
29 public class HotSpotOptions {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
30
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
31 public static void setDefaultOptions() {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
32 C1XOptions.setOptimizationLevel(3);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
33 C1XOptions.OptInlineExcept = false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
34 C1XOptions.OptInlineSynchronized = false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
35 C1XOptions.DetailedAsserts = false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
36 C1XOptions.CommentedAssembly = false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
37 C1XOptions.MethodEndBreakpointGuards = 2;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
38 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
39
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
40 public static boolean setOption(String option) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
41 if (option.length() == 0) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
42 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
43 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
44
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
45 Object value = null;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
46 String fieldName = null;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
47 String valueString = null;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
48
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
49 System.out.println(option);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
50
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
51 char first = option.charAt(0);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
52 if (first == '+' || first == '-') {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
53 fieldName = option.substring(1);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
54 value = (first == '+');
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
55 } else {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
56 int index = option.indexOf('=');
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
57 if (index == -1) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
58 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
59 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
60 fieldName = option.substring(0, index);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
61 valueString = option.substring(index + 1);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
62 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
63
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
64 Field f;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
65 try {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
66 f = C1XOptions.class.getField(fieldName);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
67
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
68 if (value == null) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
69 if (f.getType() == Float.TYPE) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
70 value = Float.parseFloat(valueString);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
71 } else if (f.getType() == Double.TYPE) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
72 value = Double.parseDouble(valueString);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
73 } else if (f.getType() == Integer.TYPE) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
74 value = Integer.parseInt(valueString);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
75 } else if (f.getType() == Boolean.TYPE) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
76 value = Boolean.parseBoolean(valueString);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
77 } else if (f.getType() == String.class) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
78 value = valueString;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
79 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
80 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
81 if (value != null) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
82 f.set(null, value);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
83 Logger.info("Set option " + fieldName + " to " + value);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
84 } else {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
85 Logger.info("Wrong value \"" + valueString + "\" for option " + fieldName);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
86 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
87 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
88 } catch (SecurityException e) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
89 Logger.info("Security exception when setting option " + option);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
90 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
91 } catch (NoSuchFieldException e) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
92 Logger.info("Could not find option " + fieldName);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
93 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
94 } catch (IllegalArgumentException e) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
95 Logger.info("Illegal value for option " + option);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
96 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
97 } catch (IllegalAccessException e) {
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
98 Logger.info("Illegal access exception when setting option " + option);
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
99 return false;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
100 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
101
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
102 return true;
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
103 }
34354e2e40a3 cleanups and client/server fixes:
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
104 }