# HG changeset patch # User Andreas Woess # Date 1425041761 -3600 # Node ID 4efe39251424b7fa61d931c44e44633cf0026504 # Parent 7d5a0223dc44895459ed8b4a71290674c6f6fc37 Truffle: add ExactMath.multiplyHigh[Unsigned] graph builder invocation plugins diff -r 7d5a0223dc44 -r 4efe39251424 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Feb 27 13:55:56 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Feb 27 13:56:01 2015 +0100 @@ -86,42 +86,38 @@ public static void registerExactMathPlugins(MetaAccessProvider metaAccess, InvocationPlugins plugins) { Registration r = new Registration(plugins, metaAccess, ExactMath.class); - r.register2("addExact", Integer.TYPE, Integer.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Int.getStackKind(), builder.append(new IntegerAddExactNode(x, y))); - return true; - } - }); - r.register2("addExact", Long.TYPE, Long.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Long, builder.append(new IntegerAddExactNode(x, y))); - return true; - } - }); - r.register2("subtractExact", Integer.TYPE, Integer.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Int.getStackKind(), builder.append(new IntegerSubExactNode(x, y))); - return true; - } - }); - r.register2("subtractExact", Long.TYPE, Long.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Long, builder.append(new IntegerSubExactNode(x, y))); - return true; - } - }); - r.register2("multiplyExact", Integer.TYPE, Integer.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Int.getStackKind(), builder.append(new IntegerMulExactNode(x, y))); - return true; - } - }); - r.register2("multiplyExact", Long.TYPE, Long.TYPE, new InvocationPlugin() { - public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { - builder.push(Kind.Long, builder.append(new IntegerMulExactNode(x, y))); - return true; - } - }); + for (Kind kind : new Kind[]{Kind.Int, Kind.Long}) { + r.register2("addExact", kind.toJavaClass(), kind.toJavaClass(), new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { + builder.push(kind.getStackKind(), builder.append(new IntegerAddExactNode(x, y))); + return true; + } + }); + r.register2("subtractExact", kind.toJavaClass(), kind.toJavaClass(), new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { + builder.push(kind.getStackKind(), builder.append(new IntegerSubExactNode(x, y))); + return true; + } + }); + r.register2("multiplyExact", kind.toJavaClass(), kind.toJavaClass(), new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { + builder.push(kind.getStackKind(), builder.append(new IntegerMulExactNode(x, y))); + return true; + } + }); + r.register2("multiplyHigh", kind.toJavaClass(), kind.toJavaClass(), new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { + builder.push(kind.getStackKind(), builder.append(new IntegerMulHighNode(x, y))); + return true; + } + }); + r.register2("multiplyHighUnsigned", kind.toJavaClass(), kind.toJavaClass(), new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode x, ValueNode y) { + builder.push(kind.getStackKind(), builder.append(new UnsignedMulHighNode(x, y))); + return true; + } + }); + } } public static void registerCompilerDirectivesPlugins(MetaAccessProvider metaAccess, InvocationPlugins plugins) {