Mercurial > hg > graal-compiler
comparison c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java @ 1437:9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Mon, 25 Oct 2010 16:47:52 +0200 |
parents | 72cfb36c6bb2 |
children | a7a0ef3c6858 |
comparison
equal
deleted
inserted
replaced
1436:9dae1aae168a | 1437:9e5e83ca2259 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2009-2010 Sun Microsystems, Inc. All rights reserved. | 2 * Copyright (c) 2010 Sun Microsystems, Inc. All rights reserved. |
3 * | 3 * |
4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is | 4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product |
5 * described in this document. In particular, and without limitation, these intellectual property rights may include one | 5 * that is described in this document. In particular, and without limitation, these intellectual property |
6 * or more of the U.S. patents listed at http://www.sun.com/patents and one or more additional patents or pending patent | 6 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or |
7 * applications in the U.S. and in other countries. | 7 * more additional patents or pending patent applications in the U.S. and in other countries. |
8 * | 8 * |
9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun Microsystems, Inc. standard | 9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun |
10 * license agreement and applicable provisions of the FAR and its supplements. | 10 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its |
11 * | 11 * supplements. |
12 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or registered | 12 * |
13 * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks are used under license and | 13 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or |
14 * are trademarks or registered trademarks of SPARC International, Inc. in the U.S. and other countries. | 14 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks |
15 * | 15 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the |
16 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open Company, Ltd. | 16 * U.S. and other countries. |
17 * | |
18 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open | |
19 * Company, Ltd. | |
17 */ | 20 */ |
18 | 21 |
19 package com.sun.hotspot.c1x; | 22 package com.sun.hotspot.c1x; |
20 | 23 |
21 import java.io.*; | 24 import java.io.*; |
22 | 25 import java.lang.reflect.*; |
26 | |
27 import com.sun.c1x.*; | |
23 import com.sun.cri.ci.*; | 28 import com.sun.cri.ci.*; |
24 import com.sun.cri.ri.*; | 29 import com.sun.cri.ri.*; |
25 import com.sun.hotspot.c1x.logging.*; | 30 import com.sun.hotspot.c1x.logging.*; |
26 | 31 |
27 /** | 32 /** |
30 * @author Thomas Wuerthinger, Lukas Stadler | 35 * @author Thomas Wuerthinger, Lukas Stadler |
31 */ | 36 */ |
32 public class VMExitsNative implements VMExits { | 37 public class VMExitsNative implements VMExits { |
33 | 38 |
34 @Override | 39 @Override |
35 public void compileMethod(long methodVmId, String name, int entry_bci) { | 40 public boolean setOption(String option) { |
41 if (option.length() == 0) { | |
42 return false; | |
43 } | |
44 | |
45 Object value = null; | |
46 String fieldName = null; | |
47 String valueString = null; | |
48 | |
49 char first = option.charAt(0); | |
50 if (first == '+' || first == '-') { | |
51 fieldName = option.substring(1); | |
52 value = (first == '+'); | |
53 } else { | |
54 int index = option.indexOf('='); | |
55 if (index == -1) { | |
56 return false; | |
57 } | |
58 fieldName = option.substring(0, index); | |
59 valueString = option.substring(index + 1); | |
60 } | |
61 | |
62 Field f; | |
36 try { | 63 try { |
37 long t1 = System.nanoTime(); | 64 f = C1XOptions.class.getField(fieldName); |
65 | |
66 if (value == null) { | |
67 if (f.getType() == Float.TYPE) { | |
68 value = Float.parseFloat(valueString); | |
69 } else if (f.getType() == Double.TYPE) { | |
70 value = Double.parseDouble(valueString); | |
71 } else if (f.getType() == Integer.TYPE) { | |
72 value = Integer.parseInt(valueString); | |
73 } else if (f.getType() == Boolean.TYPE) { | |
74 value = Boolean.parseBoolean(valueString); | |
75 } | |
76 } | |
77 if (value != null) { | |
78 f.set(null, value); | |
79 Logger.info("Set option " + fieldName + " to " + value); | |
80 } else { | |
81 Logger.info("Wrong value \"" + valueString + "\" for option fieldName"); | |
82 return false; | |
83 } | |
84 } catch (SecurityException e) { | |
85 Logger.info("Security exception when setting option " + option); | |
86 return false; | |
87 } catch (NoSuchFieldException e) { | |
88 Logger.info("Could not find option " + fieldName); | |
89 return false; | |
90 } catch (IllegalArgumentException e) { | |
91 Logger.info("Illegal value for option " + option); | |
92 return false; | |
93 } catch (IllegalAccessException e) { | |
94 Logger.info("Illegal access exception when setting option " + option); | |
95 return false; | |
96 } | |
97 | |
98 return true; | |
99 } | |
100 | |
101 @Override | |
102 public void compileMethod(long methodVmId, String name, int entryBCI) { | |
103 try { | |
38 Compiler compiler = Compiler.getInstance(); | 104 Compiler compiler = Compiler.getInstance(); |
39 HotSpotMethodResolved riMethod = new HotSpotMethodResolved(methodVmId, name); | 105 HotSpotMethodResolved riMethod = new HotSpotMethodResolved(methodVmId, name); |
40 CiResult result = compiler.getCompiler().compileMethod(riMethod, null); | 106 CiResult result = compiler.getCompiler().compileMethod(riMethod, null); |
41 | 107 |
42 if (result.bailout() != null) { | 108 if (result.bailout() != null) { |
45 Logger.info("Bailout:\n" + out.toString()); | 111 Logger.info("Bailout:\n" + out.toString()); |
46 } else { | 112 } else { |
47 Logger.log("Compilation result: " + result.targetMethod()); | 113 Logger.log("Compilation result: " + result.targetMethod()); |
48 HotSpotTargetMethod.installMethod(riMethod, result.targetMethod()); | 114 HotSpotTargetMethod.installMethod(riMethod, result.targetMethod()); |
49 } | 115 } |
50 long time = (System.nanoTime() - t1) / 1000000; | |
51 Logger.info("compiling " + name + " (0x" + Long.toHexString(methodVmId) + "): " + (time) + "ms"); | |
52 } catch (Throwable t) { | 116 } catch (Throwable t) { |
53 StringWriter out = new StringWriter(); | 117 StringWriter out = new StringWriter(); |
54 t.printStackTrace(new PrintWriter(out)); | 118 t.printStackTrace(new PrintWriter(out)); |
55 Logger.info("Compilation interrupted:\n" + out.toString()); | 119 Logger.info("Compilation interrupted:\n" + out.toString()); |
56 } | 120 } |