Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java @ 17447:f861021b49b8
Restructure CodeCacheProvider hierarchy.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Wed, 15 Oct 2014 11:04:45 +0200 |
parents | 9e5a323e0a1e |
children | 6faee2dcebbf |
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) { |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
43 return new AMD64(computeFeatures(config)); |
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 } |
13351
7345e9672dc3
refactor computation of architecture features
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13350
diff
changeset
|
88 return features; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
89 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
90 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
91 protected TargetDescription createTarget(HotSpotVMConfig config) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
92 final int stackFrameAlignment = 16; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
93 final int implicitNullCheckLimit = 4096; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
94 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
|
95 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
|
96 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
97 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
98 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
99 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
|
100 assert host == null; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
101 TargetDescription target = createTarget(runtime.getConfig()); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
102 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
103 HotSpotProviders providers; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
104 HotSpotRegistersProvider registers; |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
105 RegisterConfig regConfig; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
106 HotSpotCodeCacheProvider codeCache; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
107 HotSpotConstantReflectionProvider constantReflection; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
108 HotSpotHostForeignCallsProvider foreignCalls; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
109 Value[] nativeABICallerSaveRegisters; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
110 HotSpotMetaAccessProvider metaAccess; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
111 HotSpotLoweringProvider lowerer; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
112 HotSpotSnippetReflectionProvider snippetReflection; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
113 Replacements replacements; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
114 HotSpotDisassemblerProvider disassembler; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
115 HotSpotSuitesProvider suites; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
116 HotSpotMethodHandleAccessProvider methodHandleAccess; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
117 try (InitTimer t = timer("create providers")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
118 try (InitTimer rt = timer("create HotSpotRegisters provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
119 registers = createRegisters(); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
120 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
121 try (InitTimer rt = timer("create MetaAccess provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
122 metaAccess = createMetaAccess(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
123 } |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
124 try (InitTimer rt = timer("create RegisterConfig")) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
125 regConfig = createRegisterConfig(runtime, target); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
126 } |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
127 try (InitTimer rt = timer("create CodeCache provider")) { |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
128 codeCache = createCodeCache(runtime, target, regConfig); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
129 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
130 try (InitTimer rt = timer("create ConstantReflection provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
131 constantReflection = createConstantReflection(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
132 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
133 try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
134 nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
135 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
136 try (InitTimer rt = timer("create ForeignCalls provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
137 foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
138 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
139 try (InitTimer rt = timer("create Lowerer provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
140 lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
141 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
142 // Replacements cannot have speculative optimizations since they have |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
143 // 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
|
144 Assumptions assumptions = new Assumptions(false); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
145 Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
146 try (InitTimer rt = timer("create SnippetReflection provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
147 snippetReflection = createSnippetReflection(); |
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 Replacements provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
150 replacements = createReplacements(runtime, assumptions, p, snippetReflection); |
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 Disassembler provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
153 disassembler = createDisassembler(runtime); |
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 try (InitTimer rt = timer("create Suites provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
156 suites = createSuites(runtime); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
157 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
158 try (InitTimer rt = timer("create MethodHandleAccess provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
159 methodHandleAccess = new HotSpotMethodHandleAccessProvider(); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
160 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
161 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, methodHandleAccess); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
162 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
163 try (InitTimer rt = timer("instantiate backend")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
164 return createBackend(runtime, providers); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
165 } |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
166 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
167 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
168 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
|
169 return new AMD64HotSpotBackend(runtime, providers); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
170 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
171 |
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
|
172 protected HotSpotRegistersProvider createRegisters() { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
173 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
|
174 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
175 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
176 protected HotSpotDisassemblerProvider createDisassembler(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
177 return new HotSpotDisassemblerProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
178 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
179 |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
180 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
|
181 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
|
182 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
183 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
184 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
|
185 Value[] nativeABICallerSaveRegisters) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
186 return new AMD64HotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
187 } |
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 protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
190 return new HotSpotConstantReflectionProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
191 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
192 |
17447
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
193 protected RegisterConfig createRegisterConfig(HotSpotGraalRuntime runtime, TargetDescription target) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
194 return new AMD64HotSpotRegisterConfig(target.arch, runtime.getConfig()); |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
195 } |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
196 |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
197 protected HotSpotCodeCacheProvider createCodeCache(HotSpotGraalRuntime runtime, TargetDescription target, RegisterConfig regConfig) { |
f861021b49b8
Restructure CodeCacheProvider hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents:
16116
diff
changeset
|
198 return new HotSpotCodeCacheProvider(runtime, target, regConfig); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
199 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
200 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
201 protected HotSpotMetaAccessProvider createMetaAccess(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
202 return new HotSpotMetaAccessProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
203 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
204 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
205 protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntime runtime) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
206 return new HotSpotSuitesProvider(runtime); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
207 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
208 |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
209 protected HotSpotSnippetReflectionProvider createSnippetReflection() { |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
210 return new HotSpotSnippetReflectionProvider(); |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
211 } |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
212 |
15889
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
213 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
|
214 TargetDescription target) { |
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
215 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
|
216 } |
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 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
|
219 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
|
220 if (config.windowsOs) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
221 // 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
|
222 callerSave.remove(AMD64.rdi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
223 callerSave.remove(AMD64.rsi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
224 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
225 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
226 callerSave.remove(AMD64.rsp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
227 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
228 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
229 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
230 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
231 callerSave.remove(AMD64.xmm6); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
232 callerSave.remove(AMD64.xmm7); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
233 callerSave.remove(AMD64.xmm8); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
234 callerSave.remove(AMD64.xmm9); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
235 callerSave.remove(AMD64.xmm10); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
236 callerSave.remove(AMD64.xmm11); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
237 callerSave.remove(AMD64.xmm12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
238 callerSave.remove(AMD64.xmm13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
239 callerSave.remove(AMD64.xmm14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
240 callerSave.remove(AMD64.xmm15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
241 } else { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
242 /* |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
243 * System V Application Binary Interface, AMD64 Architecture Processor Supplement |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
244 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
245 * Draft Version 0.96 |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
246 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
247 * http://www.uclibc.org/docs/psABI-x86_64.pdf |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
248 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
249 * 3.2.1 |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
250 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
251 * ... |
16116
9e5a323e0a1e
Remove hotspot specific NarrowOop kind, use LIRKind.reference(Kind.Int) instead.
Roland Schatz <roland.schatz@oracle.com>
parents:
16104
diff
changeset
|
252 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
253 * 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
|
254 * 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
|
255 * 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
|
256 * 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
|
257 * 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
|
258 * 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
|
259 */ |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
260 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
261 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
262 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
263 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
264 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
265 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
266 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
267 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
|
268 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
|
269 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
|
270 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
271 return nativeABICallerSaveRegisters; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
272 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
273 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
274 public String getArchitecture() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
275 return "AMD64"; |
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 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
278 public String getGraalRuntimeName() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
279 return "basic"; |
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 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
282 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
283 public String toString() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
284 return getGraalRuntimeName() + ":" + getArchitecture(); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
285 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
286 } |