Mercurial > hg > graal-jvmci-8
changeset 17368:a613bd4e6f67
Generic getters in ArithmeticOpTable.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Wed, 08 Oct 2014 12:18:47 +0200 |
parents | 08f69da64487 |
children | b3c10156d3d7 |
files | graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java |
diffstat | 1 files changed, 61 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Wed Oct 08 12:16:05 2014 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Wed Oct 08 12:18:47 2014 +0200 @@ -22,6 +22,10 @@ */ package com.oracle.graal.compiler.common.type; +import static com.oracle.graal.compiler.common.type.ArithmeticOpTable.IntegerConvertOp.*; + +import java.util.stream.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; @@ -81,10 +85,6 @@ FloatConvertOp[] floatConvert = new FloatConvertOp[FloatConvert.values().length]; for (Op op : ops) { - if (op == null) { - continue; - } - if (op instanceof BinaryOp) { BinaryOp binary = (BinaryOp) op; switch (binary.getOperator()) { @@ -168,6 +168,12 @@ return new ArithmeticOpTable(neg, add, sub, mul, div, rem, not, and, or, xor, zeroExtend, signExtend, narrow, floatConvert); } + public Stream<Op> getAllOps() { + Stream<Op> ops = Stream.of(neg, add, sub, mul, div, rem, not, and, or, xor, zeroExtend, signExtend, narrow); + Stream<Op> floatOps = Stream.of(floatConvert); + return Stream.concat(ops, floatOps).filter(op -> op != null); + } + private ArithmeticOpTable(UnaryOp neg, BinaryOp add, BinaryOp sub, BinaryOp mul, BinaryOp div, BinaryOp rem, UnaryOp not, BinaryOp and, BinaryOp or, BinaryOp xor, IntegerConvertOp zeroExtend, IntegerConvertOp signExtend, IntegerConvertOp narrow, FloatConvertOp[] floatConvert) { this.neg = neg; @@ -186,6 +192,57 @@ this.floatConvert = floatConvert; } + public UnaryOp getUnaryOp(UnaryOp op) { + switch (op.getOperator()) { + case '-': + return getNeg(); + case '~': + return getNot(); + default: + return getFloatConvertOp((FloatConvertOp) op); + } + } + + public BinaryOp getBinaryOp(BinaryOp op) { + switch (op.getOperator()) { + case '+': + return getAdd(); + case '-': + return getSub(); + case '*': + return getMul(); + case '/': + return getDiv(); + case '%': + return getRem(); + case '&': + return getAnd(); + case '|': + return getOr(); + case '^': + return getXor(); + default: + throw GraalInternalError.shouldNotReachHere("unknown binary operator " + op); + } + } + + public IntegerConvertOp getIntegerConvertOp(IntegerConvertOp op) { + switch (op.getOperator()) { + case ZERO_EXTEND: + return getZeroExtend(); + case SIGN_EXTEND: + return getSignExtend(); + case NARROW: + return getNarrow(); + default: + throw GraalInternalError.shouldNotReachHere("unknown integer convert operator " + op); + } + } + + public FloatConvertOp getFloatConvertOp(FloatConvertOp op) { + return getFloatConvert(op.getFloatConvert()); + } + /** * Describes the unary negation operation. */