# HG changeset patch # User Peter Hofer # Date 1312819216 -7200 # Node ID 8dbbef133869d294d671605ea325a5d5e490d7f3 # Parent 9afae29fefebacd8e3a8b1c1a999c06ecced86d6 Intrinsify Math.abs(double) as well. diff -r 9afae29fefeb -r 8dbbef133869 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MathIntrinsic.java --- 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; diff -r 9afae29fefeb -r 8dbbef133869 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java --- 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(); } diff -r 9afae29fefeb -r 8dbbef133869 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java --- 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);