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 }