# HG changeset patch # User Josef Eisl # Date 1416414691 -3600 # Node ID 6014e40b07f8fff95fd9afc9e52d82de608c58dd # Parent 1d2e382d825990b1b522c109dd132f673658f018 SPARC: fix deoptimization rescue slot handling. diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerationResult.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerationResult.java Wed Nov 19 14:36:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerationResult.java Wed Nov 19 17:31:31 2014 +0100 @@ -53,9 +53,6 @@ } StackSlot getDeoptimizationRescueSlot() { - if (deoptimizationRescueSlot == null) { - return null; - } return deoptimizationRescueSlot; } diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Wed Nov 19 14:36:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Wed Nov 19 17:31:31 2014 +0100 @@ -75,7 +75,7 @@ @Override public FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig) { RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; - return new FrameMapBuilderImpl(newFrameMap(registerConfigNonNull), getCodeCache(), registerConfigNonNull); + return new SPARCFrameMapBuilder(newFrameMap(registerConfigNonNull), getCodeCache(), registerConfigNonNull); } @Override diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Wed Nov 19 14:36:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Wed Nov 19 17:31:31 2014 +0100 @@ -22,14 +22,12 @@ */ package com.oracle.graal.hotspot.sparc; -import static com.oracle.graal.api.code.ValueUtil.*; - import java.util.*; import com.oracle.graal.api.code.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.*; +import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.framemap.*; import com.oracle.graal.lir.gen.*; @@ -40,7 +38,7 @@ * deoptimization. The return address slot in the callee is overwritten with the address of a * deoptimization stub. */ - private VirtualStackSlot deoptimizationRescueSlot; + private StackSlot deoptimizationRescueSlot; private final Object stub; /** @@ -55,14 +53,10 @@ } StackSlot getDeoptimizationRescueSlot() { - if (deoptimizationRescueSlot == null) { - return null; - } - assert isStackSlot(deoptimizationRescueSlot); - return asStackSlot(deoptimizationRescueSlot); + return deoptimizationRescueSlot; } - public final void setDeoptimizationRescueSlot(VirtualStackSlot stackSlot) { + public final void setDeoptimizationRescueSlot(StackSlot stackSlot) { this.deoptimizationRescueSlot = stackSlot; } diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Nov 19 14:36:01 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Nov 19 17:31:31 2014 +0100 @@ -102,7 +102,7 @@ super.beforeRegisterAllocation(); boolean hasDebugInfo = getResult().getLIR().hasDebugInfo(); if (hasDebugInfo) { - ((SPARCHotSpotLIRGenerationResult) getResult()).setDeoptimizationRescueSlot(getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(Kind.Long))); + ((SPARCHotSpotLIRGenerationResult) getResult()).setDeoptimizationRescueSlot(((SPARCFrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot()); } } diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Wed Nov 19 14:36:01 2014 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Wed Nov 19 17:31:31 2014 +0100 @@ -35,7 +35,7 @@ * *
  *   Base       Contents
- *
+ * 
  *            :                                :  -----
  *   caller   | incoming overflow argument n   |    ^
  *   frame    :     ...                        :    | positive
@@ -131,4 +131,9 @@
     public boolean frameNeedsAllocating() {
         return super.frameNeedsAllocating() || spillSize > 0;
     }
+
+    public StackSlot allocateDeoptimizationRescueSlot() {
+        assert spillSize == initialSpillSize : "Deoptimization rescue slot must be the first stack slot";
+        return allocateSpillSlot(LIRKind.value(Kind.Long));
+    }
 }
diff -r 1d2e382d8259 -r 6014e40b07f8 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMapBuilder.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMapBuilder.java	Wed Nov 19 17:31:31 2014 +0100
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.lir.sparc;
+
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.lir.framemap.*;
+
+public class SPARCFrameMapBuilder extends FrameMapBuilderImpl {
+
+    public SPARCFrameMapBuilder(FrameMap frameMap, CodeCacheProvider codeCache, RegisterConfig registerConfig) {
+        super(frameMap, codeCache, registerConfig);
+    }
+
+    public StackSlot allocateDeoptimizationRescueSlot() {
+        return ((SPARCFrameMap) frameMap).allocateDeoptimizationRescueSlot();
+    }
+}