--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.sparc/src/org/graalvm/compiler/replacements/sparc/SPARCGraphBuilderPlugins.java 2020-05-01 02:31:18.286242572 -0700 +++ /dev/null 2020-03-09 18:57:19.455001459 -0700 @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -package org.graalvm.compiler.replacements.sparc; - -import static org.graalvm.compiler.replacements.StandardGraphBuilderPlugins.registerPlatformSpecificUnsafePlugins; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.COS; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.EXP; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG10; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.SIN; -import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.TAN; - -import org.graalvm.compiler.nodes.ValueNode; -import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins; -import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext; -import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin; -import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins; -import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration; -import org.graalvm.compiler.nodes.spi.Replacements; -import org.graalvm.compiler.replacements.IntegerSubstitutions; -import org.graalvm.compiler.replacements.LongSubstitutions; -import org.graalvm.compiler.replacements.nodes.BinaryMathIntrinsicNode; -import org.graalvm.compiler.replacements.nodes.BitCountNode; -import org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode; -import org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation; - -import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.ResolvedJavaMethod; - -public class SPARCGraphBuilderPlugins { - - public static void register(Plugins plugins, Replacements replacements, boolean explicitUnsafeNullChecks) { - InvocationPlugins invocationPlugins = plugins.getInvocationPlugins(); - invocationPlugins.defer(new Runnable() { - @Override - public void run() { - registerIntegerLongPlugins(invocationPlugins, IntegerSubstitutions.class, JavaKind.Int, replacements); - registerIntegerLongPlugins(invocationPlugins, LongSubstitutions.class, JavaKind.Long, replacements); - registerMathPlugins(invocationPlugins); - // This is temporarily disabled until we implement correct emitting of the CAS - // instructions of the proper width. - registerPlatformSpecificUnsafePlugins(invocationPlugins, replacements, explicitUnsafeNullChecks, - new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}); - } - }); - } - - private static void registerIntegerLongPlugins(InvocationPlugins plugins, Class substituteDeclaringClass, JavaKind kind, Replacements replacements) { - Class declaringClass = kind.toBoxedJavaClass(); - Class type = kind.toJavaClass(); - Registration r = new Registration(plugins, declaringClass, replacements); - r.registerMethodSubstitution(substituteDeclaringClass, "numberOfLeadingZeros", type); - r.registerMethodSubstitution(substituteDeclaringClass, "numberOfTrailingZeros", type); - - r.register1("bitCount", type, new InvocationPlugin() { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Int, b.append(new BitCountNode(value).canonical(null))); - return true; - } - }); - } - - private static void registerMathPlugins(InvocationPlugins plugins) { - Registration r = new Registration(plugins, Math.class); - registerUnaryMath(r, "sin", SIN); - registerUnaryMath(r, "cos", COS); - registerUnaryMath(r, "tan", TAN); - registerUnaryMath(r, "exp", EXP); - registerUnaryMath(r, "log", LOG); - registerUnaryMath(r, "log10", LOG10); - r.register2("pow", Double.TYPE, Double.TYPE, new InvocationPlugin() { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode x, ValueNode y) { - b.push(JavaKind.Double, b.append(BinaryMathIntrinsicNode.create(x, y, BinaryMathIntrinsicNode.BinaryOperation.POW))); - return true; - } - }); - } - - private static void registerUnaryMath(Registration r, String name, UnaryOperation operation) { - r.register1(name, Double.TYPE, new InvocationPlugin() { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Double, b.append(UnaryMathIntrinsicNode.create(value, operation))); - return true; - } - }); - } -}