Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java @ 21526:1da7aef31a08
created com.oracle.graal.hotspot.jvmci package and moved classes destined for future JVMCI module into it (JBS:GRAAL-53)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 19 May 2015 23:16:07 +0200 |
parents | b04f579c803f |
children | 93c50cefb9e8 |
rev | line source |
---|---|
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16895
diff
changeset
|
2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.stubs; |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
13239 | 25 import static com.oracle.graal.compiler.GraalCompiler.*; |
9452
c1ba734c1ea0
more extensive checking of compiled stub invariants
Doug Simon <doug.simon@oracle.com>
parents:
9420
diff
changeset
|
26 import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; |
9232
bb2447c64055
strings used in compiled stubs are lowered to malloc'ed C strings so that there are no embedded oops (for the strings) in the resulting installed code
Doug Simon <doug.simon@oracle.com>
parents:
9200
diff
changeset
|
27 |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
28 import java.util.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
29 |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.api.code.*; |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.api.meta.*; |
15193
96bb07a5d667
Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents:
15161
diff
changeset
|
32 import com.oracle.graal.compiler.common.*; |
7836
a202f72872a4
Remove usage of left-over fields in GraalCompiler.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7835
diff
changeset
|
33 import com.oracle.graal.compiler.target.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
34 import com.oracle.graal.debug.*; |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
35 import com.oracle.graal.debug.Debug.Scope; |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
36 import com.oracle.graal.debug.internal.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.hotspot.*; |
21526
1da7aef31a08
created com.oracle.graal.hotspot.jvmci package and moved classes destined for future JVMCI module into it (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21414
diff
changeset
|
38 import com.oracle.graal.hotspot.jvmci.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
39 import com.oracle.graal.hotspot.meta.*; |
9417
ffa27c3058e9
minor simplifications for writing compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9352
diff
changeset
|
40 import com.oracle.graal.hotspot.nodes.*; |
13229
325b4e4efb60
added CompilationResultBuilderFactory to support peep-hole instrumentation of methods as their code is emitted
Doug Simon <doug.simon@oracle.com>
parents:
13228
diff
changeset
|
41 import com.oracle.graal.lir.asm.*; |
19232
66c60942c06c
GraalCompiler.emitLowLevel: use LowLevelSuites instead of LowLevelCompilerConfiguration.
Josef Eisl <josef.eisl@jku.at>
parents:
18959
diff
changeset
|
42 import com.oracle.graal.lir.phases.*; |
19916
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
43 import com.oracle.graal.lir.phases.PostAllocationOptimizationPhase.PostAllocationOptimizationContext; |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
44 import com.oracle.graal.lir.profiling.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
45 import com.oracle.graal.nodes.*; |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
46 import com.oracle.graal.phases.*; |
15011
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
47 import com.oracle.graal.phases.schedule.*; |
16458
162c6fba1168
start Stub compilation at mid tier
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16401
diff
changeset
|
48 import com.oracle.graal.phases.tiers.*; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
49 |
9342
e8dc8748f415
added check for JaCoCo methods being inserted into replacement methods
Doug Simon <doug.simon@oracle.com>
parents:
9338
diff
changeset
|
50 //JaCoCo Exclude |
e8dc8748f415
added check for JaCoCo methods being inserted into replacement methods
Doug Simon <doug.simon@oracle.com>
parents:
9338
diff
changeset
|
51 |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
52 /** |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
53 * Base class for implementing some low level code providing the out-of-line slow path for a snippet |
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
54 * and/or a callee saved call to a HotSpot C/C++ runtime function or even a another compiled Java |
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
55 * method. |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
56 */ |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
57 public abstract class Stub { |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
58 |
18959
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
59 private static final List<Stub> stubs = new ArrayList<>(); |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
60 |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
61 /** |
9660 | 62 * The linkage information for a call to this stub from compiled code. |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
63 */ |
9740
c4b1aa93b9af
rename: HotSpotRuntimeCallTarget -> HotSpotForeignCallLinkage
Doug Simon <doug.simon@oracle.com>
parents:
9669
diff
changeset
|
64 protected final HotSpotForeignCallLinkage linkage; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
65 |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
66 /** |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
67 * The code installed for the stub. |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
68 */ |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
69 protected InstalledCode code; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
70 |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
71 /** |
16182
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
72 * Compilation result from which {@link #code} was created. |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
73 */ |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
74 protected CompilationResult compResult; |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
75 |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
76 /** |
9491
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
77 * The registers destroyed by this stub. |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
78 */ |
9491
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
79 private Set<Register> destroyedRegisters; |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
80 |
9491
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
81 public void initDestroyedRegisters(Set<Register> registers) { |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
82 assert registers != null; |
9491
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
83 assert destroyedRegisters == null || registers.equals(destroyedRegisters) : "cannot redefine"; |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
84 destroyedRegisters = registers; |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
85 } |
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
86 |
9491
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
87 /** |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
88 * Gets the registers defined by this stub. These are the temporaries of this stub and must thus |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
89 * be caller saved by a callers of this stub. |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
90 */ |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
91 public Set<Register> getDestroyedRegisters() { |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
92 assert destroyedRegisters != null : "not yet initialized"; |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
93 return destroyedRegisters; |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
94 } |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
95 |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
96 /** |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
97 * Determines if this stub preserves all registers apart from those it |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
98 * {@linkplain #getDestroyedRegisters() destroys}. |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
99 */ |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
100 public boolean preservesRegisters() { |
789cfd153265
a compiled stub can now specify whether it needs to preserve registers. If a stub does not preserve registers and assertions are enabled, then all non-temporary registers are zapped after a C runtime call from the stub.
Doug Simon <doug.simon@oracle.com>
parents:
9471
diff
changeset
|
101 return true; |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
102 } |
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
103 |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
12362
diff
changeset
|
104 protected final HotSpotProviders providers; |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
105 |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
106 /** |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
107 * Creates a new stub. |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15011
diff
changeset
|
108 * |
8627
75db7afee829
implemented lazy installation of replacements (GRAAL-137)
Doug Simon <doug.simon@oracle.com>
parents:
8422
diff
changeset
|
109 * @param linkage linkage details for a call to the stub |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
110 */ |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
12362
diff
changeset
|
111 public Stub(HotSpotProviders providers, HotSpotForeignCallLinkage linkage) { |
8627
75db7afee829
implemented lazy installation of replacements (GRAAL-137)
Doug Simon <doug.simon@oracle.com>
parents:
8422
diff
changeset
|
112 this.linkage = linkage; |
12054
bba234a1670e
grouped provider values/parameters into a Providers object (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents:
12052
diff
changeset
|
113 this.providers = providers; |
18959
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
114 stubs.add(this); |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
115 } |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
116 |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
117 /** |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
118 * Gets an immutable view of all stubs that have been created. |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
119 */ |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
120 public static Collection<Stub> getStubs() { |
7efef7005e53
provide Stub.getStubs() method to access all installed stubs
Doug Simon <doug.simon@oracle.com>
parents:
18845
diff
changeset
|
121 return Collections.unmodifiableList(stubs); |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
122 } |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
123 |
9660 | 124 /** |
125 * Gets the linkage for a call to this stub from compiled code. | |
126 */ | |
9740
c4b1aa93b9af
rename: HotSpotRuntimeCallTarget -> HotSpotForeignCallLinkage
Doug Simon <doug.simon@oracle.com>
parents:
9669
diff
changeset
|
127 public HotSpotForeignCallLinkage getLinkage() { |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
128 return linkage; |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
129 } |
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
130 |
15011
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
131 public RegisterConfig getRegisterConfig() { |
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
132 return null; |
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
133 } |
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
134 |
9660 | 135 /** |
136 * Gets the graph that from which the code for this stub will be compiled. | |
137 */ | |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
138 protected abstract StructuredGraph getGraph(); |
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
139 |
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
140 @Override |
9654
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
141 public String toString() { |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
142 return "Stub<" + linkage.getDescriptor() + ">"; |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
143 } |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
144 |
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
145 /** |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15011
diff
changeset
|
146 * Gets the method the stub's code will be associated with once installed. This may be null. |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
147 */ |
9621
e97dc9bbfedc
introduced installedCodeOwner parameter of type ResolvedJavaMethod to GraalCompiler.compileGraph to properly distinguish the source method of a graph from the method under which the code compiled for the graph will be installed
Doug Simon <doug.simon@oracle.com>
parents:
9620
diff
changeset
|
148 protected abstract ResolvedJavaMethod getInstalledCodeOwner(); |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
149 |
9654
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
150 /** |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
151 * Gets a context object for the debug scope created when producing the code for this stub. |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
152 */ |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9621
diff
changeset
|
153 protected abstract Object debugScopeContext(); |
9620
0eda2b7df748
fixed debug scope processing so that -G:MethodFilter option works as expected
Doug Simon <doug.simon@oracle.com>
parents:
9618
diff
changeset
|
154 |
9418
8d3a7fb9eb5f
moved binding of parameter locations to runtime call descriptors from platform specific code to shared code for stubs that are now compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9417
diff
changeset
|
155 /** |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
156 * Gets the code for this stub, compiling it first if necessary. |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
157 */ |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
158 public synchronized InstalledCode getCode(final Backend backend) { |
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
159 if (code == null) { |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
160 try (Scope d = Debug.sandbox("CompilingStub", DebugScope.getConfig(), providers.getCodeCache(), debugScopeContext())) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
161 final StructuredGraph graph = getGraph(); |
19319
5664cadb3cee
don't record method dependencies for snippets, stubs or replacements
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
162 |
5664cadb3cee
don't record method dependencies for snippets, stubs or replacements
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
163 // Stubs cannot be recompiled so they cannot be compiled with |
5664cadb3cee
don't record method dependencies for snippets, stubs or replacements
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
164 // assumptions and there is no point in recording evol_method dependencies |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19276
diff
changeset
|
165 assert graph.getAssumptions() == null; |
19346
2b392a92e27b
made it explicit that a StructuredGraph only records method dependencies for inlined methods - the root method is not recorded as it is already available in the 'method' field
Doug Simon <doug.simon@oracle.com>
parents:
19319
diff
changeset
|
166 assert !graph.isInlinedMethodRecordingEnabled() : graph; |
19319
5664cadb3cee
don't record method dependencies for snippets, stubs or replacements
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
167 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
168 if (!(graph.start() instanceof StubStartNode)) { |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18176
diff
changeset
|
169 StubStartNode newStart = graph.add(new StubStartNode(Stub.this)); |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
170 newStart.setStateAfter(graph.start().stateAfter()); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
171 graph.replaceFixed(graph.start(), newStart); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
172 } |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
173 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
174 CodeCacheProvider codeCache = providers.getCodeCache(); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
175 // The stub itself needs the incoming calling convention. |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
176 CallingConvention incomingCc = linkage.getIncomingCallingConvention(); |
15011
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
177 TargetDescription target = codeCache.getTarget(); |
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
178 |
16401
347915b8cea8
Move name from HotSpotNmethod to InstalledCode to have a name again for truffle nmethods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16182
diff
changeset
|
179 compResult = new CompilationResult(toString()); |
15011
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
180 try (Scope s0 = Debug.scope("StubCompilation", graph, providers.getCodeCache())) { |
16458
162c6fba1168
start Stub compilation at mid tier
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16401
diff
changeset
|
181 Suites defaultSuites = providers.getSuites().getDefaultSuites(); |
162c6fba1168
start Stub compilation at mid tier
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16401
diff
changeset
|
182 Suites suites = new Suites(new PhaseSuite<>(), defaultSuites.getMidTier(), defaultSuites.getLowTier()); |
20068
cc3131ff7ce2
Remove GraphCache option.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19916
diff
changeset
|
183 SchedulePhase schedule = emitFrontEnd(providers, target, graph, providers.getSuites().getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, getProfilingInfo(graph), null, |
cc3131ff7ce2
Remove GraphCache option.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19916
diff
changeset
|
184 suites); |
19916
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
185 LIRSuites lirSuites = createLIRSuites(); |
19276
313f9a9647e5
Merge (rename LowLevel{Phases,..} to LIR{Phases,..})
Josef Eisl <josef.eisl@jku.at>
diff
changeset
|
186 emitBackEnd(graph, Stub.this, incomingCc, getInstalledCodeOwner(), backend, target, compResult, CompilationResultBuilderFactory.Default, schedule, getRegisterConfig(), lirSuites); |
19253 | 187 } catch (Throwable e) { |
15011
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
188 throw Debug.handle(e); |
c8e575742f36
allow compilation with custom RegisterConfig
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14559
diff
changeset
|
189 } |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
190 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
191 assert destroyedRegisters != null; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
192 try (Scope s = Debug.scope("CodeInstall")) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
193 Stub stub = Stub.this; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
194 HotSpotRuntimeStub installedCode = new HotSpotRuntimeStub(stub); |
21526
1da7aef31a08
created com.oracle.graal.hotspot.jvmci package and moved classes destined for future JVMCI module into it (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21414
diff
changeset
|
195 HotSpotCompiledCode hsCompResult = new HotSpotCompiledRuntimeStub(compResult); |
13233
8ea51438445c
consolidated logging and dumping of InstalledCode to HotSpotCodeCacheProvider
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
196 |
21414
b04f579c803f
removed unnecessary CompilerToVM.CodeInstallResult enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20068
diff
changeset
|
197 HotSpotGraalRuntime runtime = runtime(); |
b04f579c803f
removed unnecessary CompilerToVM.CodeInstallResult enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20068
diff
changeset
|
198 int result = runtime.getCompilerToVM().installCode(hsCompResult, installedCode, null); |
b04f579c803f
removed unnecessary CompilerToVM.CodeInstallResult enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20068
diff
changeset
|
199 HotSpotVMConfig config = runtime.getConfig(); |
b04f579c803f
removed unnecessary CompilerToVM.CodeInstallResult enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20068
diff
changeset
|
200 if (result != config.codeInstallResultOk) { |
b04f579c803f
removed unnecessary CompilerToVM.CodeInstallResult enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20068
diff
changeset
|
201 throw new GraalInternalError("Error installing stub %s: %s", Stub.this, config.getCodeInstallResultDescription(result)); |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
202 } |
13233
8ea51438445c
consolidated logging and dumping of InstalledCode to HotSpotCodeCacheProvider
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
203 ((HotSpotCodeCacheProvider) codeCache).logOrDump(installedCode, compResult); |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
204 code = installedCode; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
205 } catch (Throwable e) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
206 throw Debug.handle(e); |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
207 } |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
208 } catch (Throwable e) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
209 throw Debug.handle(e); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
210 } |
9617
c1ef2bf6848e
removed the requirement that a compiled stub is implemented by a snippet
Doug Simon <doug.simon@oracle.com>
parents:
9615
diff
changeset
|
211 assert code != null : "error installing stub " + this; |
8627
75db7afee829
implemented lazy installation of replacements (GRAAL-137)
Doug Simon <doug.simon@oracle.com>
parents:
8422
diff
changeset
|
212 } |
16182
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
213 |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
9015
diff
changeset
|
214 return code; |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
215 } |
16182
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
216 |
19916
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
217 private LIRSuites createLIRSuites() { |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
218 LIRSuites lirSuites = new LIRSuites(providers.getSuites().getDefaultLIRSuites()); |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
219 ListIterator<LIRPhase<PostAllocationOptimizationContext>> moveProfiling = lirSuites.getPostAllocationOptimizationStage().findPhase(MoveProfiling.class); |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
220 if (moveProfiling != null) { |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
221 moveProfiling.remove(); |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
222 } |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
223 return lirSuites; |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
224 } |
fc1e46a702a1
Do not include MoveProfiling phases in stub compilation.
Josef Eisl <josef.eisl@jku.at>
parents:
19346
diff
changeset
|
225 |
16182
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
226 /** |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
227 * Gets the compilation result for this stub, compiling it first if necessary, and installing it |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
228 * in code. |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
229 */ |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
230 public synchronized CompilationResult getCompilationResult(final Backend backend) { |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
231 if (code == null) { |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
232 getCode(backend); |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
233 } |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
234 return compResult; |
0a7e9347f8d0
Add an ability to specify the signature of a C/C++ foreign function in HotSpotVMConfig and get the full symbol string; add a couple of convenience getters and setters for stubs with foreign call linkage.
bharadwaj
parents:
15259
diff
changeset
|
235 } |
7143
445193cc2a7d
added support for writing stubs in Java and wrote the TLAB fast refill stub
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
236 } |