Mercurial > hg > truffle
comparison graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java @ 20149:b1a8928fc4b9
[SPARC] Implement new instructions in assembler/enhance assertion error-message in MoveResolver
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Thu, 02 Apr 2015 18:45:28 +0200 |
parents | 9299e71df12a |
children | 9b6ea36013c4 |
comparison
equal
deleted
inserted
replaced
20144:921eeb012866 | 20149:b1a8928fc4b9 |
---|---|
88 | 88 |
89 private final Register[] cpuCallerParameterRegisters = {o0, o1, o2, o3, o4, o5}; | 89 private final Register[] cpuCallerParameterRegisters = {o0, o1, o2, o3, o4, o5}; |
90 private final Register[] cpuCalleeParameterRegisters = {i0, i1, i2, i3, i4, i5}; | 90 private final Register[] cpuCalleeParameterRegisters = {i0, i1, i2, i3, i4, i5}; |
91 | 91 |
92 private final Register[] fpuParameterRegisters = {f0, f1, f2, f3, f4, f5, f6, f7}; | 92 private final Register[] fpuParameterRegisters = {f0, f1, f2, f3, f4, f5, f6, f7}; |
93 private final Register[] fpuDoubleParameterRegisters = {d0, null, d2, null, d4, null, d6, null}; | |
93 // @formatter:off | 94 // @formatter:off |
94 private final Register[] callerSaveRegisters = | 95 private final Register[] callerSaveRegisters = |
95 {g1, g2, g3, g4, g5, g6, g7, | 96 {g1, g2, g3, g4, g5, g6, g7, |
96 o0, o1, o2, o3, o4, o5, o7, | 97 o0, o1, o2, o3, o4, o5, o7, |
97 f0, f1, f2, f3, f4, f5, f6, f7, | 98 f0, f1, f2, f3, f4, f5, f6, f7, |
206 } | 207 } |
207 throw GraalInternalError.shouldNotReachHere(); | 208 throw GraalInternalError.shouldNotReachHere(); |
208 } | 209 } |
209 | 210 |
210 public Register[] getCallingConventionRegisters(Type type, Kind kind) { | 211 public Register[] getCallingConventionRegisters(Type type, Kind kind) { |
211 if (architecture.canStoreValue(FPU, kind)) { | 212 if (architecture.canStoreValue(FPUs, kind) || architecture.canStoreValue(FPUd, kind)) { |
212 return fpuParameterRegisters; | 213 return fpuParameterRegisters; |
213 } | 214 } |
214 assert architecture.canStoreValue(CPU, kind); | 215 assert architecture.canStoreValue(CPU, kind); |
215 return type == Type.JavaCallee ? cpuCalleeParameterRegisters : cpuCallerParameterRegisters; | 216 return type == Type.JavaCallee ? cpuCalleeParameterRegisters : cpuCallerParameterRegisters; |
216 } | 217 } |
242 if (!stackOnly && currentFloating < fpuParameterRegisters.length) { | 243 if (!stackOnly && currentFloating < fpuParameterRegisters.length) { |
243 if (currentFloating % 2 != 0) { | 244 if (currentFloating % 2 != 0) { |
244 // Make register number even to be a double reg | 245 // Make register number even to be a double reg |
245 currentFloating++; | 246 currentFloating++; |
246 } | 247 } |
247 Register register = fpuParameterRegisters[currentFloating]; | 248 Register register = fpuDoubleParameterRegisters[currentFloating]; |
248 currentFloating += 2; // Only every second is a double register | 249 currentFloating += 2; // Only every second is a double register |
249 locations[i] = register.asValue(target.getLIRKind(kind)); | 250 locations[i] = register.asValue(target.getLIRKind(kind)); |
250 } | 251 } |
251 break; | 252 break; |
252 case Float: | 253 case Float: |
287 case Int: | 288 case Int: |
288 case Long: | 289 case Long: |
289 case Object: | 290 case Object: |
290 return type == Type.JavaCallee ? i0 : o0; | 291 return type == Type.JavaCallee ? i0 : o0; |
291 case Float: | 292 case Float: |
293 return f0; | |
292 case Double: | 294 case Double: |
293 return f0; | 295 return d0; |
294 case Void: | 296 case Void: |
295 case Illegal: | 297 case Illegal: |
296 return null; | 298 return null; |
297 default: | 299 default: |
298 throw new UnsupportedOperationException("no return register for type " + kind); | 300 throw new UnsupportedOperationException("no return register for type " + kind); |