< 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 >