Mercurial > hg > truffle
diff graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java @ 20858:9e8f6d379720
added InvocationPlugins to use recently exposed HotSpot math runtime functions
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 08 Apr 2015 22:57:48 +0200 |
parents | 3081a57f95fd |
children | dc58f4ca21c9 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java Wed Apr 08 22:53:08 2015 +0200 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java Wed Apr 08 22:57:48 2015 +0200 @@ -22,10 +22,12 @@ */ package com.oracle.graal.replacements.amd64; +import static com.oracle.graal.compiler.target.Backend.*; import static com.oracle.graal.replacements.amd64.AMD64MathIntrinsicNode.Operation.*; import sun.misc.*; import com.oracle.graal.amd64.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; import com.oracle.graal.graphbuilderconf.*; @@ -37,12 +39,12 @@ public class AMD64GraphBuilderPlugins { - public static void register(Plugins plugins, AMD64 arch) { + public static void register(Plugins plugins, ForeignCallsProvider foreignCalls, AMD64 arch) { InvocationPlugins invocationPlugins = plugins.getInvocationPlugins(); registerIntegerLongPlugins(invocationPlugins, IntegerSubstitutions.class, Kind.Int, arch); registerIntegerLongPlugins(invocationPlugins, LongSubstitutions.class, Kind.Long, arch); registerUnsafePlugins(invocationPlugins); - registerMathPlugins(invocationPlugins); + registerMathPlugins(invocationPlugins, foreignCalls); } private static void registerIntegerLongPlugins(InvocationPlugins plugins, Class<?> substituteDeclaringClass, Kind kind, AMD64 arch) { @@ -81,7 +83,7 @@ } } - private static void registerMathPlugins(InvocationPlugins plugins) { + private static void registerMathPlugins(InvocationPlugins plugins, ForeignCallsProvider foreignCalls) { Registration r = new Registration(plugins, Math.class); r.register1("log", Double.TYPE, new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { @@ -99,6 +101,7 @@ r.registerMethodSubstitution(AMD64MathSubstitutions.class, "cos", double.class); r.registerMethodSubstitution(AMD64MathSubstitutions.class, "tan", double.class); r.registerMethodSubstitution(AMD64MathSubstitutions.class, "pow", double.class, double.class); + r.register1("exp", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_EXP)); } private static void registerUnsafePlugins(InvocationPlugins plugins) {