Mercurial > hg > truffle
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); }