# HG changeset patch # User Stefan Anzinger # Date 1424587326 -3600 # Node ID 9299e71df12a802e54e531504312e8d851b6d447 # Parent 863c42893cc40da8f2b604e1e7f8f6072c6f1476 [SPARC] Save all registers for foreign calls diff -r 863c42893cc4 -r 9299e71df12a graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Sat Feb 21 22:26:55 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Sun Feb 22 07:42:06 2015 +0100 @@ -93,10 +93,14 @@ @SuppressWarnings("unused") private static Value[] createNativeABICallerSaveRegisters(HotSpotVMConfig config, RegisterConfig regConfig) { - Register[] calleeSaveRegisters = regConfig.getCallerSaveRegisters(); - Value[] nativeABICallerSaveRegisters = new Value[calleeSaveRegisters.length]; - for (int i = 0; i < calleeSaveRegisters.length; i++) { - nativeABICallerSaveRegisters[i] = calleeSaveRegisters[i].asValue(); + List callerSaveRegisters = new ArrayList<>(); + Collections.addAll(callerSaveRegisters, regConfig.getCallerSaveRegisters()); + // TODO: Saving callee saved registers as well seems unneccessary, however as of now it does + // not work without; needs further investigation + Collections.addAll(callerSaveRegisters, regConfig.getCalleeSaveLayout().registers); + Value[] nativeABICallerSaveRegisters = new Value[callerSaveRegisters.size()]; + for (int i = 0; i < callerSaveRegisters.size(); i++) { + nativeABICallerSaveRegisters[i] = callerSaveRegisters.get(i).asValue(); } return nativeABICallerSaveRegisters; } diff -r 863c42893cc4 -r 9299e71df12a graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Sat Feb 21 22:26:55 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Sun Feb 22 07:42:06 2015 +0100 @@ -92,7 +92,8 @@ private final Register[] fpuParameterRegisters = {f0, f1, f2, f3, f4, f5, f6, f7}; // @formatter:off private final Register[] callerSaveRegisters = - {g1, g3, g4, g5, o0, o1, o2, o3, o4, o5, o7, + {g1, g2, g3, g4, g5, g6, g7, + o0, o1, o2, o3, o4, o5, o7, f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23,