Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java @ 21456:90fc2256ed37
Remove unused argument from snippet
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 18 May 2015 14:32:14 -0700 |
parents | 15a46a918fc1 |
children | 1da7aef31a08 |
rev | line source |
---|---|
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
16094
c0b8d395368b
Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
16006
diff
changeset
|
2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.amd64; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
15915
diff
changeset
|
25 import static com.oracle.graal.hotspot.InitTimer.*; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
26 |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
27 import java.util.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
28 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.graal.amd64.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.api.code.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.api.meta.*; |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
32 import com.oracle.graal.api.replacements.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.api.runtime.*; |
20083
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
34 import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
35 import com.oracle.graal.hotspot.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
36 import com.oracle.graal.hotspot.meta.*; |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
37 import com.oracle.graal.hotspot.word.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
38 import com.oracle.graal.phases.util.*; |
20832
9794217565cd
replaced method substitutions for [Integer|Long].numberOf[Leading|Trailing]Zeros with InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20083
diff
changeset
|
39 import com.oracle.graal.replacements.amd64.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
40 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
41 @ServiceProvider(HotSpotBackendFactory.class) |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
42 public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
43 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
44 protected Architecture createArchitecture(HotSpotVMConfig config) { |
18495
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
45 return new AMD64(computeFeatures(config), computeFlags(config)); |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
46 } |
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
47 |
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
48 protected EnumSet<AMD64.CPUFeature> computeFeatures(HotSpotVMConfig config) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
49 // Configure the feature set using the HotSpot flag settings. |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
50 EnumSet<AMD64.CPUFeature> features = EnumSet.noneOf(AMD64.CPUFeature.class); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
51 assert config.useSSE >= 2 : "minimum config for x64"; |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
52 features.add(AMD64.CPUFeature.SSE); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
53 features.add(AMD64.CPUFeature.SSE2); |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
54 if ((config.x86CPUFeatures & config.cpuSSE3) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
55 features.add(AMD64.CPUFeature.SSE3); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
56 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
57 if ((config.x86CPUFeatures & config.cpuSSSE3) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
58 features.add(AMD64.CPUFeature.SSSE3); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
59 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
60 if ((config.x86CPUFeatures & config.cpuSSE4A) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
61 features.add(AMD64.CPUFeature.SSE4a); |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
62 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
63 if ((config.x86CPUFeatures & config.cpuSSE41) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
64 features.add(AMD64.CPUFeature.SSE4_1); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
65 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
66 if ((config.x86CPUFeatures & config.cpuSSE42) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
67 features.add(AMD64.CPUFeature.SSE4_2); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
68 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
69 if ((config.x86CPUFeatures & config.cpuAVX) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
70 features.add(AMD64.CPUFeature.AVX); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
71 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
72 if ((config.x86CPUFeatures & config.cpuAVX2) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
73 features.add(AMD64.CPUFeature.AVX2); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
74 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
75 if ((config.x86CPUFeatures & config.cpuERMS) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
76 features.add(AMD64.CPUFeature.ERMS); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
77 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
78 if ((config.x86CPUFeatures & config.cpuLZCNT) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
79 features.add(AMD64.CPUFeature.LZCNT); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
80 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
81 if ((config.x86CPUFeatures & config.cpuPOPCNT) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
82 features.add(AMD64.CPUFeature.POPCNT); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
83 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
84 if ((config.x86CPUFeatures & config.cpuAES) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
85 features.add(AMD64.CPUFeature.AES); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
86 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
87 if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) { |
13350
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
88 features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH); |
2c3b59f34619
add CPUFeature EnumSet to target description with appropriate asserts
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13132
diff
changeset
|
89 } |
18415
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
90 if ((config.x86CPUFeatures & config.cpuBMI1) != 0) { |
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
91 features.add(AMD64.CPUFeature.BMI1); |
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
92 } |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
93 return features; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
94 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
95 |
18495
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
96 protected EnumSet<AMD64.Flag> computeFlags(HotSpotVMConfig config) { |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
97 EnumSet<AMD64.Flag> flags = EnumSet.noneOf(AMD64.Flag.class); |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
98 if (config.useCountLeadingZerosInstruction) { |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
99 flags.add(AMD64.Flag.UseCountLeadingZerosInstruction); |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
100 } |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
101 if (config.useCountTrailingZerosInstruction) { |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
102 flags.add(AMD64.Flag.UseCountTrailingZerosInstruction); |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
103 } |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
104 return flags; |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
105 } |
fe0db662e982
adds ability for substitution guards to have a constructor with an Architecture argument
Doug Simon <doug.simon@oracle.com>
parents:
18479
diff
changeset
|
106 |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
107 protected TargetDescription createTarget(HotSpotVMConfig config) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
108 final int stackFrameAlignment = 16; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
109 final int implicitNullCheckLimit = 4096; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
110 final boolean inlineObjects = true; |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
111 return new HotSpotTargetDescription(createArchitecture(config), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
112 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
113 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
114 @Override |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
115 public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, HotSpotBackend host) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
116 assert host == null; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
117 TargetDescription target = createTarget(runtime.getConfig()); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
118 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
119 HotSpotProviders providers; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
120 HotSpotRegistersProvider registers; |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
121 RegisterConfig regConfig; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
122 HotSpotCodeCacheProvider codeCache; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
123 HotSpotConstantReflectionProvider constantReflection; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
124 HotSpotHostForeignCallsProvider foreignCalls; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
125 Value[] nativeABICallerSaveRegisters; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
126 HotSpotMetaAccessProvider metaAccess; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
127 HotSpotLoweringProvider lowerer; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
128 HotSpotSnippetReflectionProvider snippetReflection; |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
129 HotSpotReplacementsImpl replacements; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
130 HotSpotDisassemblerProvider disassembler; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
131 HotSpotSuitesProvider suites; |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
132 HotSpotWordTypes wordTypes; |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
133 Plugins plugins; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
134 try (InitTimer t = timer("create providers")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
135 try (InitTimer rt = timer("create HotSpotRegisters provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
136 registers = createRegisters(); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
137 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
138 try (InitTimer rt = timer("create MetaAccess provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
139 metaAccess = createMetaAccess(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
140 } |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
141 try (InitTimer rt = timer("create RegisterConfig")) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
142 regConfig = createRegisterConfig(runtime, target); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
143 } |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
144 try (InitTimer rt = timer("create CodeCache provider")) { |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
145 codeCache = createCodeCache(runtime, target, regConfig); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
146 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
147 try (InitTimer rt = timer("create ConstantReflection provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
148 constantReflection = createConstantReflection(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
149 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
150 try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
151 nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
152 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
153 try (InitTimer rt = timer("create ForeignCalls provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
154 foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
155 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
156 try (InitTimer rt = timer("create Lowerer provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
157 lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
158 } |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
159 HotSpotStampProvider stampProvider = new HotSpotStampProvider(); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
160 Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); |
19775
14e703edb2ab
use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents:
19415
diff
changeset
|
161 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
162 try (InitTimer rt = timer("create SnippetReflection provider")) { |
18512
7a3bba33f2b7
added support for binding arguments of arbitrary types to parameters of a SubstitutionGuard constructor
Doug Simon <doug.simon@oracle.com>
parents:
18495
diff
changeset
|
163 snippetReflection = createSnippetReflection(runtime); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
164 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
165 try (InitTimer rt = timer("create Replacements provider")) { |
19254
835e950b38b9
removed vestige usages of Assumptions independent of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
18528
diff
changeset
|
166 replacements = createReplacements(runtime, p, snippetReflection); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
167 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
168 try (InitTimer rt = timer("create Disassembler provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
169 disassembler = createDisassembler(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
170 } |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
171 try (InitTimer rt = timer("create WordTypes")) { |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
172 wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
173 } |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
174 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { |
20083
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
175 plugins = createGraphBuilderPlugins(runtime, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, stampProvider); |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
176 replacements.setGraphBuilderPlugins(plugins); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
177 } |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
178 try (InitTimer rt = timer("create Suites provider")) { |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
179 suites = createSuites(runtime, plugins); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
180 } |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
181 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, wordTypes, plugins); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
182 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
183 try (InitTimer rt = timer("instantiate backend")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
184 return createBackend(runtime, providers); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
185 } |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
186 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
187 |
20083
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
188 protected Plugins createGraphBuilderPlugins(HotSpotGraalRuntimeProvider runtime, TargetDescription target, HotSpotConstantReflectionProvider constantReflection, |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
189 HotSpotHostForeignCallsProvider foreignCalls, HotSpotMetaAccessProvider metaAccess, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
190 HotSpotWordTypes wordTypes, HotSpotStampProvider stampProvider) { |
20836
63e4f33dce84
moved registration of AMD64 specific plugins to AMD64GraphBuilderPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20832
diff
changeset
|
191 Plugins plugins = HotSpotGraphBuilderPlugins.create(runtime.getConfig(), wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); |
20848
9e8f6d379720
added InvocationPlugins to use recently exposed HotSpot math runtime functions
Doug Simon <doug.simon@oracle.com>
parents:
20836
diff
changeset
|
192 AMD64GraphBuilderPlugins.register(plugins, foreignCalls, (AMD64) target.arch); |
20832
9794217565cd
replaced method substitutions for [Integer|Long].numberOf[Leading|Trailing]Zeros with InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20083
diff
changeset
|
193 return plugins; |
20083
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
194 } |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19951
diff
changeset
|
195 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
196 protected AMD64HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
197 return new AMD64HotSpotBackend(runtime, providers); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
198 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
199 |
12786
7e9c00c54866
pass stack pointer register into monitorenter snippet instead of getting it from the host provider
Doug Simon <doug.simon@oracle.com>
parents:
12580
diff
changeset
|
200 protected HotSpotRegistersProvider createRegisters() { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
201 return new HotSpotRegisters(AMD64.r15, AMD64.r12, AMD64.rsp); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
202 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
203 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
204 protected HotSpotDisassemblerProvider createDisassembler(HotSpotGraalRuntimeProvider runtime) { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
205 return new HotSpotDisassemblerProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
206 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
207 |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
208 protected HotSpotReplacementsImpl createReplacements(HotSpotGraalRuntimeProvider runtime, Providers p, SnippetReflectionProvider snippetReflection) { |
19254
835e950b38b9
removed vestige usages of Assumptions independent of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
18528
diff
changeset
|
209 return new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), p.getCodeCache().getTarget()); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
210 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
211 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
212 protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
213 Value[] nativeABICallerSaveRegisters) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
214 return new AMD64HotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
215 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
216 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
217 protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotGraalRuntimeProvider runtime) { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
218 return new HotSpotConstantReflectionProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
219 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
220 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
221 protected RegisterConfig createRegisterConfig(HotSpotGraalRuntimeProvider runtime, TargetDescription target) { |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
222 return new AMD64HotSpotRegisterConfig(target.arch, runtime.getConfig()); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
223 } |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
224 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
225 protected HotSpotCodeCacheProvider createCodeCache(HotSpotGraalRuntimeProvider runtime, TargetDescription target, RegisterConfig regConfig) { |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
226 return new HotSpotCodeCacheProvider(runtime, runtime.getConfig(), target, regConfig); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
227 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
228 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
229 protected HotSpotMetaAccessProvider createMetaAccess(HotSpotGraalRuntimeProvider runtime) { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
230 return new HotSpotMetaAccessProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
231 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
232 |
19819
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
233 protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntimeProvider runtime, Plugins plugins) { |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19775
diff
changeset
|
234 return new HotSpotSuitesProvider(runtime, plugins); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
235 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
236 |
18524
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18512
diff
changeset
|
237 protected HotSpotSnippetReflectionProvider createSnippetReflection(HotSpotGraalRuntimeProvider runtime) { |
18512
7a3bba33f2b7
added support for binding arguments of arbitrary types to parameters of a SubstitutionGuard constructor
Doug Simon <doug.simon@oracle.com>
parents:
18495
diff
changeset
|
238 return new HotSpotSnippetReflectionProvider(runtime); |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
239 } |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
240 |
18528
c240024b32b3
fixed eclipseformat issues
Doug Simon <doug.simon@oracle.com>
parents:
18524
diff
changeset
|
241 protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls, |
c240024b32b3
fixed eclipseformat issues
Doug Simon <doug.simon@oracle.com>
parents:
18524
diff
changeset
|
242 HotSpotRegistersProvider registers, TargetDescription target) { |
15889
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
243 return new AMD64HotSpotLoweringProvider(runtime, metaAccess, foreignCalls, registers, target); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
244 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
245 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
246 protected Value[] createNativeABICallerSaveRegisters(HotSpotVMConfig config, RegisterConfig regConfig) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
247 List<Register> callerSave = new ArrayList<>(Arrays.asList(regConfig.getAllocatableRegisters())); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
248 if (config.windowsOs) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
249 // http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
250 callerSave.remove(AMD64.rdi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
251 callerSave.remove(AMD64.rsi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
252 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
253 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
254 callerSave.remove(AMD64.rsp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
255 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
256 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
257 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
258 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
259 callerSave.remove(AMD64.xmm6); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
260 callerSave.remove(AMD64.xmm7); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
261 callerSave.remove(AMD64.xmm8); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
262 callerSave.remove(AMD64.xmm9); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
263 callerSave.remove(AMD64.xmm10); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
264 callerSave.remove(AMD64.xmm11); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
265 callerSave.remove(AMD64.xmm12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
266 callerSave.remove(AMD64.xmm13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
267 callerSave.remove(AMD64.xmm14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
268 callerSave.remove(AMD64.xmm15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
269 } else { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
270 /* |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
271 * System V Application Binary Interface, AMD64 Architecture Processor Supplement |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
272 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
273 * Draft Version 0.96 |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
274 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
275 * http://www.uclibc.org/docs/psABI-x86_64.pdf |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
276 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
277 * 3.2.1 |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
278 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
279 * ... |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20848
diff
changeset
|
280 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
281 * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
282 * through %r15 "belong" to the calling function and the called function is required to |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
283 * preserve their values. In other words, a called function must preserve these |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
284 * registers' values for its caller. Remaining registers "belong" to the called |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
285 * function. If a calling function wants to preserve such a register value across a |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
286 * function call, it must save the value in its local stack frame. |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
287 */ |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
288 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
289 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
290 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
291 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
292 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
293 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
294 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
295 Value[] nativeABICallerSaveRegisters = new Value[callerSave.size()]; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
296 for (int i = 0; i < callerSave.size(); i++) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
297 nativeABICallerSaveRegisters[i] = callerSave.get(i).asValue(); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
298 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
299 return nativeABICallerSaveRegisters; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
300 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
301 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
302 public String getArchitecture() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
303 return "AMD64"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
304 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
305 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
306 public String getGraalRuntimeName() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
307 return "basic"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
308 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
309 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
310 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
311 public String toString() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
312 return getGraalRuntimeName() + ":" + getArchitecture(); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
313 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
314 } |