changeset 21486:95647f646143

[SPARC] Make CAS delayable
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Fri, 22 May 2015 11:41:03 +0200
parents b6ebdfc9f611
children 6b59a0656841
files graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java
diffstat 1 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java	Fri May 22 11:29:13 2015 +0200
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java	Fri May 22 11:41:03 2015 +0200
@@ -466,8 +466,8 @@
 
         @Override
         public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) {
-            move(crb, masm, result, newValue, delayedControlTransfer);
-            compareAndSwap(masm, address, cmpValue, result);
+            move(crb, masm, result, newValue, SPARCDelayedControlTransfer.DUMMY);
+            compareAndSwap(crb, masm, address, cmpValue, result, delayedControlTransfer);
         }
     }
 
@@ -779,7 +779,9 @@
         }
     }
 
-    protected static void compareAndSwap(SPARCMacroAssembler masm, AllocatableValue address, AllocatableValue cmpValue, AllocatableValue newValue) {
+    protected static void compareAndSwap(CompilationResultBuilder crb, SPARCMacroAssembler masm, AllocatableValue address, AllocatableValue cmpValue, AllocatableValue newValue,
+                    SPARCDelayedControlTransfer delay) {
+        delay.emitControlTransfer(crb, masm);
         switch (cmpValue.getKind()) {
             case Int:
                 masm.cas(asRegister(address), asRegister(cmpValue), asRegister(newValue));