changeset 11288:857f22a4f627

Factor out arithmetic operations to separate LIR generator interface.
author Roland Schatz <roland.schatz@oracle.com>
date Mon, 12 Aug 2013 15:52:32 +0200
parents a09587890e58
children 2ad1435489d1
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java
diffstat 2 files changed, 68 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRGenerator.java	Mon Aug 12 15:52:32 2013 +0200
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2013, 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 com.oracle.graal.nodes.spi;
+
+import com.oracle.graal.api.meta.*;
+import com.oracle.graal.nodes.*;
+import com.oracle.graal.nodes.calc.*;
+
+/**
+ * This interface can be used to generate LIR for arithmetic operations.
+ */
+public interface ArithmeticLIRGenerator {
+
+    Value operand(ValueNode object);
+
+    Value setResult(ValueNode x, Value operand);
+
+    Value emitNegate(Value input);
+
+    Value emitAdd(Value a, Value b);
+
+    Value emitSub(Value a, Value b);
+
+    Value emitMul(Value a, Value b);
+
+    Value emitDiv(Value a, Value b, DeoptimizingNode deopting);
+
+    Value emitRem(Value a, Value b, DeoptimizingNode deopting);
+
+    Value emitUDiv(Value a, Value b, DeoptimizingNode deopting);
+
+    Value emitURem(Value a, Value b, DeoptimizingNode deopting);
+
+    Value emitAnd(Value a, Value b);
+
+    Value emitOr(Value a, Value b);
+
+    Value emitXor(Value a, Value b);
+
+    Value emitShl(Value a, Value b);
+
+    Value emitShr(Value a, Value b);
+
+    Value emitUShr(Value a, Value b);
+
+    Value emitConvert(ConvertNode.Op opcode, Value inputVal);
+}
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java	Mon Aug 12 11:56:35 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java	Mon Aug 12 15:52:32 2013 +0200
@@ -29,7 +29,7 @@
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.java.*;
 
-public interface LIRGeneratorTool {
+public interface LIRGeneratorTool extends ArithmeticLIRGenerator {
 
     TargetDescription target();
 
@@ -47,12 +47,8 @@
 
     RegisterAttributes attributes(Register register);
 
-    Value operand(ValueNode object);
-
     AllocatableValue newVariable(PlatformKind kind);
 
-    Value setResult(ValueNode x, Value operand);
-
     AllocatableValue emitMove(Value input);
 
     void emitMove(AllocatableValue dst, Value src);
@@ -65,36 +61,6 @@
 
     void emitStore(Kind kind, Value address, Value input, DeoptimizingNode deopting);
 
-    Value emitNegate(Value input);
-
-    Value emitAdd(Value a, Value b);
-
-    Value emitSub(Value a, Value b);
-
-    Value emitMul(Value a, Value b);
-
-    Value emitDiv(Value a, Value b, DeoptimizingNode deopting);
-
-    Value emitRem(Value a, Value b, DeoptimizingNode deopting);
-
-    Value emitUDiv(Value a, Value b, DeoptimizingNode deopting);
-
-    Value emitURem(Value a, Value b, DeoptimizingNode deopting);
-
-    Value emitAnd(Value a, Value b);
-
-    Value emitOr(Value a, Value b);
-
-    Value emitXor(Value a, Value b);
-
-    Value emitShl(Value a, Value b);
-
-    Value emitShr(Value a, Value b);
-
-    Value emitUShr(Value a, Value b);
-
-    Value emitConvert(ConvertNode.Op opcode, Value inputVal);
-
     void emitMembar(int barriers);
 
     void emitDeoptimize(DeoptimizationAction action, DeoptimizingNode deopting);