changeset 1406:35069ca331f2

Hooked C1XCompiler class into the system. Two new flags: -XX:+UseC1X makes sure that the C1X compiler is used instead of C1 -XX:TraceC1X=0 sets the trace level for C1X (value between 0=no output and 5=verbose)
author Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
date Tue, 11 May 2010 18:19:17 +0200
parents a197210cb4ae
children 09e7826ecf01
files src/share/tools/MakeDeps/WinGammaPlatformVC7.java src/share/vm/c1/c1_globals.hpp src/share/vm/c1x/c1x_Compiler.cpp src/share/vm/c1x/c1x_Compiler.hpp src/share/vm/c1x/c1x_VMEntries.cpp src/share/vm/c1x/c1x_VMEntries.hpp src/share/vm/c1x/c1x_VMExists.cpp src/share/vm/c1x/c1x_VMExists.hpp src/share/vm/ci/ciObject.hpp src/share/vm/compiler/abstractCompiler.hpp src/share/vm/compiler/compileBroker.cpp src/share/vm/includeDB_compiler1
diffstat 12 files changed, 240 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/tools/MakeDeps/WinGammaPlatformVC7.java	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/tools/MakeDeps/WinGammaPlatformVC7.java	Tue May 11 18:19:17 2010 +0200
@@ -230,6 +230,8 @@
         gc.add(gc_impl);
         rv.add(gc);
 
+        rv.add(new DirectoryFilter("C1X", "share/vm/c1x", sbase));
+
         rv.add(new DirectoryFilter("C1", "share/vm/c1", sbase));
 
         ContainerFilter c2 = new ContainerFilter("C2");
--- a/src/share/vm/c1/c1_globals.hpp	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/vm/c1/c1_globals.hpp	Tue May 11 18:19:17 2010 +0200
@@ -33,6 +33,10 @@
 
 #define C1_FLAGS(develop, develop_pd, product, product_pd, notproduct)      \
                                                                             \
+  product(bool, UseC1X, true,						                        \
+          "Use C1X instead of C1")                                          \
+  product(intx, TraceC1X, 0,						                        \
+          "Trace level for C1X")                                            \
   /* Printing */                                                            \
   notproduct(bool, PrintC1Statistics, false,                                \
           "Print Compiler1 statistics" )                                    \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_Compiler.cpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+
+# include "incls/_precompiled.incl"
+# include "incls/_c1x_Compiler.cpp.incl"
+
+
+// Initialization
+void C1XCompiler::initialize() {
+	TRACE_C1X_1("initialize");
+}
+
+// Compilation entry point for methods
+void C1XCompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
+
+	ResourceMark rm;
+	HandleMark hm;
+
+	TRACE_C1X_1("compile_method");
+
+	methodOop method = (methodOop)target->get_oop();
+	methodHandle m(Thread::current(), method);
+	TRACE_C1X_1("name = %s", m->name_and_sig_as_C_string());
+}
+
+// Print compilation timers and statistics
+void C1XCompiler::print_timers() {
+	TRACE_C1X_1("print_timers");
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_Compiler.hpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+class C1XCompiler : public AbstractCompiler {
+
+public:
+
+	virtual const char* name() { return "C1X"; }
+
+	// Native / OSR not supported
+	virtual bool supports_native()                 { return false; }
+	virtual bool supports_osr   ()                 { return false; }
+
+	// Pretend to be C1
+	bool is_c1   ()                                { return true; }
+	bool is_c2   ()                                { return false; }
+
+	// Initialization
+	virtual void initialize();
+
+	// Compilation entry point for methods
+	virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci);
+
+	// Print compilation timers and statistics
+	virtual void print_timers();
+};
+
+
+// Tracing macros
+
+#define IF_TRACE_C1X_1 if (TraceC1X >= 1) 
+#define IF_TRACE_C1X_2 if (TraceC1X >= 2) 
+#define IF_TRACE_C1X_3 if (TraceC1X >= 3) 
+#define IF_TRACE_C1X_4 if (TraceC1X >= 4) 
+#define IF_TRACE_C1X_5 if (TraceC1X >= 5) 
+
+#define TRACE_C1X_1 if (TraceC1X >= 1) tty->print("TraceC1X-1: "); if (TraceC1X >= 1) tty->print_cr
+#define TRACE_C1X_2 if (TraceC1X >= 2) tty->print("   TraceC1X-2: "); if (TraceC1X >= 2) tty->print_cr
+#define TRACE_C1X_3 if (TraceC1X >= 3) tty->print("      TraceC1X-3: "); if (TraceC1X >= 3) tty->print_cr
+#define TRACE_C1X_4 if (TraceC1X >= 4) tty->print("         TraceC1X-4: "); if (TraceC1X >= 4) tty->print_cr
+#define TRACE_C1X_5 if (TraceC1X >= 5) tty->print("            TraceC1X-5: "); if (TraceC1X >= 5) tty->print_cr
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_VMEntries.cpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+
+# include "incls/_precompiled.incl"
+# include "incls/_c1x_VMEntries.cpp.incl"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_VMEntries.hpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_VMExists.cpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/c1x/c1x_VMExists.hpp	Tue May 11 18:19:17 2010 +0200
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
--- a/src/share/vm/ci/ciObject.hpp	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/vm/ci/ciObject.hpp	Tue May 11 18:19:17 2010 +0200
@@ -62,12 +62,14 @@
   ciObject(Handle h);
   ciObject(ciKlass* klass);
 
+public:
   jobject      handle()  const { return _handle; }
   // Get the VM oop that this object holds.
   oop get_oop() const {
     assert(_handle != NULL, "null oop");
     return JNIHandles::resolve_non_null(_handle);
   }
+protected:
 
   void init_flags_from(oop x) {
     int flags = 0;
--- a/src/share/vm/compiler/abstractCompiler.hpp	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/vm/compiler/abstractCompiler.hpp	Tue May 11 18:19:17 2010 +0200
@@ -59,9 +59,6 @@
 #endif // COMPILER2
 #endif // TIERED
 
-  // Customization
-  virtual bool needs_stubs            ()         = 0;
-
   void mark_initialized()                        { _is_initialized = true; }
   bool is_initialized()                          { return _is_initialized; }
 
--- a/src/share/vm/compiler/compileBroker.cpp	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/vm/compiler/compileBroker.cpp	Tue May 11 18:19:17 2010 +0200
@@ -542,7 +542,11 @@
 
   // Set the interface to the current compiler(s).
 #ifdef COMPILER1
-  _compilers[0] = new Compiler();
+  if (UseC1X) {
+	  _compilers[0] = new C1XCompiler();
+  } else {
+	  _compilers[0] = new Compiler();
+  }
 #ifndef COMPILER2
   _compilers[1] = _compilers[0];
 #endif
@@ -1527,7 +1531,8 @@
       system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
     }
 
-    NoHandleMark  nhm;
+	// (tw) Check if we may do this?
+    //NoHandleMark  nhm;
     ThreadToNativeFromVM ttn(thread);
 
     ciEnv ci_env(task, system_dictionary_modification_counter);
--- a/src/share/vm/includeDB_compiler1	Tue May 11 14:46:49 2010 +0200
+++ b/src/share/vm/includeDB_compiler1	Tue May 11 18:19:17 2010 +0200
@@ -443,3 +443,16 @@
 top.hpp                                 c1_globals.hpp
 
 vmStructs.hpp                           c1_Runtime1.hpp
+
+compileBroker.cpp                       c1x_Compiler.hpp
+
+c1x_Compiler.hpp                        abstractCompiler.hpp
+
+c1x_Compiler.cpp                        c1x_Compiler.hpp
+c1x_Compiler.cpp                        c1x_VMExists.hpp
+
+c1x_VMEntries.cpp                       c1x_VMEntries.hpp
+c1x_VMEntries.cpp                       c1x_VMExists.hpp
+
+c1x_VMExists.hpp                        systemDictionary.hpp
+c1x_VMExists.hpp                        javaCalls.hpp