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);