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; |
} |
}; |