annotate src/share/vm/c1x/c1x_Compiler.cpp @ 1407:09e7826ecf01

Can now call to Java code from the VM. Need to specify a JAR file with the classes from the Maxine subprojects C1X, CRI, and HotSpotVM in the bootclasspath. See HotSpotVM/README.txt in the Maxine sources for details.
author Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
date Tue, 11 May 2010 19:24:14 +0200
parents 35069ca331f2
children b30a2cd5e3a2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1406
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
1 /*
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
2 * Copyright 2000-2010 Sun Microsystems, Inc. All Rights Reserved.
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
4 *
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
8 *
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
13 * accompanied this code).
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
14 *
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
18 *
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
20 * CA 95054 USA or visit www.sun.com if you need additional information or
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
21 * have any questions.
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
22 *
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
23 */
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
24
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
25
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
26 # include "incls/_precompiled.incl"
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
27 # include "incls/_c1x_Compiler.cpp.incl"
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
28
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
29
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
30 // Initialization
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
31 void C1XCompiler::initialize() {
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
32 TRACE_C1X_1("initialize");
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
33 }
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
34
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
35 // Compilation entry point for methods
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
36 void C1XCompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
1407
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
37 VM_ENTRY_MARK;
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
38
1406
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
39 ResourceMark rm;
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
40 HandleMark hm;
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
41
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
42 TRACE_C1X_1("compile_method");
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
43
1407
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
44 methodHandle method(Thread::current(), (methodOop)target->get_oop());
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
45 TRACE_C1X_1("name = %s", method->name_and_sig_as_C_string());
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
46
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
47 JavaValue result(T_VOID);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
48 symbolHandle syKlass = oopFactory::new_symbol("com/sun/hotspot/c1x/VMExits", CHECK);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
49
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
50
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
51 Handle nullh;
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
52 KlassHandle k = SystemDictionary::resolve_or_null(syKlass, nullh, nullh, CHECK);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
53 if (k.is_null()) {
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
54 tty->print_cr("not found");
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
55 return;//fatal("Could not find class com.sun.hotspot.c1x.VMExits");
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
56 }
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
57 symbolHandle syName = oopFactory::new_symbol("compileMethod", CHECK);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
58 symbolHandle sySig = oopFactory::new_symbol("(Lcom/sun/cri/ri/RiMethod;I)V", CHECK);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
59 JavaCallArguments args;
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
60 args.push_oop(method());
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
61 args.push_int(entry_bci);
09e7826ecf01 Can now call to Java code from the VM.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents: 1406
diff changeset
62 JavaCalls::call_static(&result, k, syName, sySig, &args, CHECK);
1406
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
63 }
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
64
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
65 // Print compilation timers and statistics
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
66 void C1XCompiler::print_timers() {
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
67 TRACE_C1X_1("print_timers");
35069ca331f2 Hooked C1XCompiler class into the system.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
diff changeset
68 }