Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java @ 21784:f4e1d958f1c3
[AMD64] Create AMD64 specific address nodes.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 08 Jun 2015 19:19:45 +0200 |
parents | e0f311284930 |
children | ae2a39857ab4 |
rev | line source |
---|---|
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
21527
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
2 * Copyright (c) 2012, 2015, 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 |
21551
5324104ac4f3
moved com.oracle.graal.hotspot.jvmci classes to com.oracle.jvmci.hotspot module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21538
diff
changeset
|
25 import static com.oracle.jvmci.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 |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
29 import com.oracle.graal.api.replacements.*; |
21784
f4e1d958f1c3
[AMD64] Create AMD64 specific address nodes.
Roland Schatz <roland.schatz@oracle.com>
parents:
21707
diff
changeset
|
30 import com.oracle.graal.compiler.amd64.*; |
20090
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
31 import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.hotspot.*; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.hotspot.meta.*; |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
34 import com.oracle.graal.hotspot.word.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
35 import com.oracle.graal.phases.util.*; |
20842
9794217565cd
replaced method substitutions for [Integer|Long].numberOf[Leading|Trailing]Zeros with InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20090
diff
changeset
|
36 import com.oracle.graal.replacements.amd64.*; |
21673
5024c80224c7
moved com.oracle.graal.[amd64|sparc] to com.oracle.jvmci.[amd64|sparc] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21604
diff
changeset
|
37 import com.oracle.jvmci.amd64.*; |
21604
93f282187d90
moved JVMCI service API into separate com.oracle.jvmci.service module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21556
diff
changeset
|
38 import com.oracle.jvmci.code.*; |
21551
5324104ac4f3
moved com.oracle.graal.hotspot.jvmci classes to com.oracle.jvmci.hotspot module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21538
diff
changeset
|
39 import com.oracle.jvmci.hotspot.*; |
21604
93f282187d90
moved JVMCI service API into separate com.oracle.jvmci.service module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21556
diff
changeset
|
40 import com.oracle.jvmci.meta.*; |
21527
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
41 import com.oracle.jvmci.runtime.*; |
21604
93f282187d90
moved JVMCI service API into separate com.oracle.jvmci.service module (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21556
diff
changeset
|
42 import com.oracle.jvmci.service.*; |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
43 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
44 @ServiceProvider(HotSpotBackendFactory.class) |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
45 public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
46 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
47 @Override |
21527
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
48 public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, JVMCIBackend jvmci, HotSpotBackend host) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
49 assert host == null; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
50 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
51 HotSpotProviders providers; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
52 HotSpotRegistersProvider registers; |
21527
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
53 HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmci.getCodeCache(); |
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
54 TargetDescription target = codeCache.getTarget(); |
21538
c1e2fdb5fea3
removed more dependencies from JVMCI classes to non-JVMCI classes (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21527
diff
changeset
|
55 HotSpotConstantReflectionProvider constantReflection = new HotSpotGraalConstantReflectionProvider(runtime.getJVMCIRuntime()); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
56 HotSpotHostForeignCallsProvider foreignCalls; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
57 Value[] nativeABICallerSaveRegisters; |
21527
07b088d61d5d
added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
58 HotSpotMetaAccessProvider metaAccess = (HotSpotMetaAccessProvider) jvmci.getMetaAccess(); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
59 HotSpotLoweringProvider lowerer; |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
60 HotSpotSnippetReflectionProvider snippetReflection; |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
61 HotSpotReplacementsImpl replacements; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
62 HotSpotSuitesProvider suites; |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
63 HotSpotWordTypes wordTypes; |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
64 Plugins plugins; |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
65 try (InitTimer t = timer("create providers")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
66 try (InitTimer rt = timer("create HotSpotRegisters provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
67 registers = createRegisters(); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
68 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
69 try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
70 nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
71 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
72 try (InitTimer rt = timer("create ForeignCalls provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
73 foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
74 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
75 try (InitTimer rt = timer("create Lowerer provider")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
76 lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
77 } |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
78 HotSpotStampProvider stampProvider = new HotSpotStampProvider(); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
79 Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); |
19791
14e703edb2ab
use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents:
19415
diff
changeset
|
80 |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
81 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
|
82 snippetReflection = createSnippetReflection(runtime); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
83 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
84 try (InitTimer rt = timer("create Replacements provider")) { |
19254
835e950b38b9
removed vestige usages of Assumptions independent of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
18528
diff
changeset
|
85 replacements = createReplacements(runtime, p, snippetReflection); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
86 } |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
87 try (InitTimer rt = timer("create WordTypes")) { |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
88 wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
89 } |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
90 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { |
20090
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
91 plugins = createGraphBuilderPlugins(runtime, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, stampProvider); |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
92 replacements.setGraphBuilderPlugins(plugins); |
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
93 } |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
94 try (InitTimer rt = timer("create Suites provider")) { |
21784
f4e1d958f1c3
[AMD64] Create AMD64 specific address nodes.
Roland Schatz <roland.schatz@oracle.com>
parents:
21707
diff
changeset
|
95 suites = createSuites(runtime, plugins, codeCache); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
96 } |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
97 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, suites, registers, snippetReflection, wordTypes, plugins); |
15915
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
98 } |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
99 try (InitTimer rt = timer("instantiate backend")) { |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
100 return createBackend(runtime, providers); |
d1e9a44b14cc
added more runtime initialization timers
Doug Simon <doug.simon@oracle.com>
parents:
15889
diff
changeset
|
101 } |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
102 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
103 |
20090
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
104 protected Plugins createGraphBuilderPlugins(HotSpotGraalRuntimeProvider runtime, TargetDescription target, HotSpotConstantReflectionProvider constantReflection, |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
105 HotSpotHostForeignCallsProvider foreignCalls, HotSpotMetaAccessProvider metaAccess, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
106 HotSpotWordTypes wordTypes, HotSpotStampProvider stampProvider) { |
20846
63e4f33dce84
moved registration of AMD64 specific plugins to AMD64GraphBuilderPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20842
diff
changeset
|
107 Plugins plugins = HotSpotGraphBuilderPlugins.create(runtime.getConfig(), wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); |
20858
9e8f6d379720
added InvocationPlugins to use recently exposed HotSpot math runtime functions
Doug Simon <doug.simon@oracle.com>
parents:
20846
diff
changeset
|
108 AMD64GraphBuilderPlugins.register(plugins, foreignCalls, (AMD64) target.arch); |
20842
9794217565cd
replaced method substitutions for [Integer|Long].numberOf[Leading|Trailing]Zeros with InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
20090
diff
changeset
|
109 return plugins; |
20090
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
110 } |
1048511c6bcc
added extension points for creating GraphBuilder plugins
Doug Simon <doug.simon@oracle.com>
parents:
19947
diff
changeset
|
111 |
18525
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18514
diff
changeset
|
112 protected AMD64HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
113 return new AMD64HotSpotBackend(runtime, providers); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
114 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
115 |
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
|
116 protected HotSpotRegistersProvider createRegisters() { |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
117 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
|
118 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
119 |
19882
0c29075aeafe
graph builder plugins are created before GraphBuilderConfigurations and the process for deriving plugins from an existing configuration is simplified
Doug Simon <doug.simon@oracle.com>
parents:
19791
diff
changeset
|
120 protected HotSpotReplacementsImpl createReplacements(HotSpotGraalRuntimeProvider runtime, Providers p, SnippetReflectionProvider snippetReflection) { |
19254
835e950b38b9
removed vestige usages of Assumptions independent of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
18528
diff
changeset
|
121 return new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), p.getCodeCache().getTarget()); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
122 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
123 |
18525
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18514
diff
changeset
|
124 protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
125 Value[] nativeABICallerSaveRegisters) { |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
126 return new AMD64HotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
127 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
128 |
21784
f4e1d958f1c3
[AMD64] Create AMD64 specific address nodes.
Roland Schatz <roland.schatz@oracle.com>
parents:
21707
diff
changeset
|
129 protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntimeProvider runtime, Plugins plugins, CodeCacheProvider codeCache) { |
f4e1d958f1c3
[AMD64] Create AMD64 specific address nodes.
Roland Schatz <roland.schatz@oracle.com>
parents:
21707
diff
changeset
|
130 return new HotSpotSuitesProvider(runtime, plugins, new AMD64AddressLowering(codeCache)); |
12476
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
131 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
132 |
18525
c538c2c6b7e2
changed most references to HotSpotGraalRuntime to use HotSpotGraalRuntimeProvider instead
Doug Simon <doug.simon@oracle.com>
parents:
18514
diff
changeset
|
133 protected HotSpotSnippetReflectionProvider createSnippetReflection(HotSpotGraalRuntimeProvider runtime) { |
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
|
134 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
|
135 } |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14560
diff
changeset
|
136 |
18528
c240024b32b3
fixed eclipseformat issues
Doug Simon <doug.simon@oracle.com>
parents:
18525
diff
changeset
|
137 protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls, |
c240024b32b3
fixed eclipseformat issues
Doug Simon <doug.simon@oracle.com>
parents:
18525
diff
changeset
|
138 HotSpotRegistersProvider registers, TargetDescription target) { |
15889
8184c00fefd2
Factor out VM-independent part of DefaultHotSpotLoweringProvider into DefaultJavaLoweringProvider
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15481
diff
changeset
|
139 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
|
140 } |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
141 |
67566565053a
made AMD64HotSpotBackendFactory more easily extensible
Doug Simon <doug.simon@oracle.com>
parents:
12469
diff
changeset
|
142 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
|
143 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
|
144 if (config.windowsOs) { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
145 // 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
|
146 callerSave.remove(AMD64.rdi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
147 callerSave.remove(AMD64.rsi); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
148 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
149 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
150 callerSave.remove(AMD64.rsp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
151 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
152 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
153 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
154 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
155 callerSave.remove(AMD64.xmm6); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
156 callerSave.remove(AMD64.xmm7); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
157 callerSave.remove(AMD64.xmm8); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
158 callerSave.remove(AMD64.xmm9); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
159 callerSave.remove(AMD64.xmm10); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
160 callerSave.remove(AMD64.xmm11); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
161 callerSave.remove(AMD64.xmm12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
162 callerSave.remove(AMD64.xmm13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
163 callerSave.remove(AMD64.xmm14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
164 callerSave.remove(AMD64.xmm15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
165 } else { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
166 /* |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
167 * System V Application Binary Interface, AMD64 Architecture Processor Supplement |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
168 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
169 * Draft Version 0.96 |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
170 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
171 * http://www.uclibc.org/docs/psABI-x86_64.pdf |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
172 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
173 * 3.2.1 |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
174 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
175 * ... |
21707
e0f311284930
made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
Doug Simon <doug.simon@oracle.com>
parents:
21673
diff
changeset
|
176 * |
12456
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
177 * 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
|
178 * 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
|
179 * 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
|
180 * 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
|
181 * 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
|
182 * 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
|
183 */ |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
184 callerSave.remove(AMD64.rbp); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
185 callerSave.remove(AMD64.rbx); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
186 callerSave.remove(AMD64.r12); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
187 callerSave.remove(AMD64.r13); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
188 callerSave.remove(AMD64.r14); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
189 callerSave.remove(AMD64.r15); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
190 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
191 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
|
192 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
|
193 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
|
194 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
195 return nativeABICallerSaveRegisters; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
196 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
197 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
198 public String getArchitecture() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
199 return "AMD64"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
200 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
201 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
202 public String getGraalRuntimeName() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
203 return "basic"; |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
204 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
205 |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
206 @Override |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
207 public String toString() { |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
208 return getGraalRuntimeName() + ":" + getArchitecture(); |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
209 } |
f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
210 } |