Index: src/IceRegistersMIPS32.h |
diff --git a/src/IceRegistersMIPS32.h b/src/IceRegistersMIPS32.h |
index 4e14387039e50429a97012ab31c4f72aa48622d0..023132c233e7f30cdd9a8b2485a0c1dfc97b7492 100644 |
--- a/src/IceRegistersMIPS32.h |
+++ b/src/IceRegistersMIPS32.h |
@@ -50,6 +50,18 @@ enum GPRRegister { |
Encoded_Not_GPR = -1 |
}; |
+/// An enum of FPR Registers. The enum value does match the encoding used |
+/// to binary encode register operands in instructions. |
+enum FPRRegister { |
+#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
+ isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+ \ |
+ Encoded_##val = encode, |
+ REGMIPS32_FPR_TABLE |
+#undef X |
+ Encoded_Not_FPR = -1 |
+}; |
+ |
// TODO(jvoung): Floating point and vector registers... |
Jim Stichnoth
2016/05/19 23:12:25
Probably this TODO should be someone else's. :)
obucinac
2016/05/27 11:13:18
Acknowledged.
|
// Need to model overlap and difference in encoding too. |
@@ -59,6 +71,22 @@ static inline GPRRegister getEncodedGPR(RegNumT RegNum) { |
return GPRRegister(RegNum - Reg_GPR_First); |
} |
+static inline bool isGPRReg(RegNumT RegNum) { |
+ return (int(Reg_GPR_First) <= int(RegNum)) && |
+ (unsigned(RegNum) <= Reg_GPR_Last); |
+} |
+ |
+static inline FPRRegister getEncodedFPR(RegNumT RegNum) { |
+ assert(int(Reg_FPR_First) <= int(RegNum)); |
+ assert(unsigned(RegNum) <= Reg_FPR_Last); |
+ return FPRRegister(RegNum - Reg_FPR_First); |
+} |
+ |
+static inline bool isFPRReg(RegNumT RegNum) { |
+ return (int(Reg_FPR_First) <= int(RegNum)) && |
+ (unsigned(RegNum) <= Reg_FPR_Last); |
+} |
+ |
const char *getRegName(RegNumT RegNum); |
} // end of namespace RegMIPS32 |