| Index: src/IceRegistersARM32.h
|
| diff --git a/src/IceRegistersARM32.h b/src/IceRegistersARM32.h
|
| index eafed3afde27a9cfbfce75a9c5969eed959aa4c6..88577559968e6e56f7537e7e730a98ec401026a1 100644
|
| --- a/src/IceRegistersARM32.h
|
| +++ b/src/IceRegistersARM32.h
|
| @@ -27,7 +27,7 @@ public:
|
| /// to binary encode register operands in instructions.
|
| enum AllRegisters {
|
| #define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
|
| - isFP32, isFP64, isVec128, alias_init) \
|
| + isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| val,
|
| REGARM32_TABLE
|
| #undef X
|
| @@ -41,7 +41,7 @@ public:
|
| /// binary encode register operands in instructions.
|
| enum GPRRegister {
|
| #define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
|
| - isFP32, isFP64, isVec128, alias_init) \
|
| + isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| Encoded_##val = encode,
|
| REGARM32_GPR_TABLE
|
| #undef X
|
| @@ -52,7 +52,7 @@ public:
|
| /// to binary encode register operands in instructions.
|
| enum SRegister {
|
| #define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
|
| - isFP32, isFP64, isVec128, alias_init) \
|
| + isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| Encoded_##val = encode,
|
| REGARM32_FP32_TABLE
|
| #undef X
|
| @@ -63,7 +63,7 @@ public:
|
| /// to binary encode register operands in instructions.
|
| enum DRegister {
|
| #define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
|
| - isFP32, isFP64, isVec128, alias_init) \
|
| + isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| Encoded_##val = encode,
|
| REGARM32_FP64_TABLE
|
| #undef X
|
| @@ -74,7 +74,7 @@ public:
|
| /// used to binary encode register operands in instructions.
|
| enum QRegister {
|
| #define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
|
| - isFP32, isFP64, isVec128, alias_init) \
|
| + isI64Pair, isFP32, isFP64, isVec128, alias_init) \
|
| Encoded_##val = encode,
|
| REGARM32_VEC128_TABLE
|
| #undef X
|
| @@ -87,6 +87,16 @@ public:
|
| return GPRRegister(RegNum - Reg_GPR_First);
|
| }
|
|
|
| + static inline GPRRegister getI64PairFirstGPRNum(int32_t RegNum) {
|
| + assert(Reg_I64PAIR_First <= RegNum);
|
| + assert(RegNum <= Reg_I64PAIR_Last);
|
| + return GPRRegister(2 * (RegNum - Reg_I64PAIR_First + Reg_GPR_First));
|
| + }
|
| +
|
| + static inline bool isI64RegisterPair(int32_t RegNum) {
|
| + return Reg_I64PAIR_First <= RegNum && RegNum <= Reg_I64PAIR_Last;
|
| + }
|
| +
|
| static inline SRegister getEncodedSReg(int32_t RegNum) {
|
| assert(Reg_SREG_First <= RegNum);
|
| assert(RegNum <= Reg_SREG_Last);
|
|
|