Index: src/mips/constants-mips.h |
diff --git a/src/mips/constants-mips.h b/src/mips/constants-mips.h |
index 37ac2336bfd184542e5ad5712bdaa5541878921e..5c006f5093afbf781e19e8231d061a374df1c03b 100644 |
--- a/src/mips/constants-mips.h |
+++ b/src/mips/constants-mips.h |
@@ -608,61 +608,79 @@ enum SecondaryField { |
// ----- Emulated conditions. |
// On MIPS we use this enum to abstract from conditional branch instructions. |
-// The 'U' prefix is used to specify unsigned comparisons. |
// Opposite conditions must be paired as odd/even numbers |
// because 'NegateCondition' function flips LSB to negate condition. |
+// CC values for any comparison involving equality has LS bit set. |
+// TODO(plind): remove unused conditions, and renumber. |
enum Condition { |
// Any value < 0 is considered no_condition. |
kNoCondition = -1, |
- overflow = 0, |
- no_overflow = 1, |
- Uless = 2, |
- Ugreater_equal = 3, |
- Uless_equal = 4, |
- Ugreater = 5, |
- equal = 6, |
- not_equal = 7, // Unordered or Not Equal. |
- negative = 8, |
- positive = 9, |
- parity_even = 10, |
- parity_odd = 11, |
- less = 12, |
- greater_equal = 13, |
- less_equal = 14, |
- greater = 15, |
+ // overflow = 0, |
+ // no_overflow = 1, |
+ |
+ lo = 2, // Unsigned less than (lower) |
+ hs = 3, // Unsigned greater than or equal (higher or same). |
+ hi = 4, // Unsigned greater than (higher). |
+ ls = 5, // Unsigned less than or equal (lower or same). |
+ ne = 6, // Unordered or Not Equal. |
+ eq = 7, // Equal. |
+ // mi = 8, |
+ // pl = 9, |
+ // parity_even = 10, |
+ // parity_odd = 11, |
+ lt = 12, // Less than. |
+ ge = 13, // Great than or equal. |
+ gt = 14, // Greater than. |
+ le = 15, // Less than or equal. |
ueq = 16, // Unordered or Equal. |
ogl = 17, // Ordered and Not Equal. |
cc_always = 18, |
// Aliases. |
- carry = Uless, |
- not_carry = Ugreater_equal, |
- zero = equal, |
- eq = equal, |
- not_zero = not_equal, |
- ne = not_equal, |
- nz = not_equal, |
- sign = negative, |
- not_sign = positive, |
- mi = negative, |
- pl = positive, |
- hi = Ugreater, |
- ls = Uless_equal, |
- ge = greater_equal, |
- lt = less, |
- gt = greater, |
- le = less_equal, |
- hs = Ugreater_equal, |
- lo = Uless, |
al = cc_always, |
- ult = Uless, |
- uge = Ugreater_equal, |
- ule = Uless_equal, |
- ugt = Ugreater, |
+ nz = ne, // TODO(plind): consider deleting nz |
+ |
+ // // TODO(plind): Currently unused aliases - delete. |
+ // carry = Uless, |
+ // not_carry = Ugreater_equal, |
+ // equal = eq, |
+ // zero = equal, |
+ // not_equal = ne, |
+ // not_zero = not_equal, |
+ |
+ // negative = mi, |
+ // positive = pl, |
+ // sign = negative, |
+ // not_sign = positive, |
+ |
+ // // TODO(plind): These aliases ARE used, and should likey be factored out. |
+ Ugreater = hi, |
+ Uless_equal = ls, |
+ greater_equal = ge, |
+ less = lt, |
+ greater = gt, |
+ less_equal = le, |
+ Ugreater_equal = hs, |
+ Uless = lo, |
+ |
+ // TODO(plind): understand these aliases for FP, do we need them? |
+ ult = lo, |
+ uge = hs, |
+ ule = ls, |
+ ugt = hi, |
+ |
cc_default = kNoCondition |
}; |
+// Conditions are assigned so LSB is set for condition including equality. |
+inline bool ConditionIncludesEquality(Condition cc) { |
+ DCHECK(cc != cc_always); |
+ // TODO(plind): consider DCHECK to validate LSB set properly. |
+ return (cc & 1); |
+} |
+ |
paul.l...
2015/09/04 03:45:24
This function is no longer needed. I had thought t
balazs.kilvady
2015/09/04 09:27:45
I think the unsused function should be removed but
|
+ |
// Returns the equivalent of !cc. |
// Negation of the default kNoCondition (-1) results in a non-default |
// no_condition value (-2). As long as tests for no_condition check |
@@ -709,22 +727,22 @@ inline Condition NegateFpuCondition(Condition cc) { |
// Commute a condition such that {a cond b == b cond' a}. |
inline Condition CommuteCondition(Condition cc) { |
switch (cc) { |
- case Uless: |
- return Ugreater; |
- case Ugreater: |
- return Uless; |
- case Ugreater_equal: |
- return Uless_equal; |
- case Uless_equal: |
- return Ugreater_equal; |
- case less: |
- return greater; |
- case greater: |
- return less; |
- case greater_equal: |
- return less_equal; |
- case less_equal: |
- return greater_equal; |
+ case lo: |
+ return hi; |
+ case hi: |
+ return lo; |
+ case hs: |
+ return ls; |
+ case ls: |
+ return hs; |
+ case lt: |
+ return gt; |
+ case gt: |
+ return lt; |
+ case ge: |
+ return le; |
+ case le: |
+ return ge; |
default: |
return cc; |
} |