# HG changeset patch # User Doug Simon # Date 1428526668 -7200 # Node ID 9e8f6d379720b5df884ee936a3b0ae6fa00de3a9 # Parent 74f8a2ec0844c355ec078762af8fd29840648e71 added InvocationPlugins to use recently exposed HotSpot math runtime functions diff -r 74f8a2ec0844 -r 9e8f6d379720 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Wed Apr 08 22:53:08 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Wed Apr 08 22:57:48 2015 +0200 @@ -189,7 +189,7 @@ HotSpotHostForeignCallsProvider foreignCalls, HotSpotMetaAccessProvider metaAccess, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, HotSpotWordTypes wordTypes, HotSpotStampProvider stampProvider) { Plugins plugins = HotSpotGraphBuilderPlugins.create(runtime.getConfig(), wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); - AMD64GraphBuilderPlugins.register(plugins, (AMD64) target.arch); + AMD64GraphBuilderPlugins.register(plugins, foreignCalls, (AMD64) target.arch); return plugins; } @@ -269,15 +269,15 @@ } else { /* * System V Application Binary Interface, AMD64 Architecture Processor Supplement - * + * * Draft Version 0.96 - * + * * http://www.uclibc.org/docs/psABI-x86_64.pdf - * + * * 3.2.1 - * + * * ... - * + * * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 * through %r15 "belong" to the calling function and the called function is required to * preserve their values. In other words, a called function must preserve these diff -r 74f8a2ec0844 -r 9e8f6d379720 graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java --- 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) { diff -r 74f8a2ec0844 -r 9e8f6d379720 graal/com.oracle.graal.replacements.sparc/src/com/oracle/graal/replacements/sparc/SPARCGraphBuilderPlugins.java --- a/graal/com.oracle.graal.replacements.sparc/src/com/oracle/graal/replacements/sparc/SPARCGraphBuilderPlugins.java Wed Apr 08 22:53:08 2015 +0200 +++ b/graal/com.oracle.graal.replacements.sparc/src/com/oracle/graal/replacements/sparc/SPARCGraphBuilderPlugins.java Wed Apr 08 22:57:48 2015 +0200 @@ -53,6 +53,9 @@ r.register1("sin", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_SIN)); r.register1("cos", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_COS)); r.register1("tan", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_TAN)); + r.register1("exp", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_EXP)); + r.register1("log", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_LOG)); + r.register1("log10", Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_LOG10)); r.register2("pow", Double.TYPE, Double.TYPE, new ForeignCallPlugin(foreignCalls, ARITHMETIC_POW)); } }