changeset 19531:9299e71df12a

[SPARC] Save all registers for foreign calls
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Sun, 22 Feb 2015 07:42:06 +0100
parents 863c42893cc4
children fac54d234f30
files graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java
diffstat 2 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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<Register> 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;
     }
--- 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,