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