Mercurial > hg > graal-compiler
comparison c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java @ 1420:44efca8a02d6
reformatting similar to other maxine projects (tabs, etc.)
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Tue, 13 Jul 2010 11:47:55 -0700 |
parents | 7bf6a77b9c5a |
children | 6223633ce7dd |
comparison
equal
deleted
inserted
replaced
1419:7bf6a77b9c5a | 1420:44efca8a02d6 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. | 2 * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. |
3 * | 3 * |
4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product | 4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is |
5 * that is described in this document. In particular, and without limitation, these intellectual property | 5 * described in this document. In particular, and without limitation, these intellectual property rights may include one |
6 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or | 6 * or more of the U.S. patents listed at http://www.sun.com/patents and one or more additional patents or pending patent |
7 * more additional patents or pending patent applications in the U.S. and in other countries. | 7 * applications in the U.S. and in other countries. |
8 * | 8 * |
9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun | 9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun Microsystems, Inc. standard |
10 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its | 10 * license agreement and applicable provisions of the FAR and its supplements. |
11 * supplements. | |
12 * | 11 * |
13 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or | 12 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or registered |
14 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks | 13 * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks are used under license and |
15 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the | 14 * are trademarks or registered trademarks of SPARC International, Inc. in the U.S. and other countries. |
16 * U.S. and other countries. | |
17 * | 15 * |
18 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open | 16 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open Company, Ltd. |
19 * Company, Ltd. | |
20 */ | 17 */ |
21 package com.sun.hotspot.c1x; | 18 package com.sun.hotspot.c1x; |
22 | 19 |
20 import java.lang.reflect.Modifier; | |
23 import java.util.ArrayList; | 21 import java.util.ArrayList; |
24 import java.util.List; | 22 import java.util.List; |
25 | 23 |
26 import com.sun.cri.ci.CiKind; | 24 import com.sun.cri.ci.CiKind; |
27 import com.sun.cri.ri.RiField; | 25 import com.sun.cri.ri.RiField; |
28 import com.sun.cri.ri.RiMethod; | 26 import com.sun.cri.ri.RiMethod; |
27 import com.sun.cri.ri.RiRegisterConfig; | |
29 import com.sun.cri.ri.RiType; | 28 import com.sun.cri.ri.RiType; |
30 import com.sun.cri.ri.RiType.Representation; | 29 import com.sun.cri.ri.RiType.Representation; |
31 import com.sun.cri.xir.CiXirAssembler; | 30 import com.sun.cri.xir.CiXirAssembler; |
32 import com.sun.cri.xir.RiXirGenerator; | 31 import com.sun.cri.xir.RiXirGenerator; |
33 import com.sun.cri.xir.XirArgument; | 32 import com.sun.cri.xir.XirArgument; |
35 import com.sun.cri.xir.XirSnippet; | 34 import com.sun.cri.xir.XirSnippet; |
36 import com.sun.cri.xir.XirTemplate; | 35 import com.sun.cri.xir.XirTemplate; |
37 import com.sun.cri.xir.CiXirAssembler.XirOperand; | 36 import com.sun.cri.xir.CiXirAssembler.XirOperand; |
38 | 37 |
39 /** | 38 /** |
40 * | 39 * |
41 * @author Thomas Wuerthinger | 40 * @author Thomas Wuerthinger |
42 * | 41 * |
43 */ | 42 */ |
44 public class HotSpotXirGenerator extends RiXirGenerator { | 43 public class HotSpotXirGenerator extends RiXirGenerator { |
45 | 44 |
46 private XirTemplate[] emptyTemplates = new XirTemplate[CiKind.values().length]; | 45 private XirTemplate[] emptyTemplates = new XirTemplate[CiKind.values().length]; |
47 private final HotSpotVMConfig config; | 46 private final HotSpotVMConfig config; |
48 | 47 |
49 public HotSpotXirGenerator(HotSpotVMConfig config) { | 48 public HotSpotXirGenerator(HotSpotVMConfig config) { |
50 this.config = config; | 49 this.config = config; |
51 } | 50 } |
52 | 51 |
53 @Override | 52 @Override |
54 public List<XirTemplate> buildTemplates(CiXirAssembler asm) { | 53 public List<XirTemplate> buildTemplates(CiXirAssembler asm) { |
54 List<XirTemplate> templates = new ArrayList<XirTemplate>(); | |
55 for (int i = 0; i < CiKind.values().length; i++) { | |
55 | 56 |
56 List<XirTemplate> templates = new ArrayList<XirTemplate>(); | 57 CiKind curKind = CiKind.values()[i]; |
57 for (int i = 0; i < CiKind.values().length; i++) { | |
58 | 58 |
59 CiKind curKind = CiKind.values()[i]; | 59 if (curKind == CiKind.Float || curKind == CiKind.Double) |
60 continue; | |
60 | 61 |
61 if (curKind == CiKind.Float || curKind == CiKind.Double) | 62 if (CiKind.values()[i] == CiKind.Void) { |
62 continue; | 63 asm.restart(CiKind.values()[i]); |
64 emptyTemplates[i] = asm.finishTemplate("empty-" + CiKind.values()[i]); | |
65 } else { | |
66 asm.restart(); | |
67 XirOperand result = asm.createTemp("result", CiKind.values()[i]); | |
68 emptyTemplates[i] = asm.finishTemplate(result, "empty-" + CiKind.values()[i]); | |
69 } | |
70 templates.add(emptyTemplates[i]); | |
71 } | |
63 | 72 |
64 if (CiKind.values()[i] == CiKind.Void) { | 73 return templates; |
65 asm.restart(CiKind.values()[i]); | 74 } |
66 emptyTemplates[i] = asm.finishTemplate("empty-" | |
67 + CiKind.values()[i]); | |
68 } else { | |
69 asm.restart(); | |
70 XirOperand result = asm | |
71 .createTemp("result", CiKind.values()[i]); | |
72 emptyTemplates[i] = asm.finishTemplate(result, "empty-" | |
73 + CiKind.values()[i]); | |
74 } | |
75 templates.add(emptyTemplates[i]); | |
76 } | |
77 | 75 |
78 return templates; | 76 @Override |
79 } | 77 public XirSnippet genArrayLength(XirSite site, XirArgument array) { |
78 return new XirSnippet(emptyTemplates[CiKind.Int.ordinal()]); | |
79 } | |
80 | 80 |
81 @Override | 81 @Override |
82 public XirSnippet genArrayLength(XirSite site, XirArgument array) { | 82 public XirSnippet genArrayLoad(XirSite site, XirArgument array, XirArgument index, XirArgument length, CiKind elementKind, RiType elementType) { |
83 return new XirSnippet(emptyTemplates[CiKind.Int.ordinal()]); | 83 return new XirSnippet(emptyTemplates[elementKind.ordinal()]); |
84 } | 84 } |
85 | 85 |
86 @Override | 86 @Override |
87 public XirSnippet genArrayLoad(XirSite site, XirArgument array, | 87 public XirSnippet genArrayStore(XirSite site, XirArgument array, XirArgument index, XirArgument length, XirArgument value, CiKind elementKind, RiType elementType) { |
88 XirArgument index, XirArgument length, CiKind elementKind, | 88 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
89 RiType elementType) { | 89 } |
90 return new XirSnippet(emptyTemplates[elementKind.ordinal()]); | |
91 } | |
92 | 90 |
93 @Override | 91 @Override |
94 public XirSnippet genArrayStore(XirSite site, XirArgument array, | 92 public XirSnippet genCheckCast(XirSite site, XirArgument receiver, XirArgument hub, RiType type) { |
95 XirArgument index, XirArgument length, XirArgument value, | 93 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
96 CiKind elementKind, RiType elementType) { | 94 } |
97 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | |
98 } | |
99 | 95 |
100 @Override | 96 @Override |
101 public XirSnippet genCheckCast(XirSite site, XirArgument receiver, | 97 public XirSnippet genEntrypoint(XirSite site) { |
102 XirArgument hub, RiType type) { | 98 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
103 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | 99 } |
104 } | |
105 | 100 |
106 @Override | 101 @Override |
107 public XirSnippet genEntrypoint(XirSite site) { | 102 public XirSnippet genGetField(XirSite site, XirArgument receiver, RiField field) { |
108 return null; | 103 return new XirSnippet(emptyTemplates[field.kind().ordinal()]); |
109 } | 104 } |
110 | 105 |
111 @Override | 106 @Override |
112 public XirSnippet genGetField(XirSite site, XirArgument receiver, | 107 public XirSnippet genGetStatic(XirSite site, XirArgument staticTuple, RiField field) { |
113 RiField field) { | 108 return new XirSnippet(emptyTemplates[field.kind().ordinal()]); |
114 return new XirSnippet(emptyTemplates[field.kind().ordinal()]); | 109 } |
115 } | |
116 | 110 |
117 @Override | 111 @Override |
118 public XirSnippet genGetStatic(XirSite site, XirArgument staticTuple, | 112 public XirSnippet genInstanceOf(XirSite site, XirArgument receiver, XirArgument hub, RiType type) { |
119 RiField field) { | 113 return new XirSnippet(emptyTemplates[CiKind.Boolean.ordinal()]); |
120 return new XirSnippet(emptyTemplates[field.kind().ordinal()]); | 114 } |
121 } | |
122 | 115 |
123 @Override | 116 @Override |
124 public XirSnippet genInstanceOf(XirSite site, XirArgument receiver, | 117 public XirSnippet genIntrinsic(XirSite site, XirArgument[] arguments, RiMethod method) { |
125 XirArgument hub, RiType type) { | 118 return null; |
126 return new XirSnippet(emptyTemplates[CiKind.Boolean.ordinal()]); | 119 } |
127 } | |
128 | 120 |
129 @Override | 121 @Override |
130 public XirSnippet genIntrinsic(XirSite site, XirArgument[] arguments, | 122 public XirSnippet genInvokeInterface(XirSite site, XirArgument receiver, RiMethod method) { |
131 RiMethod method) { | 123 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); |
132 return null; | 124 } |
133 } | |
134 | 125 |
135 @Override | 126 @Override |
136 public XirSnippet genInvokeInterface(XirSite site, XirArgument receiver, | 127 public XirSnippet genInvokeSpecial(XirSite site, XirArgument receiver, RiMethod method) { |
137 RiMethod method) { | 128 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); |
138 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); | 129 } |
139 } | |
140 | 130 |
141 @Override | 131 @Override |
142 public XirSnippet genInvokeSpecial(XirSite site, XirArgument receiver, | 132 public XirSnippet genInvokeStatic(XirSite site, RiMethod method) { |
143 RiMethod method) { | 133 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); |
144 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); | 134 } |
145 } | |
146 | 135 |
147 @Override | 136 @Override |
148 public XirSnippet genInvokeStatic(XirSite site, RiMethod method) { | 137 public XirSnippet genInvokeVirtual(XirSite site, XirArgument receiver, RiMethod method) { |
149 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); | 138 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); |
150 } | 139 } |
151 | 140 |
152 @Override | 141 @Override |
153 public XirSnippet genInvokeVirtual(XirSite site, XirArgument receiver, | 142 public XirSnippet genMonitorEnter(XirSite site, XirArgument receiver) { |
154 RiMethod method) { | 143 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
155 return new XirSnippet(emptyTemplates[CiKind.Word.ordinal()]); | 144 } |
156 } | |
157 | 145 |
158 @Override | 146 @Override |
159 public XirSnippet genMonitorEnter(XirSite site, XirArgument receiver) { | 147 public XirSnippet genMonitorExit(XirSite site, XirArgument receiver) { |
160 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | 148 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
161 } | 149 } |
162 | 150 |
163 @Override | 151 @Override |
164 public XirSnippet genMonitorExit(XirSite site, XirArgument receiver) { | 152 public XirSnippet genNewArray(XirSite site, XirArgument length, CiKind elementKind, RiType componentType, RiType arrayType) { |
165 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | 153 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
166 } | 154 } |
167 | 155 |
168 @Override | 156 @Override |
169 public XirSnippet genNewArray(XirSite site, XirArgument length, | 157 public XirSnippet genNewInstance(XirSite site, RiType type) { |
170 CiKind elementKind, RiType componentType, RiType arrayType) { | 158 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
171 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | 159 } |
172 } | |
173 | 160 |
174 @Override | 161 @Override |
175 public XirSnippet genNewInstance(XirSite site, RiType type) { | 162 public XirSnippet genNewMultiArray(XirSite site, XirArgument[] lengths, RiType type) { |
176 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | 163 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
177 } | 164 } |
178 | 165 |
179 @Override | 166 @Override |
180 public XirSnippet genNewMultiArray(XirSite site, XirArgument[] lengths, | 167 public XirSnippet genPutField(XirSite site, XirArgument receiver, RiField field, XirArgument value) { |
181 RiType type) { | 168 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
182 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | 169 } |
183 } | |
184 | 170 |
185 @Override | 171 @Override |
186 public XirSnippet genPutField(XirSite site, XirArgument receiver, | 172 public XirSnippet genPutStatic(XirSite site, XirArgument staticTuple, RiField field, XirArgument value) { |
187 RiField field, XirArgument value) { | 173 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
188 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | 174 } |
189 } | |
190 | 175 |
191 @Override | 176 @Override |
192 public XirSnippet genPutStatic(XirSite site, XirArgument staticTuple, | 177 public XirSnippet genResolveClass(XirSite site, RiType type, Representation representation) { |
193 RiField field, XirArgument value) { | 178 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
194 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | 179 } |
195 } | |
196 | 180 |
197 @Override | 181 @Override |
198 public XirSnippet genResolveClass(XirSite site, RiType type, | 182 public XirSnippet genSafepoint(XirSite site) { |
199 Representation representation) { | 183 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); |
200 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | 184 } |
201 } | |
202 | 185 |
203 @Override | 186 @Override |
204 public XirSnippet genSafepoint(XirSite site) { | 187 public XirSnippet genExceptionObject(XirSite site) { |
205 return new XirSnippet(emptyTemplates[CiKind.Void.ordinal()]); | 188 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); |
206 } | 189 } |
207 | |
208 @Override | |
209 public XirSnippet genExceptionObject(XirSite site) { | |
210 return new XirSnippet(emptyTemplates[CiKind.Object.ordinal()]); | |
211 } | |
212 | 190 |
213 } | 191 } |