changeset 9505:d48b7a4b93e9

Backed out changeset: 45a73cd19baa
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 02 May 2013 11:53:04 +0200
parents 789cfd153265
children 6703dca691d7
files graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64RestoreRegistersOp.java graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SaveRegistersOp.java
diffstat 3 files changed, 25 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Thu May 02 06:08:02 2013 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Thu May 02 11:53:04 2013 +0200
@@ -198,19 +198,13 @@
             if (stub.preservesRegisters()) {
                 Register[] savedRegisters = frameMap.registerConfig.getAllocatableRegisters();
                 savedRegisterLocations = new StackSlot[savedRegisters.length];
-                AMD64LIRInstruction[] savingMoves = new AMD64LIRInstruction[savedRegisters.length];
-                AMD64LIRInstruction[] restoringMoves = new AMD64LIRInstruction[savedRegisters.length];
                 for (int i = 0; i < savedRegisters.length; i++) {
                     PlatformKind kind = target.arch.getLargestStorableKind(savedRegisters[i].getRegisterCategory());
                     assert kind != Kind.Illegal;
                     StackSlot spillSlot = frameMap.allocateSpillSlot(kind);
                     savedRegisterLocations[i] = spillSlot;
-
-                    RegisterValue register = savedRegisters[i].asValue(kind);
-                    savingMoves[i] = createMove(spillSlot, register);
-                    restoringMoves[i] = createMove(register, spillSlot);
                 }
-                save = new AMD64SaveRegistersOp(savingMoves, restoringMoves, savedRegisterLocations);
+                save = new AMD64SaveRegistersOp(savedRegisters, savedRegisterLocations);
                 append(save);
             }
             append(new AMD64HotSpotCRuntimeCallPrologueOp());
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64RestoreRegistersOp.java	Thu May 02 06:08:02 2013 +0200
+++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64RestoreRegistersOp.java	Thu May 02 11:53:04 2013 +0200
@@ -52,9 +52,12 @@
 
     @Override
     public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
-        for (AMD64LIRInstruction restoringMove : save.restoringMoves) {
-            if (restoringMove != null) {
-                restoringMove.emitCode(tasm, masm);
+        Register[] savedRegisters = save.savedRegisters;
+        for (int i = 0; i < savedRegisters.length; i++) {
+            if (savedRegisters[i] != null) {
+                StackSlot input = slots[i];
+                RegisterValue result = savedRegisters[i].asValue(input.getKind());
+                AMD64Move.move(tasm, masm, result, input);
             }
         }
     }
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SaveRegistersOp.java	Thu May 02 06:08:02 2013 +0200
+++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SaveRegistersOp.java	Thu May 02 11:53:04 2013 +0200
@@ -30,7 +30,6 @@
 import com.oracle.graal.asm.amd64.*;
 import com.oracle.graal.lir.*;
 import com.oracle.graal.lir.LIRInstruction.Opcode;
-import com.oracle.graal.lir.StandardOp.MoveOp;
 import com.oracle.graal.lir.asm.*;
 
 /**
@@ -40,31 +39,29 @@
 public final class AMD64SaveRegistersOp extends AMD64RegistersPreservationOp {
 
     /**
-     * The move instructions for saving the registers.
+     * The registers (potentially) saved by this operation.
      */
-    protected final AMD64LIRInstruction[] savingMoves;
-
-    /**
-     * The move instructions for restoring the registers.
-     */
-    protected final AMD64LIRInstruction[] restoringMoves;
+    protected final Register[] savedRegisters;
 
     /**
      * The slots to which the registers are saved.
      */
     @Def(STACK) protected final StackSlot[] slots;
 
-    public AMD64SaveRegistersOp(AMD64LIRInstruction[] savingMoves, AMD64LIRInstruction[] restoringMoves, StackSlot[] slots) {
-        this.savingMoves = savingMoves;
-        this.restoringMoves = restoringMoves;
+    public AMD64SaveRegistersOp(Register[] savedRegisters, StackSlot[] slots) {
+        this.savedRegisters = savedRegisters;
         this.slots = slots;
     }
 
     @Override
     public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
-        for (AMD64LIRInstruction savingMove : savingMoves) {
-            if (savingMove != null) {
-                savingMove.emitCode(tasm, masm);
+        for (int i = 0; i < savedRegisters.length; i++) {
+            if (savedRegisters[i] != null) {
+                StackSlot result = slots[i];
+                RegisterValue input = savedRegisters[i].asValue(result.getKind());
+                AMD64Move.move(tasm, masm, result, input);
+            } else {
+                assert savedRegisters[i] == null;
             }
         }
     }
@@ -77,12 +74,10 @@
     @Override
     public void update(Set<Register> ignored, DebugInfo debugInfo, FrameMap frameMap) {
         int preserved = 0;
-        for (int i = 0; i < savingMoves.length; i++) {
-            if (savingMoves[i] != null) {
-                Register register = ValueUtil.asRegister(((MoveOp) savingMoves[i]).getInput());
-                if (ignored.contains(register)) {
-                    savingMoves[i] = null;
-                    restoringMoves[i] = null;
+        for (int i = 0; i < savedRegisters.length; i++) {
+            if (savedRegisters[i] != null) {
+                if (ignored.contains(savedRegisters[i])) {
+                    savedRegisters[i] = null;
                 } else {
                     preserved++;
                 }
@@ -92,9 +87,9 @@
             Register[] keys = new Register[preserved];
             int[] values = new int[keys.length];
             int mapIndex = 0;
-            for (int i = 0; i < savingMoves.length; i++) {
-                if (savingMoves[i] != null) {
-                    keys[mapIndex] = ValueUtil.asRegister(((MoveOp) savingMoves[i]).getInput());
+            for (int i = 0; i < savedRegisters.length; i++) {
+                if (savedRegisters[i] != null) {
+                    keys[mapIndex] = savedRegisters[i];
                     values[mapIndex] = frameMap.indexForStackSlot(slots[i]);
                     mapIndex++;
                 }