Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java @ 18514:7a3bba33f2b7
added support for binding arguments of arbitrary types to parameters of a SubstitutionGuard constructor
used above support to remove static access to HotSpotGraalRuntime from CRC32Substitutions.Guard
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 26 Nov 2014 09:27:58 +0100 |
parents | fe0db662e982 |
children | c538c2c6b7e2 |
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.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
34 import com.oracle.graal.hotspot.*; |
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.meta.*; |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
36 import com.oracle.graal.nodes.spi.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.phases.util.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
38 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
39 @ServiceProvider(HotSpotBackendFactory.class) |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
40 public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
41 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
42 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
|
43 return new AMD64(computeFeatures(config), computeFlags(config)); |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
44 } |
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
45 |
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
46 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
|
47 // 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
|
48 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
|
49 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
|
50 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
|
51 features.add(AMD64.CPUFeature.SSE2); |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
52 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
|
53 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
|
54 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
55 if ((config.x86CPUFeatures & config.cpuSSSE3) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
56 features.add(AMD64.CPUFeature.SSSE3); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
57 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
58 if ((config.x86CPUFeatures & config.cpuSSE4A) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
59 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
|
60 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
61 if ((config.x86CPUFeatures & config.cpuSSE41) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
62 features.add(AMD64.CPUFeature.SSE4_1); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
63 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
64 if ((config.x86CPUFeatures & config.cpuSSE42) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
65 features.add(AMD64.CPUFeature.SSE4_2); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
66 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
67 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
|
68 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
|
69 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
70 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
|
71 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
|
72 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
73 if ((config.x86CPUFeatures & config.cpuERMS) != 0) { |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
74 features.add(AMD64.CPUFeature.ERMS); |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
75 } |
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
76 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
|
77 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
|
78 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
79 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
|
80 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
|
81 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
82 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
|
83 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
|
84 } |
13517
eefb0224149d
derive CPUFeatures from VM_Version::_cpuFeatures
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13351
diff
changeset
|
85 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
|
86 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
|
87 } |
18415
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
88 if ((config.x86CPUFeatures & config.cpuBMI1) != 0) { |
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
89 features.add(AMD64.CPUFeature.BMI1); |
6dc4f0be9a70
Add support of lzcnt and tzcnt
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18258
diff
changeset
|
90 } |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
91 return features; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
92 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
93 |
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
|
94 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
|
95 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
|
96 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
|
97 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
|
98 } |
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 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
|
100 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
|
101 } |
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 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
|
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 |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
105 protected TargetDescription createTarget(HotSpotVMConfig config) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
106 final int stackFrameAlignment = 16; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
107 final int implicitNullCheckLimit = 4096; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
108 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
|
109 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
|
110 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
111 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
112 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
113 public HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotBackend host) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
114 assert host == null; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
115 TargetDescription target = createTarget(runtime.getConfig()); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
116 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
117 HotSpotProviders providers; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
118 HotSpotRegistersProvider registers; |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
119 RegisterConfig regConfig; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
120 HotSpotCodeCacheProvider codeCache; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
121 HotSpotConstantReflectionProvider constantReflection; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
122 HotSpotHostForeignCallsProvider foreignCalls; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
123 Value[] nativeABICallerSaveRegisters; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
124 HotSpotMetaAccessProvider metaAccess; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
125 HotSpotLoweringProvider lowerer; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
126 HotSpotSnippetReflectionProvider snippetReflection; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
127 Replacements replacements; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
128 HotSpotDisassemblerProvider disassembler; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
129 HotSpotSuitesProvider suites; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
130 try (InitTimer t = timer("create providers")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
131 try (InitTimer rt = timer("create HotSpotRegisters provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
132 registers = createRegisters(); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
133 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
134 try (InitTimer rt = timer("create MetaAccess provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
135 metaAccess = createMetaAccess(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
136 } |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
137 try (InitTimer rt = timer("create RegisterConfig")) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
138 regConfig = createRegisterConfig(runtime, target); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
139 } |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
140 try (InitTimer rt = timer("create CodeCache provider")) { |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
141 codeCache = createCodeCache(runtime, target, regConfig); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
142 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
143 try (InitTimer rt = timer("create ConstantReflection provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
144 constantReflection = createConstantReflection(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
145 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
146 try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
147 nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
148 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
149 try (InitTimer rt = timer("create ForeignCalls provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
150 foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
151 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
152 try (InitTimer rt = timer("create Lowerer provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
153 lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
154 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
155 // Replacements cannot have speculative optimizations since they have |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
156 // to be valid for the entire run of the VM. |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
157 Assumptions assumptions = new Assumptions(false); |
18479
16e61bb57e90
Introduce StampProvider to support different stamps for metadata on different VMs.
Roland Schatz <roland.schatz@oracle.com>
parents:
18415
diff
changeset
|
158 Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, new HotSpotStampProvider()); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
159 try (InitTimer rt = timer("create SnippetReflection provider")) { |
18514
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
|
160 snippetReflection = createSnippetReflection(runtime); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
161 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
162 try (InitTimer rt = timer("create Replacements provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
163 replacements = createReplacements(runtime, assumptions, p, snippetReflection); |
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 Disassembler provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
166 disassembler = createDisassembler(runtime); |
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 Suites provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
169 suites = createSuites(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
170 } |
18258
6faee2dcebbf
moved MethodHandleAccessProvider to graal.api.meta and made it retrievable from MetaAccessProvider so that it does not need to be accessed via a global in MethodHandleNode (which is problematic for remote/replay compilation) (GRAAL-874)
Doug Simon <doug.simon@oracle.com>
parents:
17447
diff
changeset
|
171 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
172 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
173 try (InitTimer rt = timer("instantiate backend")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
174 return createBackend(runtime, providers); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
175 } |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
176 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
177 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
178 protected AMD64HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotProviders providers) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
179 return new AMD64HotSpotBackend(runtime, providers); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
180 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
181 |
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
|
182 protected HotSpotRegistersProvider createRegisters() { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
183 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
|
184 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
185 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
186 protected HotSpotDisassemblerProvider createDisassembler(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
187 return new HotSpotDisassemblerProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
188 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
189 |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
190 protected Replacements createReplacements(HotSpotGraalRuntime runtime, Assumptions assumptions, Providers p, SnippetReflectionProvider snippetReflection) { |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
191 return new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), assumptions, p.getCodeCache().getTarget()); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
192 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
193 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
194 protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotGraalRuntime runtime, HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
195 Value[] nativeABICallerSaveRegisters) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
196 return new AMD64HotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
197 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
198 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
199 protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
200 return new HotSpotConstantReflectionProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
201 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
202 |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
203 protected RegisterConfig createRegisterConfig(HotSpotGraalRuntime runtime, TargetDescription target) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
204 return new AMD64HotSpotRegisterConfig(target.arch, runtime.getConfig()); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
205 } |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
206 |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
207 protected HotSpotCodeCacheProvider createCodeCache(HotSpotGraalRuntime runtime, TargetDescription target, RegisterConfig regConfig) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
208 return new HotSpotCodeCacheProvider(runtime, target, regConfig); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
209 } |
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 protected HotSpotMetaAccessProvider createMetaAccess(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
212 return new HotSpotMetaAccessProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
213 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
214 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
215 protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
216 return new HotSpotSuitesProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
217 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
218 |
18514
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
|
219 protected HotSpotSnippetReflectionProvider createSnippetReflection(HotSpotGraalRuntime runtime) { |
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
|
220 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
|
221 } |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
222 |
15889
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
223 protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntime runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, |
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
224 TargetDescription target) { |
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
225 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
|
226 } |
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 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
|
229 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
|
230 if (config.windowsOs) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
231 // 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
|
232 callerSave.remove(AMD64.rdi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
233 callerSave.remove(AMD64.rsi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
234 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
235 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
236 callerSave.remove(AMD64.rsp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
237 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
238 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
239 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
240 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
241 callerSave.remove(AMD64.xmm6); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
242 callerSave.remove(AMD64.xmm7); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
243 callerSave.remove(AMD64.xmm8); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
244 callerSave.remove(AMD64.xmm9); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
245 callerSave.remove(AMD64.xmm10); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
246 callerSave.remove(AMD64.xmm11); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
247 callerSave.remove(AMD64.xmm12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
248 callerSave.remove(AMD64.xmm13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
249 callerSave.remove(AMD64.xmm14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
250 callerSave.remove(AMD64.xmm15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
251 } else { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
252 /* |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
253 * System V Application Binary Interface, AMD64 Architecture Processor Supplement |
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
|
254 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
255 * Draft Version 0.96 |
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
|
256 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
257 * http://www.uclibc.org/docs/psABI-x86_64.pdf |
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
|
258 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
259 * 3.2.1 |
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
|
260 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
261 * ... |
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
|
262 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
263 * 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
|
264 * 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
|
265 * 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
|
266 * 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
|
267 * 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
|
268 * 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
|
269 */ |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
270 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
271 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
272 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
273 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
274 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
275 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
276 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
277 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
|
278 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
|
279 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
|
280 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
281 return nativeABICallerSaveRegisters; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
282 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
283 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
284 public String getArchitecture() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
285 return "AMD64"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
286 } |
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 public String getGraalRuntimeName() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
289 return "basic"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
290 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
291 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
292 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
293 public String toString() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
294 return getGraalRuntimeName() + ":" + getArchitecture(); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
295 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
296 } |