Mercurial > hg > graal-jvmci-8
comparison jvmci/jdk.vm.ci.hotspot.aarch64/src/jdk/vm/ci/hotspot/aarch64/AArch64HotSpotRegisterConfig.java @ 22783:d63506bb5237
Make CallingConvention.Type extensible; remove unused stackOnly parameter
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Thu, 21 Jan 2016 13:53:26 -0800 |
parents | 577a4a8caa72 |
children | 0ab4d816a7f0 |
comparison
equal
deleted
inserted
replaced
22782:bf8a5a6861b1 | 22783:d63506bb5237 |
---|---|
60 import jdk.vm.ci.code.RegisterAttributes; | 60 import jdk.vm.ci.code.RegisterAttributes; |
61 import jdk.vm.ci.code.RegisterConfig; | 61 import jdk.vm.ci.code.RegisterConfig; |
62 import jdk.vm.ci.code.StackSlot; | 62 import jdk.vm.ci.code.StackSlot; |
63 import jdk.vm.ci.code.TargetDescription; | 63 import jdk.vm.ci.code.TargetDescription; |
64 import jdk.vm.ci.common.JVMCIError; | 64 import jdk.vm.ci.common.JVMCIError; |
65 import jdk.vm.ci.hotspot.HotSpotCallingConventionType; | |
65 import jdk.vm.ci.hotspot.HotSpotVMConfig; | 66 import jdk.vm.ci.hotspot.HotSpotVMConfig; |
66 import jdk.vm.ci.meta.AllocatableValue; | 67 import jdk.vm.ci.meta.AllocatableValue; |
67 import jdk.vm.ci.meta.JavaKind; | 68 import jdk.vm.ci.meta.JavaKind; |
68 import jdk.vm.ci.meta.JavaType; | 69 import jdk.vm.ci.meta.JavaType; |
69 import jdk.vm.ci.meta.LIRKind; | 70 import jdk.vm.ci.meta.LIRKind; |
189 public Register getRegisterForRole(int index) { | 190 public Register getRegisterForRole(int index) { |
190 throw new UnsupportedOperationException(); | 191 throw new UnsupportedOperationException(); |
191 } | 192 } |
192 | 193 |
193 @Override | 194 @Override |
194 public CallingConvention getCallingConvention(Type type, JavaType returnType, JavaType[] parameterTypes, TargetDescription target, boolean stackOnly) { | 195 public CallingConvention getCallingConvention(Type type, JavaType returnType, JavaType[] parameterTypes, TargetDescription target) { |
195 if (type == Type.NativeCall) { | 196 if (type == HotSpotCallingConventionType.NativeCall) { |
196 return callingConvention(nativeGeneralParameterRegisters, returnType, parameterTypes, type, target, stackOnly); | 197 return callingConvention(nativeGeneralParameterRegisters, returnType, parameterTypes, (HotSpotCallingConventionType) type, target); |
197 } | 198 } |
198 // On x64, parameter locations are the same whether viewed | 199 // On x64, parameter locations are the same whether viewed |
199 // from the caller or callee perspective | 200 // from the caller or callee perspective |
200 return callingConvention(javaGeneralParameterRegisters, returnType, parameterTypes, type, target, stackOnly); | 201 return callingConvention(javaGeneralParameterRegisters, returnType, parameterTypes, (HotSpotCallingConventionType) type, target); |
201 } | 202 } |
202 | 203 |
203 public Register[] getCallingConventionRegisters(Type type, JavaKind kind) { | 204 public Register[] getCallingConventionRegisters(Type type, JavaKind kind) { |
204 switch (kind) { | 205 switch (kind) { |
205 case Boolean: | 206 case Boolean: |
207 case Short: | 208 case Short: |
208 case Char: | 209 case Char: |
209 case Int: | 210 case Int: |
210 case Long: | 211 case Long: |
211 case Object: | 212 case Object: |
212 return type == Type.NativeCall ? nativeGeneralParameterRegisters : javaGeneralParameterRegisters; | 213 return type == HotSpotCallingConventionType.NativeCall ? nativeGeneralParameterRegisters : javaGeneralParameterRegisters; |
213 case Float: | 214 case Float: |
214 case Double: | 215 case Double: |
215 return simdParameterRegisters; | 216 return simdParameterRegisters; |
216 default: | 217 default: |
217 throw JVMCIError.shouldNotReachHere(); | 218 throw JVMCIError.shouldNotReachHere(); |
218 } | 219 } |
219 } | 220 } |
220 | 221 |
221 private CallingConvention callingConvention(Register[] generalParameterRegisters, JavaType returnType, JavaType[] parameterTypes, Type type, TargetDescription target, boolean stackOnly) { | 222 private CallingConvention callingConvention(Register[] generalParameterRegisters, JavaType returnType, JavaType[] parameterTypes, HotSpotCallingConventionType type, TargetDescription target) { |
222 AllocatableValue[] locations = new AllocatableValue[parameterTypes.length]; | 223 AllocatableValue[] locations = new AllocatableValue[parameterTypes.length]; |
223 | 224 |
224 int currentGeneral = 0; | 225 int currentGeneral = 0; |
225 int currentSIMD = 0; | 226 int currentSIMD = 0; |
226 int currentStackOffset = 0; | 227 int currentStackOffset = 0; |
234 case Short: | 235 case Short: |
235 case Char: | 236 case Char: |
236 case Int: | 237 case Int: |
237 case Long: | 238 case Long: |
238 case Object: | 239 case Object: |
239 if (!stackOnly && currentGeneral < generalParameterRegisters.length) { | 240 if (currentGeneral < generalParameterRegisters.length) { |
240 Register register = generalParameterRegisters[currentGeneral++]; | 241 Register register = generalParameterRegisters[currentGeneral++]; |
241 locations[i] = register.asValue(target.getLIRKind(kind)); | 242 locations[i] = register.asValue(target.getLIRKind(kind)); |
242 } | 243 } |
243 break; | 244 break; |
244 case Float: | 245 case Float: |
245 case Double: | 246 case Double: |
246 if (!stackOnly && currentSIMD < simdParameterRegisters.length) { | 247 if (currentSIMD < simdParameterRegisters.length) { |
247 Register register = simdParameterRegisters[currentSIMD++]; | 248 Register register = simdParameterRegisters[currentSIMD++]; |
248 locations[i] = register.asValue(target.getLIRKind(kind)); | 249 locations[i] = register.asValue(target.getLIRKind(kind)); |
249 } | 250 } |
250 break; | 251 break; |
251 default: | 252 default: |