| Index: src/IceRegistersMIPS32.h
|
| diff --git a/src/IceRegistersMIPS32.h b/src/IceRegistersMIPS32.h
|
| index 2e39ce683ebfba19aca76490420e3ffb7cb73265..075df0348cb494d41dc04bcbc9199110668b70a4 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);
|
| + assert(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));
|
| + if (unsigned(RegNum) >= Reg_I64PAIR_First &&
|
| + 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);
|
| + assert(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);
|
| + 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
|
|
|