Chromium Code Reviews| Index: src/IceRegistersARM32.h |
| diff --git a/src/IceRegistersARM32.h b/src/IceRegistersARM32.h |
| index 0caa9ccdf4e225ccfd0e40bcd6838c36bbb4011b..46cf2efa2bc05b169963da29db2b7fd312a73e67 100644 |
| --- a/src/IceRegistersARM32.h |
| +++ b/src/IceRegistersARM32.h |
| @@ -146,29 +146,41 @@ public: |
| #undef X |
| }; |
| - static inline GPRRegister getEncodedGPR(int32_t RegNum) { |
| - assert(Reg_GPR_First <= RegNum); |
| - assert(RegNum <= Reg_GPR_Last); |
| + static inline bool isRegisterDefined(int32_t RegNum) { |
|
Jim Stichnoth
2016/01/06 18:39:14
This function bothers me (perhaps more than it sho
Karl
2016/01/07 00:00:35
I agree that the check is an assertion, since enum
|
| + return RegNum >= 0 && RegNum < Reg_NUM; |
| + } |
| + |
| + static inline bool isGPRegister(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| + return Table[RegNum].IsGPR; |
| + } |
| + |
| + static inline SizeT getNumGPRegs() { |
|
Jim Stichnoth
2016/01/06 18:39:14
Can these getNumRegs() functions be defined as con
Karl
2016/01/07 00:00:35
Done.
|
| + return Reg_GPR_Last + 1 - Reg_GPR_First; |
| + } |
| + |
| + static inline GPRRegister getEncodedGPReg(int32_t RegNum) { |
| + assert(isGPRegister(RegNum)); |
| return GPRRegister(Table[RegNum].Encoding); |
| } |
| static inline GPRRegister getI64PairFirstGPRNum(int32_t RegNum) { |
| - assert(Reg_I64PAIR_First <= RegNum); |
| - assert(RegNum <= Reg_I64PAIR_Last); |
| + assert(isI64RegisterPair(RegNum)); |
| return GPRRegister(Table[RegNum].Encoding); |
| } |
| static inline GPRRegister getI64PairSecondGPRNum(int32_t RegNum) { |
| - assert(Reg_I64PAIR_First <= RegNum); |
| - assert(RegNum <= Reg_I64PAIR_Last); |
| + assert(isI64RegisterPair(RegNum)); |
| return GPRRegister(Table[RegNum].Encoding + 1); |
| } |
| static inline bool isI64RegisterPair(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| return Table[RegNum].IsI64Pair; |
| } |
| static inline bool isEncodedSReg(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| return Table[RegNum].IsFP32; |
| } |
| @@ -177,25 +189,38 @@ public: |
| } |
| static inline SRegister getEncodedSReg(int32_t RegNum) { |
| - assert(Reg_SREG_First <= RegNum); |
| - assert(RegNum <= Reg_SREG_Last); |
| + assert(isEncodedSReg(RegNum)); |
| return SRegister(Table[RegNum].Encoding); |
| } |
| + // Note: D registers are listed from largest to smallest. |
|
Jim Stichnoth
2016/01/06 18:39:14
Move this down to getNumDRegs(), assuming it's sti
Karl
2016/01/07 00:00:35
Removed. No longer applicable.
|
| + |
| + static inline bool isEncodedDReg(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| + return Table[RegNum].IsFP64; |
| + } |
| + |
| + static inline SizeT getNumDRegs() { |
| + return Reg_DREG_First + 1 - Reg_DREG_Last; |
| + } |
| + |
| static inline DRegister getEncodedDReg(int32_t RegNum) { |
| - assert(Reg_DREG_First <= RegNum); |
| - assert(RegNum <= Reg_DREG_Last); |
| + assert(isEncodedDReg(RegNum)); |
| return DRegister(Table[RegNum].Encoding); |
| } |
| + static inline bool isEncodedQReg(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| + return Table[RegNum].IsVec128; |
| + } |
| + |
| static inline QRegister getEncodedQReg(int32_t RegNum) { |
| - assert(Reg_QREG_First <= RegNum); |
| - assert(RegNum <= Reg_QREG_Last); |
| + assert(isEncodedQReg(RegNum)); |
| return QRegister(Table[RegNum].Encoding); |
| } |
| - static inline IceString getRegName(SizeT RegNum) { |
| - assert(RegNum < Reg_NUM); |
| + static inline IceString getRegName(int32_t RegNum) { |
| + assert(isRegisterDefined(RegNum)); |
| return Table[RegNum].Name; |
| } |
| }; |