changeset 3508:8dbbef133869

Intrinsify Math.abs(double) as well.
author Peter Hofer <peter.hofer@jku.at>
date Mon, 08 Aug 2011 18:00:16 +0200
parents 9afae29fefeb
children 28ba2439034f
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MathIntrinsic.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java
diffstat 3 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MathIntrinsic.java	Mon Aug 08 17:42:55 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MathIntrinsic.java	Mon Aug 08 18:00:16 2011 +0200
@@ -29,7 +29,7 @@
 public class MathIntrinsic extends FloatingNode {
 
     public enum Operation {
-        SQRT
+        ABS, SQRT,
     }
 
     @Input private Value x;
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java	Mon Aug 08 17:42:55 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java	Mon Aug 08 18:00:16 2011 +0200
@@ -466,14 +466,19 @@
 
     @Override
     public void visitMathIntrinsic(MathIntrinsic node) {
+        assert node.kind == CiKind.Double;
         LIRItem opd = new LIRItem(node.x(), this);
         opd.setDestroysRegister();
         opd.loadItem();
         CiVariable dest = createResultVariable(node);
         switch (node.operation()) {
+            case ABS:
+                lir.abs(opd.result(), dest, CiValue.IllegalValue);
+                break;
             case SQRT:
                 lir.sqrt(opd.result(), dest, CiValue.IllegalValue);
                 break;
+
             default:
                 throw Util.shouldNotReachHere();
         }
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Mon Aug 08 17:42:55 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Mon Aug 08 18:00:16 2011 +0200
@@ -30,6 +30,7 @@
 import com.oracle.max.graal.compiler.graph.*;
 import com.oracle.max.graal.compiler.ir.*;
 import com.oracle.max.graal.compiler.ir.Conditional.ConditionalStructure;
+import com.oracle.max.graal.compiler.ir.MathIntrinsic.Operation;
 import com.oracle.max.graal.compiler.value.*;
 import com.oracle.max.graal.graph.*;
 import com.oracle.max.graal.runtime.nodes.*;
@@ -603,10 +604,16 @@
                     intrinsicGraphs.put(method, graph);
                 }
             } else if (holderName.equals("Ljava/lang/Math;")) {
-                if (fullName.equals("sqrt(D)D")) {
+                MathIntrinsic.Operation op = null;
+                if (fullName.equals("abs(D)D")) {
+                    op = MathIntrinsic.Operation.ABS;
+                } else if (fullName.equals("sqrt(D)D")) {
+                    op = MathIntrinsic.Operation.SQRT;
+                }
+                if (op != null) {
                     CompilerGraph graph = new CompilerGraph(this);
                     Local value = new Local(CiKind.Double, 0, graph);
-                    MathIntrinsic min = new MathIntrinsic(value, MathIntrinsic.Operation.SQRT, graph);
+                    MathIntrinsic min = new MathIntrinsic(value, op, graph);
                     Return ret = new Return(min, graph);
                     graph.start().setNext(ret);
                     graph.setReturn(ret);