public int evaluate(int v1, int v2) { switch (value) { case SAME: case EQUAL: return (v1 == v2) ? TRUE : FALSE; case NOT_SAME: case NOT_EQUAL: return (v1 != v2) ? TRUE : FALSE; case GREATER:   return (v1 > v2)  ? TRUE : FALSE; case LESS:     return (v1 < v2) ? TRUE : FALSE; case GREATER_EQUAL: return (v1 >= v2)  ? TRUE : FALSE; case LESS_EQUAL:    return (v1 <= v2)  ? TRUE : FALSE; case LOWER: if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 < v2) ? TRUE : FALSE; else if (v1 < 0) return FALSE; else return TRUE; case LOWER_EQUAL: if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 <= v2) ? TRUE : FALSE; else if (v1 < 0) return FALSE; else return TRUE; case HIGHER: if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 > v2) ? TRUE : FALSE; else if (v1 < 0) return TRUE; else return FALSE; case HIGHER_EQUAL: if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 >= v2) ? TRUE : FALSE; else if (v1 < 0) return TRUE; else return FALSE;
public int evaluate(OPT_Operand v1, OPT_Operand v2) { if (v1.isAddressConstant()) { if (v2.isAddressConstant()) { return evaluate(v1.asAddressConstant().value, v2.asAddressConstant().value); } else if (v2.isNullConstant()) { return evaluate(v1.asAddressConstant().value, Address.zero()); } else if (v2.isIntConstant()) { return evaluate(v1.asAddressConstant().value, Address.fromIntSignExtend(v2.asIntConstant().value)); } } else if (v1.isIntConstant()) { if (v2.isIntConstant()) { return evaluate(v1.asIntConstant().value, v2.asIntConstant().value); } else if (v2.isNullConstant()) { return evaluate(v1.asIntConstant().value, 0); } else if (v2.isAddressConstant()) { return evaluate(Address.fromIntSignExtend(v1.asIntConstant().value), v2.asAddressConstant().value); } } else if (v1.isLongConstant()) { if (v2.isLongConstant()) { return evaluate(v1.asLongConstant().value, v2.asLongConstant().value); } } else if (v1.isFloatConstant()) { if (v2.isFloatConstant()) { return evaluate(v1.asFloatConstant().value, v2.asFloatConstant().value); } } else if (v1.isDoubleConstant()) { if (v2.isDoubleConstant()) { return evaluate(v1.asDoubleConstant().value, v2.asDoubleConstant().value); } } else if (v1.isStringConstant()) { if (v2.isStringConstant()) { if (isEQUAL()) { return (v1.asStringConstant().value == v2.asStringConstant().value) ? TRUE : FALSE; } else if (isNOT_EQUAL()) { return (v1.asStringConstant().value != v2.asStringConstant().value) ? TRUE : FALSE; } } else if (v2.isNullConstant() || (v2.isIntConstant() && v2.asIntConstant().value == 0)) { if (isEQUAL()) { return FALSE; } else if (isNOT_EQUAL()) { return TRUE; } } } else if (v1.isNullConstant()) { if (v2.isNullConstant()) { return evaluate(0, 0); } else if (v2.isIntConstant()) { return evaluate(0, v2.asIntConstant().value); } else if (v2.isAddressConstant()) { return evaluate(Address.zero(), v2.asAddressConstant().value); } else if (v2.isStringConstant()) { if (isEQUAL()) { return FALSE; } else if (isNOT_EQUAL()) { return TRUE; } }
  public int evaluate(int v1, int v2) {    switch (value) {    case SAME:    case EQUAL: return (v1 == v2) ? TRUE : FALSE;    case NOT_SAME:    case NOT_EQUAL: return (v1 != v2) ? TRUE : FALSE;    case GREATER:   return (v1 > v2)  ? TRUE : FALSE;    case LESS:     return (v1 < v2) ? TRUE : FALSE;    case GREATER_EQUAL: return (v1 >= v2)  ? TRUE : FALSE;    case LESS_EQUAL:    return (v1 <= v2)  ? TRUE : FALSE;    case LOWER:       if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 < v2) ? TRUE : FALSE;      else if (v1 < 0) return FALSE;      else return TRUE;    case LOWER_EQUAL:      if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 <= v2) ? TRUE : FALSE;      else if (v1 < 0) return FALSE;      else return TRUE;    case HIGHER:       if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 > v2) ? TRUE : FALSE;      else if (v1 < 0) return TRUE;      else return FALSE;    case HIGHER_EQUAL:      if ((v1 >= 0 && v2 >= 0) || (v1 < 0 && v2 < 0)) return (v1 >= v2) ? TRUE : FALSE;      else if (v1 < 0) return TRUE;      else return FALSE;    }    throw new OPT_OptimizingCompilerException("invalid condition " + this);  }