| Index: src/IceRegistersARM32.h
|
| diff --git a/src/IceRegistersARM32.h b/src/IceRegistersARM32.h
|
| index 0caa9ccdf4e225ccfd0e40bcd6838c36bbb4011b..8ea5b01e5c2fada24c35458f838f270c52eeb084 100644
|
| --- a/src/IceRegistersARM32.h
|
| +++ b/src/IceRegistersARM32.h
|
| @@ -146,56 +146,99 @@ public:
|
| #undef X
|
| };
|
|
|
| - static inline GPRRegister getEncodedGPR(int32_t RegNum) {
|
| - assert(Reg_GPR_First <= RegNum);
|
| - assert(RegNum <= Reg_GPR_Last);
|
| + static inline void assertRegisterDefined(int32_t RegNum) {
|
| + (void)RegNum;
|
| + assert(RegNum >= 0);
|
| + assert(RegNum < Reg_NUM);
|
| + }
|
| +
|
| + static inline bool isGPRegister(int32_t RegNum) {
|
| + assertRegisterDefined(RegNum);
|
| + return Table[RegNum].IsGPR;
|
| + }
|
| +
|
| + static constexpr inline SizeT getNumGPRegs() {
|
| + return 0
|
| +#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
|
| + isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| + +(isGPR)
|
| + REGARM32_TABLE
|
| +#undef X
|
| + ;
|
| + }
|
| +
|
| + 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) {
|
| + assertRegisterDefined(RegNum);
|
| return Table[RegNum].IsI64Pair;
|
| }
|
|
|
| static inline bool isEncodedSReg(int32_t RegNum) {
|
| + assertRegisterDefined(RegNum);
|
| return Table[RegNum].IsFP32;
|
| }
|
|
|
| - static inline SizeT getNumSRegs() {
|
| - return Reg_SREG_Last + 1 - Reg_SREG_First;
|
| + static constexpr inline SizeT getNumSRegs() {
|
| + return 0
|
| +#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
|
| + isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| + +(isFP32)
|
| + REGARM32_TABLE
|
| +#undef X
|
| + ;
|
| }
|
|
|
| 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);
|
| }
|
|
|
| + static inline bool isEncodedDReg(int32_t RegNum) {
|
| + assertRegisterDefined(RegNum);
|
| + return Table[RegNum].IsFP64;
|
| + }
|
| +
|
| + static constexpr inline SizeT getNumDRegs() {
|
| + return 0
|
| +#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
|
| + isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| + +(isFP64)
|
| + REGARM32_TABLE
|
| +#undef X
|
| + ;
|
| + }
|
| +
|
| 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) {
|
| + assertRegisterDefined(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) {
|
| + assertRegisterDefined(RegNum);
|
| return Table[RegNum].Name;
|
| }
|
| };
|
|
|