Mercurial > hg > truffle
diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java @ 2285:762de4b26788
turn Compiler and HotSpotTypeResolved into interfaces
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 08 Apr 2011 13:43:05 +0200 |
parents | 569d3fe7d65c |
children | e3c42b8de67e |
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Thu Apr 07 15:32:25 2011 +0200 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Fri Apr 08 13:43:05 2011 +0200 @@ -1,184 +1,33 @@ -/* - * Copyright (c) 2011 Sun Microsystems, Inc. All rights reserved. - * - * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product - * that is described in this document. In particular, and without limitation, these intellectual property - * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or - * more additional patents or pending patent applications in the U.S. and in other countries. - * - * U.S. Government Rights - Commercial software. Government users are subject to the Sun - * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its - * supplements. - * - * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or - * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks - * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the - * U.S. and other countries. - * - * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open - * Company, Ltd. - */ -package com.sun.hotspot.c1x; - -import java.io.*; -import java.lang.management.*; -import java.lang.reflect.Proxy; -import java.net.*; - -import com.sun.c1x.*; -import com.sun.c1x.target.amd64.*; -import com.sun.cri.xir.*; -import com.sun.hotspot.c1x.logging.*; -import com.sun.hotspot.c1x.server.CompilationServer.ReplacingInputStream; -import com.sun.hotspot.c1x.server.CompilationServer.ReplacingOutputStream; - -/** - * Singleton class holding the instance of the C1XCompiler. - * - * @author Thomas Wuerthinger, Lukas Stadler - */ -public final class Compiler { - - private static Compiler theInstance; - private static boolean PrintGCStats = false; - - private final VMEntries vmEntries; - private final VMExits vmExits; - - public static Compiler getInstance() { - if (theInstance == null) { - theInstance = new Compiler(null); - Runtime.getRuntime().addShutdownHook(new ShutdownThread()); - } - return theInstance; - } - - public static class ShutdownThread extends Thread { - - @Override - public void run() { - VMExitsNative.compileMethods = false; - if (C1XOptions.PrintMetrics) { - C1XMetrics.print(); - } - if (C1XOptions.PrintTimers) { - C1XTimers.print(); - } - if (PrintGCStats) { - printGCStats(); - } - } - } - - public static void printGCStats() { - long totalGarbageCollections = 0; - long garbageCollectionTime = 0; - - for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { - long count = gc.getCollectionCount(); - if (count >= 0) { - totalGarbageCollections += count; - } - - long time = gc.getCollectionTime(); - if (time >= 0) { - garbageCollectionTime += time; - } - } - - System.out.println("Total Garbage Collections: " + totalGarbageCollections); - System.out.println("Total Garbage Collection Time (ms): " + garbageCollectionTime); - } - - public static Compiler initializeServer(VMEntries entries) { - assert theInstance == null; - theInstance = new Compiler(entries); - return theInstance; - } - - public VMEntries getVMEntries() { - return vmEntries; - } - - public VMExits getVMExits() { - return vmExits; - } - - private final C1XCompiler compiler; - - private Compiler(VMEntries entries) { - // remote compilation (will not create a C1XCompiler) - String remote = System.getProperty("c1x.remote"); - if (remote != null) { - try { - System.out.println("C1X compiler started in client/server mode, server: " + remote); - Socket socket = new Socket(remote, 1199); - - ReplacingOutputStream output = new ReplacingOutputStream(new BufferedOutputStream(socket.getOutputStream())); - // required, because creating an ObjectOutputStream writes a header, but doesn't flush the stream - output.flush(); - ReplacingInputStream input = new ReplacingInputStream(new BufferedInputStream(socket.getInputStream())); - input.setCompiler(this); - - InvocationSocket invocation = new InvocationSocket(output, input); - vmEntries = new VMEntriesNative(); - vmExits = (VMExits) Proxy.newProxyInstance(VMExits.class.getClassLoader(), new Class<?>[] { VMExits.class}, invocation); - invocation.setDelegate(vmEntries); - compiler = null; - return; - } catch (IOException t) { - System.out.println("Connection to compilation server FAILED."); - throw new RuntimeException(t); - } - } - - // initialize VMEntries - if (entries == null) - entries = new VMEntriesNative(); - - // initialize VMExits - VMExits exits = new VMExitsNative(this); - - // logging, etc. - if (CountingProxy.ENABLED) { - exits = CountingProxy.getProxy(VMExits.class, exits); - entries = CountingProxy.getProxy(VMEntries.class, entries); - } - if (Logger.ENABLED) { - exits = LoggingProxy.getProxy(VMExits.class, exits); - entries = LoggingProxy.getProxy(VMEntries.class, entries); - } - - // set the final fields - vmEntries = entries; - vmExits = exits; - - // initialize compiler and C1XOptions - HotSpotVMConfig config = vmEntries.getConfiguration(); - config.check(); - - // these options are important - c1x4hotspot will not generate correct code without them - C1XOptions.GenSpecialDivChecks = true; - C1XOptions.NullCheckUniquePc = true; - C1XOptions.InvokeSnippetAfterArguments = true; - C1XOptions.StackShadowPages = config.stackShadowPages; - - HotSpotRuntime runtime = new HotSpotRuntime(config, this); - HotSpotRegisterConfig registerConfig = runtime.globalStubRegConfig; - - final int wordSize = 8; - final int stackFrameAlignment = 16; - HotSpotTarget target = new HotSpotTarget(new AMD64(), true, wordSize, stackFrameAlignment, config.vmPageSize, wordSize, true); - - RiXirGenerator generator = new HotSpotXirGenerator(config, target, registerConfig, this); - if (Logger.ENABLED) { - generator = LoggingProxy.getProxy(RiXirGenerator.class, generator); - } - compiler = new C1XCompiler(runtime, target, generator, registerConfig); - } - - public C1XCompiler getCompiler() { - return compiler; - } - -} +/* + * Copyright (c) 2011 Sun Microsystems, Inc. All rights reserved. + * + * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product + * that is described in this document. In particular, and without limitation, these intellectual property + * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or + * more additional patents or pending patent applications in the U.S. and in other countries. + * + * U.S. Government Rights - Commercial software. Government users are subject to the Sun + * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its + * supplements. + * + * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or + * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks + * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the + * U.S. and other countries. + * + * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open + * Company, Ltd. + */ +package com.sun.hotspot.c1x; + +import com.sun.c1x.*; + +public interface Compiler { + + public VMEntries getVMEntries(); + + public VMExits getVMExits(); + + public C1XCompiler getCompiler(); + +} \ No newline at end of file