< prev index next >

src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/ValueUtil.java

Print this page

        

*** 20,32 **** * or visit www.oracle.com if you need additional information or have any * questions. */ package jdk.vm.ci.code; - import java.util.ArrayList; - import java.util.List; - import jdk.vm.ci.meta.AllocatableValue; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaValue; import jdk.vm.ci.meta.PlatformKind; import jdk.vm.ci.meta.Value; --- 20,29 ----
*** 109,183 **** throw new InternalError("needed: " + kind + " got: " + value.getPlatformKind()); } else { return asRegister(value); } } - - public static boolean sameRegister(Value v1, Value v2) { - return isRegister(v1) && isRegister(v2) && asRegister(v1).equals(asRegister(v2)); - } - - public static boolean sameRegister(Value v1, Value v2, Value v3) { - return sameRegister(v1, v2) && sameRegister(v1, v3); - } - - /** - * Checks if all the provided values are different physical registers. The parameters can be - * either {@link Register registers}, {@link Value values} or arrays of them. All values that - * are not {@link RegisterValue registers} are ignored. - */ - public static boolean differentRegisters(Object... values) { - List<Register> registers = collectRegisters(values, new ArrayList<Register>()); - for (int i = 1; i < registers.size(); i++) { - Register r1 = registers.get(i); - for (int j = 0; j < i; j++) { - Register r2 = registers.get(j); - if (r1.equals(r2)) { - return false; - } - } - } - return true; - } - - private static List<Register> collectRegisters(Object[] values, List<Register> registers) { - for (Object o : values) { - if (o instanceof Register) { - registers.add((Register) o); - } else if (o instanceof Value) { - if (isRegister((Value) o)) { - registers.add(asRegister((Value) o)); - } - } else if (o instanceof Object[]) { - collectRegisters((Object[]) o, registers); - } else { - throw new IllegalArgumentException("Not a Register or Value: " + o); - } - } - return registers; - } - - /** - * Subtract sets of registers (x - y). - * - * @param x a set of register to subtract from. - * @param y a set of registers to subtract. - * @return resulting set of registers (x - y). - */ - public static Value[] subtractRegisters(Value[] x, Value[] y) { - ArrayList<Value> result = new ArrayList<>(x.length); - for (Value i : x) { - boolean append = true; - for (Value j : y) { - if (ValueUtil.sameRegister(i, j)) { - append = false; - break; - } - } - if (append) { - result.add(i); - } - } - Value[] resultArray = new Value[result.size()]; - return result.toArray(resultArray); - } } --- 106,111 ----
< prev index next >