changeset 18300:9734f97bddfe

Intrinsify Math.abs(float).
author Roland Schatz <roland.schatz@oracle.com>
date Fri, 07 Nov 2014 10:58:57 +0100
parents 1b1569d182f9
children bf586af6fa0c
files graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MathSubstitutionsX86.java
diffstat 2 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Fri Nov 07 10:58:50 2014 +0100
+++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Fri Nov 07 10:58:57 2014 +0100
@@ -1006,7 +1006,16 @@
     @Override
     public Value emitMathAbs(Value input) {
         Variable result = newVariable(LIRKind.derive(input));
-        append(new BinaryRegConst(DAND, result, asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+        switch (input.getKind()) {
+            case Float:
+                append(new BinaryRegConst(FAND, result, asAllocatable(input), JavaConstant.forFloat(Float.intBitsToFloat(0x7FFFFFFF))));
+                break;
+            case Double:
+                append(new BinaryRegConst(DAND, result, asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL))));
+                break;
+            default:
+                throw GraalInternalError.shouldNotReachHere();
+        }
         return result;
     }
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MathSubstitutionsX86.java	Fri Nov 07 10:58:50 2014 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MathSubstitutionsX86.java	Fri Nov 07 10:58:57 2014 +0100
@@ -40,6 +40,11 @@
     private static final double PI_4 = Math.PI / 4;
 
     @MethodSubstitution
+    public static float abs(float x) {
+        return AbsNode.abs(x);
+    }
+
+    @MethodSubstitution
     public static double abs(double x) {
         return AbsNode.abs(x);
     }