Chromium Code Reviews| Index: src/IceRegistersMIPS32.h |
| diff --git a/src/IceRegistersMIPS32.h b/src/IceRegistersMIPS32.h |
| index 2e39ce683ebfba19aca76490420e3ffb7cb73265..b54a6e9e4fe54dee118e8b857bd4bb830c8c451b 100644 |
| --- a/src/IceRegistersMIPS32.h |
| +++ b/src/IceRegistersMIPS32.h |
| @@ -89,22 +89,32 @@ static inline bool isFPRReg(RegNumT RegNum) { |
| const char *getRegName(RegNumT RegNum); |
| -static inline RegNumT getI64PairFirstGPRNum(RegNumT RegNum) { |
| - // For now it works only for argument register pairs |
| - // TODO(mohit.bhakkad): Change this to support all the register pairs once we |
| - // have table-driven approach ready |
| - assert(RegNum == Reg_A0A1 || RegNum == Reg_A2A3); |
| - return (RegNum == RegMIPS32::Reg_A0A1) ? RegMIPS32::Reg_A0 |
| - : RegMIPS32::Reg_A2; |
| +static inline RegNumT get64PairFirstRegNum(RegNumT RegNum) { |
| + assert(unsigned(RegNum) >= Reg_I64PAIR_First && |
|
Jim Stichnoth
2016/08/01 20:14:29
Instead of:
assert(a && b);
do:
assert(a);
a
|
| + unsigned(RegNum) <= Reg_F64PAIR_Last); |
| + if (unsigned(RegNum) >= Reg_F64PAIR_First && |
| + unsigned(RegNum) <= Reg_F64PAIR_Last) |
| + return RegNumT::fixme(((RegNum - Reg_F64PAIR_First) * 2) + |
| + unsigned(Reg_FPR_First)); |
| + else if (unsigned(RegNum) >= Reg_I64PAIR_First && |
|
Jim Stichnoth
2016/08/01 20:14:29
change "else if" to "if" because of the unconditio
|
| + unsigned(RegNum) <= Reg_T8T9) |
| + return RegNumT::fixme(((RegNum - Reg_I64PAIR_First) * 2) + |
| + unsigned(Reg_V0)); |
| + return RegMIPS32::Reg_LO; |
| } |
| -static inline RegNumT getI64PairSecondGPRNum(RegNumT RegNum) { |
| - // For now it works only for argument register pairs |
| - // TODO(mohit.bhakkad): Change this to support all the register pairs once we |
| - // have table-driven approach ready |
| - assert(RegNum == Reg_A0A1 || RegNum == Reg_A2A3); |
| - return (RegNum == RegMIPS32::Reg_A0A1) ? RegMIPS32::Reg_A1 |
| - : RegMIPS32::Reg_A3; |
| +static inline RegNumT get64PairSecondRegNum(RegNumT RegNum) { |
| + assert(unsigned(RegNum) >= Reg_I64PAIR_First && |
| + unsigned(RegNum) <= Reg_F64PAIR_Last); |
| + if (unsigned(RegNum) >= Reg_F64PAIR_First && |
| + unsigned(RegNum) <= Reg_F64PAIR_Last) |
| + return RegNumT::fixme(((RegNum - Reg_F64PAIR_First) * 2) + |
| + unsigned(Reg_FPR_First) + 1); |
| + else if (unsigned(RegNum) >= Reg_I64PAIR_First && |
| + unsigned(RegNum) <= Reg_T8T9) |
| + return RegNumT::fixme(((RegNum - Reg_I64PAIR_First) * 2) + |
| + unsigned(Reg_V1)); |
| + return RegMIPS32::Reg_HI; |
| } |
| } // end of namespace RegMIPS32 |