Index: src/IceRegistersARM32.h |
diff --git a/src/IceRegistersARM32.h b/src/IceRegistersARM32.h |
index 3104f964fc2beb022120e72362c8744ed6b3b67c..5bd047f32c667cd50d8ebd386c2f6bb548b7b9a9 100644 |
--- a/src/IceRegistersARM32.h |
+++ b/src/IceRegistersARM32.h |
@@ -27,8 +27,8 @@ public: |
/// An enum of every register. The enum value may not match the encoding used |
/// to binary encode register operands in instructions. |
enum AllRegisters { |
-#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
+ isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
val, |
REGARM32_TABLE |
#undef X |
@@ -41,8 +41,8 @@ public: |
/// An enum of GPR Registers. The enum value does match the encoding used to |
/// binary encode register operands in instructions. |
enum GPRRegister { |
-#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
+ isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
Encoded_##val = encode, |
REGARM32_GPR_TABLE |
#undef X |
@@ -52,8 +52,8 @@ public: |
/// An enum of FP32 S-Registers. The enum value does match the encoding used |
/// to binary encode register operands in instructions. |
enum SRegister { |
-#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
+ isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
Encoded_##val = encode, |
REGARM32_FP32_TABLE |
#undef X |
@@ -63,8 +63,8 @@ public: |
/// An enum of FP64 D-Registers. The enum value does match the encoding used |
/// to binary encode register operands in instructions. |
enum DRegister { |
-#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
+ isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
Encoded_##val = encode, |
REGARM32_FP64_TABLE |
#undef X |
@@ -74,8 +74,8 @@ public: |
/// An enum of 128-bit Q-Registers. The enum value does match the encoding |
/// used to binary encode register operands in instructions. |
enum QRegister { |
-#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
- isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
+#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
+ isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
Encoded_##val = encode, |
REGARM32_VEC128_TABLE |
#undef X |
@@ -94,6 +94,12 @@ public: |
return GPRRegister(2 * (RegNum - Reg_I64PAIR_First + Reg_GPR_First)); |
} |
+ static inline GPRRegister getI64PairSecondGPRNum(int32_t RegNum) { |
+ assert(Reg_I64PAIR_First <= RegNum); |
+ assert(RegNum <= Reg_I64PAIR_Last); |
+ return GPRRegister(2 * (RegNum - Reg_I64PAIR_First + Reg_GPR_First) + 1); |
+ } |
+ |
static inline bool isI64RegisterPair(int32_t RegNum) { |
return Reg_I64PAIR_First <= RegNum && RegNum <= Reg_I64PAIR_Last; |
} |